diff --git a/.github/workflows/check-change-note.yml b/.github/workflows/check-change-note.yml index e701090420d..026408a028d 100644 --- a/.github/workflows/check-change-note.yml +++ b/.github/workflows/check-change-note.yml @@ -1,5 +1,8 @@ name: Check change note +permissions: + pull-requests: read + on: pull_request_target: types: [labeled, unlabeled, opened, synchronize, reopened, ready_for_review] diff --git a/.github/workflows/check-implicit-this.yml b/.github/workflows/check-implicit-this.yml index 14100ed3325..f58db399ccb 100644 --- a/.github/workflows/check-implicit-this.yml +++ b/.github/workflows/check-implicit-this.yml @@ -9,6 +9,9 @@ on: - main - "rc/*" +permissions: + contents: read + jobs: check: runs-on: ubuntu-latest diff --git a/.github/workflows/check-qldoc.yml b/.github/workflows/check-qldoc.yml index 7996123e9bf..e64d661c791 100644 --- a/.github/workflows/check-qldoc.yml +++ b/.github/workflows/check-qldoc.yml @@ -10,6 +10,9 @@ on: - main - "rc/*" +permissions: + contents: read + jobs: qldoc: runs-on: ubuntu-latest diff --git a/.github/workflows/check-query-ids.yml b/.github/workflows/check-query-ids.yml index 9e84fe0b0e3..8ae19cc3e5f 100644 --- a/.github/workflows/check-query-ids.yml +++ b/.github/workflows/check-query-ids.yml @@ -11,6 +11,9 @@ on: - "rc/*" workflow_dispatch: +permissions: + contents: read + jobs: check: name: Check query IDs diff --git a/.github/workflows/close-stale.yml b/.github/workflows/close-stale.yml index a9e0d276308..1c74ede8bf6 100644 --- a/.github/workflows/close-stale.yml +++ b/.github/workflows/close-stale.yml @@ -5,6 +5,9 @@ on: schedule: - cron: "30 1 * * *" +permissions: + issues: write + jobs: stale: if: github.repository == 'github/codeql' diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml index c44aa56a753..7176c6c1a50 100644 --- a/.github/workflows/compile-queries.yml +++ b/.github/workflows/compile-queries.yml @@ -8,8 +8,12 @@ on: - "codeql-cli-*" pull_request: +permissions: + contents: read + jobs: compile-queries: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index f9e1db3f4c7..557354e96de 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -25,6 +25,9 @@ defaults: run: working-directory: csharp +permissions: + contents: read + jobs: qlupgrade: runs-on: ubuntu-latest @@ -46,6 +49,7 @@ jobs: xargs codeql execute upgrades testdb diff -q testdb/semmlecode.csharp.dbscheme downgrades/initial/semmlecode.csharp.dbscheme qltest: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl strategy: fail-fast: false diff --git a/.github/workflows/csv-coverage-metrics.yml b/.github/workflows/csv-coverage-metrics.yml index e24c6bc74a4..6f1170047bf 100644 --- a/.github/workflows/csv-coverage-metrics.yml +++ b/.github/workflows/csv-coverage-metrics.yml @@ -14,6 +14,10 @@ on: - ".github/workflows/csv-coverage-metrics.yml" - ".github/actions/fetch-codeql/action.yml" +permissions: + contents: read + security-events: write + jobs: publish-java: runs-on: ubuntu-latest diff --git a/.github/workflows/csv-coverage-pr-artifacts.yml b/.github/workflows/csv-coverage-pr-artifacts.yml index 8e2df456260..b5baa70321d 100644 --- a/.github/workflows/csv-coverage-pr-artifacts.yml +++ b/.github/workflows/csv-coverage-pr-artifacts.yml @@ -19,6 +19,10 @@ on: - main - "rc/*" +permissions: + contents: read + pull-requests: read + jobs: generate: name: Generate framework coverage artifacts diff --git a/.github/workflows/csv-coverage-pr-comment.yml b/.github/workflows/csv-coverage-pr-comment.yml index 86fe74d3419..cf01ef063ac 100644 --- a/.github/workflows/csv-coverage-pr-comment.yml +++ b/.github/workflows/csv-coverage-pr-comment.yml @@ -6,6 +6,10 @@ on: types: - completed +permissions: + contents: read + pull-requests: write + jobs: check: name: Check framework coverage differences and comment diff --git a/.github/workflows/csv-coverage-timeseries.yml b/.github/workflows/csv-coverage-timeseries.yml index cf2758dd9d3..f2e1ed47a3d 100644 --- a/.github/workflows/csv-coverage-timeseries.yml +++ b/.github/workflows/csv-coverage-timeseries.yml @@ -3,6 +3,9 @@ name: Build framework coverage timeseries reports on: workflow_dispatch: +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest diff --git a/.github/workflows/csv-coverage-update.yml b/.github/workflows/csv-coverage-update.yml index ccf1ffd4705..6b73bff820d 100644 --- a/.github/workflows/csv-coverage-update.yml +++ b/.github/workflows/csv-coverage-update.yml @@ -5,6 +5,10 @@ on: schedule: - cron: "0 0 * * *" +permissions: + contents: write + pull-requests: write + jobs: update: name: Update framework coverage report diff --git a/.github/workflows/csv-coverage.yml b/.github/workflows/csv-coverage.yml index 4fb1d143fc3..9461ba887f5 100644 --- a/.github/workflows/csv-coverage.yml +++ b/.github/workflows/csv-coverage.yml @@ -7,6 +7,9 @@ on: description: "github/codeql repo SHA used for looking up the CSV models" required: false +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest diff --git a/.github/workflows/fast-forward.yml b/.github/workflows/fast-forward.yml index c89675efc4e..dd8fefbc529 100644 --- a/.github/workflows/fast-forward.yml +++ b/.github/workflows/fast-forward.yml @@ -7,13 +7,14 @@ name: Fast-forward tracking branch for selected CodeQL version on: workflow_dispatch: +permissions: + contents: write + jobs: fast-forward: name: Fast-forward tracking branch for selected CodeQL version runs-on: ubuntu-latest if: github.repository == 'github/codeql' - permissions: - contents: write env: BRANCH_NAME: 'lgtm.com' steps: diff --git a/.github/workflows/go-tests-other-os.yml b/.github/workflows/go-tests-other-os.yml index 8b0395fad90..ded53f868b7 100644 --- a/.github/workflows/go-tests-other-os.yml +++ b/.github/workflows/go-tests-other-os.yml @@ -8,7 +8,11 @@ on: - .github/actions/** - codeql-workspace.yml env: - GO_VERSION: '~1.21.0' + GO_VERSION: '~1.22.0' + +permissions: + contents: read + jobs: test-mac: name: Test MacOS @@ -18,6 +22,7 @@ jobs: uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} + cache: false id: go - name: Check out code @@ -46,6 +51,7 @@ jobs: make test cache="${{ steps.query-cache.outputs.cache-dir }}" test-win: + if: github.repository_owner == 'github' name: Test Windows runs-on: windows-latest-xl steps: @@ -53,6 +59,7 @@ jobs: uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} + cache: false id: go - name: Check out code diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml index 9d518ac70b6..6d9cac5dae9 100644 --- a/.github/workflows/go-tests.yml +++ b/.github/workflows/go-tests.yml @@ -15,10 +15,16 @@ on: - .github/workflows/go-tests.yml - .github/actions/** - codeql-workspace.yml + env: - GO_VERSION: '~1.21.0' + GO_VERSION: '~1.22.0' + +permissions: + contents: read + jobs: test-linux: + if: github.repository_owner == 'github' name: Test Linux (Ubuntu) runs-on: ubuntu-latest-xl steps: @@ -26,6 +32,7 @@ jobs: uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} + cache: false id: go - name: Check out code diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 057208eda32..512fa40d2e3 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -2,11 +2,12 @@ name: "Pull Request Labeler" on: - pull_request_target +permissions: + contents: read + pull-requests: write + jobs: triage: - permissions: - contents: read - pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/labeler@v4 diff --git a/.github/workflows/mad_regenerate-models.yml b/.github/workflows/mad_regenerate-models.yml index 3268a17dfbb..1c7d14238f3 100644 --- a/.github/workflows/mad_regenerate-models.yml +++ b/.github/workflows/mad_regenerate-models.yml @@ -11,6 +11,9 @@ on: - ".github/workflows/mad_regenerate-models.yml" - ".github/actions/fetch-codeql/action.yml" +permissions: + contents: read + jobs: regenerate-models: runs-on: ubuntu-latest diff --git a/.github/workflows/qhelp-pr-preview.yml b/.github/workflows/qhelp-pr-preview.yml index 8b20fbe00c9..db267175d4e 100644 --- a/.github/workflows/qhelp-pr-preview.yml +++ b/.github/workflows/qhelp-pr-preview.yml @@ -77,7 +77,7 @@ jobs: done < "${RUNNER_TEMP}/paths.txt" >> comment_body.txt exit "${EXIT_CODE}" - - if: always() + - if: ${{ !cancelled() }} uses: actions/upload-artifact@v3 with: name: comment diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index e8ac1fa0f17..94e4526b35e 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -9,8 +9,13 @@ on: env: CARGO_TERM_COLOR: always +permissions: + contents: read + security-events: write + jobs: analyze: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: ### Build the queries ### @@ -19,7 +24,7 @@ jobs: fetch-depth: 0 - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version @@ -65,7 +70,7 @@ jobs: exclude:*/ql/lib/upgrades/ exclude:java/ql/integration-tests - name: Upload sarif to code-scanning - uses: github/codeql-action/upload-sarif@v2 + uses: github/codeql-action/upload-sarif@main with: sarif_file: ql-for-ql.sarif category: ql-for-ql diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml index d317d467c9a..4f9887c4edc 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -11,6 +11,10 @@ on: - ql/ql/src/ql.dbscheme workflow_dispatch: +permissions: + contents: read + security-events: read + jobs: measure: env: @@ -25,7 +29,7 @@ jobs: - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index 4385e3f76bb..578c26c2977 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -17,6 +17,9 @@ on: env: CARGO_TERM_COLOR: always +permissions: + contents: read + jobs: qltest: runs-on: ubuntu-latest @@ -24,7 +27,7 @@ jobs: - uses: actions/checkout@v4 - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version @@ -69,7 +72,7 @@ jobs: echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH - name: Find codeql id: find-codeql - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@main with: languages: javascript # does not matter - uses: ./.github/actions/os-version diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index 07fb3b682da..233cc8120f5 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -13,6 +13,9 @@ on: - '.github/actions/fetch-codeql/action.yml' - 'misc/scripts/generate-code-scanning-query-list.py' +permissions: + contents: read + jobs: build: diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index 392c6ff8302..fda4045cd44 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -32,6 +32,9 @@ defaults: run: working-directory: ruby +permissions: + contents: read + jobs: build: strategy: @@ -111,6 +114,7 @@ jobs: ruby/extractor/target/release/codeql-extractor-ruby.exe retention-days: 1 compile-queries: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/ruby-dataset-measure.yml b/.github/workflows/ruby-dataset-measure.yml index c064d8d2bfb..dd15a0aa63e 100644 --- a/.github/workflows/ruby-dataset-measure.yml +++ b/.github/workflows/ruby-dataset-measure.yml @@ -17,6 +17,9 @@ on: - .github/workflows/ruby-dataset-measure.yml workflow_dispatch: +permissions: + contents: read + jobs: measure: env: diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml index 19d5325091f..9dc86bbce20 100644 --- a/.github/workflows/ruby-qltest.yml +++ b/.github/workflows/ruby-qltest.yml @@ -29,6 +29,9 @@ defaults: run: working-directory: ruby +permissions: + contents: read + jobs: qlupgrade: runs-on: ubuntu-latest @@ -50,6 +53,7 @@ jobs: xargs codeql execute upgrades testdb diff -q testdb/ruby.dbscheme downgrades/initial/ruby.dbscheme qltest: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl strategy: fail-fast: false diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index ff9cd29e238..6956d31a398 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -33,40 +33,47 @@ on: - rc/* - codeql-cli-* +permissions: + contents: read + jobs: # not using a matrix as you cannot depend on a specific job in a matrix, and we want to start linux checks # without waiting for the macOS build build-and-test-macos: + if: github.repository_owner == 'github' runs-on: macos-12-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/build-and-test build-and-test-linux: + if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/build-and-test qltests-linux: + if: github.repository_owner == 'github' needs: build-and-test-linux runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/run-ql-tests qltests-macos: - if : ${{ github.event_name == 'pull_request' }} + if: ${{ github.repository_owner == 'github' && github.event_name == 'pull_request' }} needs: build-and-test-macos runs-on: macos-12-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/run-ql-tests integration-tests-linux: + if: github.repository_owner == 'github' needs: build-and-test-linux runs-on: ubuntu-latest-xl steps: - uses: actions/checkout@v4 - uses: ./swift/actions/run-integration-tests integration-tests-macos: - if : ${{ github.event_name == 'pull_request' }} + if: ${{ github.repository_owner == 'github' && github.event_name == 'pull_request' }} needs: build-and-test-macos runs-on: macos-12-xl timeout-minutes: 60 diff --git a/.github/workflows/sync-files.yml b/.github/workflows/sync-files.yml index 7894eae7f55..1ed49ac3ecf 100644 --- a/.github/workflows/sync-files.yml +++ b/.github/workflows/sync-files.yml @@ -10,6 +10,9 @@ on: - main - 'rc/*' +permissions: + contents: read + jobs: sync: runs-on: ubuntu-latest diff --git a/.github/workflows/tree-sitter-extractor-test.yml b/.github/workflows/tree-sitter-extractor-test.yml index 5d13b25466d..acc68e7ec2c 100644 --- a/.github/workflows/tree-sitter-extractor-test.yml +++ b/.github/workflows/tree-sitter-extractor-test.yml @@ -23,6 +23,9 @@ defaults: run: working-directory: shared/tree-sitter-extractor +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/validate-change-notes.yml b/.github/workflows/validate-change-notes.yml index f8c1d9f6504..3c83ffa709a 100644 --- a/.github/workflows/validate-change-notes.yml +++ b/.github/workflows/validate-change-notes.yml @@ -15,6 +15,9 @@ on: - ".github/workflows/validate-change-notes.yml" - ".github/actions/fetch-codeql/action.yml" +permissions: + contents: read + jobs: check-change-note: runs-on: ubuntu-latest diff --git a/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/exprparents.ql b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/exprparents.ql new file mode 100644 index 00000000000..9d2071ae1f7 --- /dev/null +++ b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/exprparents.ql @@ -0,0 +1,19 @@ +class Element extends @element { + string toString() { none() } +} + +class Expr extends @expr { + string toString() { none() } +} + +class Stmt extends @stmt { + string toString() { none() } +} + +predicate isStmtWithInitializer(Stmt stmt) { exists(int kind | stmts(stmt, kind, _) | kind = 29) } + +from Expr child, int index, int index_new, Element parent +where + exprparents(child, index, parent) and + if isStmtWithInitializer(parent) then index_new = index - 1 else index_new = index +select child, index_new, parent diff --git a/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/for_initialization.ql b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/for_initialization.ql new file mode 100644 index 00000000000..6f09ce7e17d --- /dev/null +++ b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/for_initialization.ql @@ -0,0 +1,9 @@ +class Stmt extends @stmt { + string toString() { none() } +} + +from Stmt f, Stmt i +where + for_initialization(f, i) and + f instanceof @stmt_for +select f, i diff --git a/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/old.dbscheme b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/old.dbscheme new file mode 100644 index 00000000000..298438feb14 --- /dev/null +++ b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/old.dbscheme @@ -0,0 +1,2244 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/semmlecode.cpp.dbscheme b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..4f9fabab512 --- /dev/null +++ b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/semmlecode.cpp.dbscheme @@ -0,0 +1,2241 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/stmtparents.ql b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/stmtparents.ql new file mode 100644 index 00000000000..3e26873debb --- /dev/null +++ b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/stmtparents.ql @@ -0,0 +1,20 @@ +class Element extends @element { + string toString() { none() } +} + +class Stmt extends @stmt { + string toString() { none() } +} + +predicate isStmtWithInitializer(Stmt stmt) { exists(int kind | stmts(stmt, kind, _) | kind = 29) } + +from Stmt child, int index, int index_new, Element parent +where + stmtparents(child, index, parent) and + ( + not isStmtWithInitializer(parent) + or + index > 0 + ) and + if isStmtWithInitializer(parent) then index_new = index - 1 else index_new = index +select child, index_new, parent diff --git a/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/upgrade.properties b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/upgrade.properties new file mode 100644 index 00000000000..8c7ed37ab4f --- /dev/null +++ b/cpp/downgrades/298438feb146335af824002589cd6d4e96e5dbf9/upgrade.properties @@ -0,0 +1,5 @@ +description: Support C++20 range-based for initializers +compatibility: partial +exprparents.rel: run exprparents.qlo +stmtparents.rel: run stmtparents.qlo +for_initialization.rel: run for_initialization.qlo diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index b552a329250..b3091ec37d8 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.12.6 + +### New Features + +* A `getInitialization` predicate was added to the `RangeBasedForStmt` class that yields the C++20-style initializer of the range-based `for` statement when it exists. + ## 0.12.5 ### New Features diff --git a/cpp/ql/lib/change-notes/released/0.12.6.md b/cpp/ql/lib/change-notes/released/0.12.6.md new file mode 100644 index 00000000000..aba848023ee --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.12.6.md @@ -0,0 +1,5 @@ +## 0.12.6 + +### New Features + +* A `getInitialization` predicate was added to the `RangeBasedForStmt` class that yields the C++20-style initializer of the range-based `for` statement when it exists. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 79f80ae516c..170a312c104 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.12.5 +lastReleaseVersion: 0.12.6 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index b1b4172e977..90171958170 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.12.5 +version: 0.12.6 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll index 737ad223ac5..fa894a8b0fb 100644 --- a/cpp/ql/lib/semmle/code/cpp/PrintAST.qll +++ b/cpp/ql/lib/semmle/code/cpp/PrintAST.qll @@ -735,7 +735,9 @@ private predicate namedStmtChildPredicates(Locatable s, Element e, string pred) or s.(ForStmt).getStmt() = e and pred = "getStmt()" or - s.(RangeBasedForStmt).getChild(0) = e and pred = "getChild(0)" + s.(RangeBasedForStmt).getInitialization() = e and pred = "getInitialization()" + or + s.(RangeBasedForStmt).getChild(1) = e and pred = "getChild(1)" or s.(RangeBasedForStmt).getBeginEndDeclaration() = e and pred = "getBeginEndDeclaration()" or @@ -743,7 +745,7 @@ private predicate namedStmtChildPredicates(Locatable s, Element e, string pred) or s.(RangeBasedForStmt).getUpdate() = e and pred = "getUpdate()" or - s.(RangeBasedForStmt).getChild(4) = e and pred = "getChild(4)" + s.(RangeBasedForStmt).getChild(5) = e and pred = "getChild(5)" or s.(RangeBasedForStmt).getStmt() = e and pred = "getStmt()" or @@ -835,7 +837,11 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred) or expr.(OverloadedArrayExpr).getArrayOffset() = ele and pred = "getArrayOffset()" or - expr.(OverloadedPointerDereferenceExpr).getExpr() = ele and pred = "getExpr()" + // OverloadedPointerDereferenceExpr::getExpr/0 also considers qualifiers, which are already handled above for all Call classes. + not expr.(OverloadedPointerDereferenceExpr).getQualifier() = + expr.(OverloadedPointerDereferenceExpr).getExpr() and + expr.(OverloadedPointerDereferenceExpr).getExpr() = ele and + pred = "getExpr()" or expr.(CommaExpr).getLeftOperand() = ele and pred = "getLeftOperand()" or diff --git a/cpp/ql/lib/semmle/code/cpp/Variable.qll b/cpp/ql/lib/semmle/code/cpp/Variable.qll index 0f66c0f51d4..db334f45572 100644 --- a/cpp/ql/lib/semmle/code/cpp/Variable.qll +++ b/cpp/ql/lib/semmle/code/cpp/Variable.qll @@ -234,7 +234,16 @@ class VariableDeclarationEntry extends DeclarationEntry, @var_decl { * int f(int y) { return y; } * ``` */ - override string getName() { var_decls(underlyingElement(this), _, _, result, _) and result != "" } + override string getName() { + exists(string name | + var_decls(underlyingElement(this), _, _, name, _) and + ( + name != "" and result = name + or + name = "" and result = this.getVariable().(LocalVariable).getName() + ) + ) + } /** * Gets the type of the variable which is being declared or defined. diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 58cf643d9ac..0adba6c1e71 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -203,30 +203,42 @@ private class GuardConditionFromIR extends GuardCondition { * `&&` and `||`. See the detailed explanation on predicate `controls`. */ private predicate controlsBlock(BasicBlock controlled, boolean testIsTrue) { - exists(IRBlock irb, Instruction instr | + exists(IRBlock irb | ir.controls(irb, testIsTrue) and - instr = irb.getAnInstruction() and - instr.getAst().(ControlFlowNode).getBasicBlock() = controlled and - not isUnreachedBlock(irb) and - not this.excludeAsControlledInstruction(instr) + nonExcludedIRAndBasicBlock(irb, controlled) and + not isUnreachedBlock(irb) ) } +} - private predicate excludeAsControlledInstruction(Instruction instr) { - // Exclude the temporaries generated by a ternary expression. - exists(TranslatedConditionalExpr tce | - instr = tce.getInstruction(ConditionValueFalseStoreTag()) - or - instr = tce.getInstruction(ConditionValueTrueStoreTag()) - or - instr = tce.getInstruction(ConditionValueTrueTempAddressTag()) - or - instr = tce.getInstruction(ConditionValueFalseTempAddressTag()) - ) +private predicate excludeAsControlledInstruction(Instruction instr) { + // Exclude the temporaries generated by a ternary expression. + exists(TranslatedConditionalExpr tce | + instr = tce.getInstruction(ConditionValueFalseStoreTag()) or - // Exclude unreached instructions, as their AST is the whole function and not a block. - instr instanceof UnreachedInstruction - } + instr = tce.getInstruction(ConditionValueTrueStoreTag()) + or + instr = tce.getInstruction(ConditionValueTrueTempAddressTag()) + or + instr = tce.getInstruction(ConditionValueFalseTempAddressTag()) + ) + or + // Exclude unreached instructions, as their AST is the whole function and not a block. + instr instanceof UnreachedInstruction +} + +/** + * Holds if `irb` is the `IRBlock` corresponding to the AST basic block + * `controlled`, and `irb` does not contain any instruction(s) that should make + * the `irb` be ignored. + */ +pragma[nomagic] +private predicate nonExcludedIRAndBasicBlock(IRBlock irb, BasicBlock controlled) { + exists(Instruction instr | + instr = irb.getAnInstruction() and + instr.getAst().(ControlFlowNode).getBasicBlock() = controlled and + not excludeAsControlledInstruction(instr) + ) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll index 32d9cb9bce4..c003ec4595e 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll @@ -637,8 +637,10 @@ private predicate straightLineSparse(Node scope, int i, Node ni, Spec spec) { any(RangeBasedForStmt for | i = -1 and ni = for and spec.isAt() or + i = 0 and ni = for.getInitialization() and spec.isAround() + or exists(DeclStmt s | s.getADeclaration() = for.getRangeVariable() | - i = 0 and ni = s and spec.isAround() + i = 1 and ni = s and spec.isAround() ) or exists(DeclStmt s | @@ -649,22 +651,22 @@ private predicate straightLineSparse(Node scope, int i, Node ni, Spec spec) { // DeclStmt in that case. exists(s.getADeclaration()) | - i = 1 and ni = s and spec.isAround() + i = 2 and ni = s and spec.isAround() ) or - i = 2 and ni = for.getCondition() and spec.isBefore() + i = 3 and ni = for.getCondition() and spec.isBefore() or - i = 3 and /* BARRIER */ ni = for and spec.isBarrier() + i = 4 and /* BARRIER */ ni = for and spec.isBarrier() or exists(DeclStmt declStmt | declStmt.getADeclaration() = for.getVariable() | - i = 4 and ni = declStmt and spec.isAfter() + i = 5 and ni = declStmt and spec.isAfter() ) or - i = 5 and ni = for.getStmt() and spec.isAround() + i = 6 and ni = for.getStmt() and spec.isAround() or - i = 6 and ni = for.getUpdate() and spec.isAround() + i = 7 and ni = for.getUpdate() and spec.isAround() or - i = 7 and ni = for.getCondition() and spec.isBefore() + i = 8 and ni = for.getCondition() and spec.isBefore() ) or scope = diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll index f30c9ec8d67..56ec87b23f2 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Assignment.qll @@ -244,9 +244,15 @@ class ConditionDeclExpr extends Expr, @condition_decl { /** * Gets the compiler-generated variable access that conceptually occurs after - * the initialization of the declared variable. + * the initialization of the declared variable, if any. */ - VariableAccess getVariableAccess() { result = this.getChild(0) } + VariableAccess getVariableAccess() { result = this.getExpr() } + + /** + * Gets the expression that is evaluated after the initialization of the declared + * variable. + */ + Expr getExpr() { result = this.getChild(0) } /** * Gets the expression that initializes the declared variable. This predicate diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index 1af95d1bd69..7d4bb6f5866 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -709,7 +709,7 @@ class FinalGlobalValue extends Node, TFinalGlobalValue { override DataFlowType getType() { exists(int indirectionIndex | indirectionIndex = globalUse.getIndirectionIndex() and - result = getTypeImpl(globalUse.getUnspecifiedType(), indirectionIndex - 1) + result = getTypeImpl(globalUse.getUnderlyingType(), indirectionIndex - 1) ) } @@ -740,7 +740,7 @@ class InitialGlobalValue extends Node, TInitialGlobalValue { override DataFlowType getType() { exists(DataFlowType type | - type = globalDef.getUnspecifiedType() and + type = globalDef.getUnderlyingType() and if this.isGLValue() then result = type else result = getTypeImpl(type, globalDef.getIndirectionIndex() - 1) @@ -943,10 +943,13 @@ private Type getTypeImpl0(Type t, int indirectionIndex) { indirectionIndex > 0 and exists(Type stripped | stripped = stripPointer(t.stripTopLevelSpecifiers()) and - // We need to avoid the case where `stripPointer(t) = t` (which can happen on - // iterators that specify a `value_type` that is the iterator itself). Such a type - // would create an infinite loop otherwise. For these cases we simply don't produce - // a result for `getTypeImpl`. + // We need to avoid the case where `stripPointer(t) = t` (which can happen + // on iterators that specify a `value_type` that is the iterator itself). + // Such a type would create an infinite loop otherwise. For these cases we + // simply don't produce a result for `getTypeImpl`. + // To be on the safe side, we check whether the _unspecified_ type has + // changed since this also prevents an infinite loop when `stripped` and + // `t` only differ by const'ness or volatile'ness. stripped.getUnspecifiedType() != t.getUnspecifiedType() and result = getTypeImpl0(stripped, indirectionIndex - 1) ) @@ -996,12 +999,14 @@ private module RawIndirectNodes { override Declaration getEnclosingCallable() { result = this.getFunction() } + override predicate isGLValue() { this.getOperand().isGLValue() } + override DataFlowType getType() { exists(int sub, DataFlowType type, boolean isGLValue | type = getOperandType(this.getOperand(), isGLValue) and if isGLValue = true then sub = 1 else sub = 0 | - result = getTypeImpl(type.getUnspecifiedType(), indirectionIndex - sub) + result = getTypeImpl(type.getUnderlyingType(), indirectionIndex - sub) ) } @@ -1038,12 +1043,14 @@ private module RawIndirectNodes { override Declaration getEnclosingCallable() { result = this.getFunction() } + override predicate isGLValue() { this.getInstruction().isGLValue() } + override DataFlowType getType() { exists(int sub, DataFlowType type, boolean isGLValue | type = getInstructionType(this.getInstruction(), isGLValue) and if isGLValue = true then sub = 1 else sub = 0 | - result = getTypeImpl(type.getUnspecifiedType(), indirectionIndex - sub) + result = getTypeImpl(type.getUnderlyingType(), indirectionIndex - sub) ) } @@ -1136,7 +1143,7 @@ class FinalParameterNode extends Node, TFinalParameterNode { override Declaration getEnclosingCallable() { result = this.getFunction() } - override DataFlowType getType() { result = getTypeImpl(p.getUnspecifiedType(), indirectionIndex) } + override DataFlowType getType() { result = getTypeImpl(p.getUnderlyingType(), indirectionIndex) } final override Location getLocationImpl() { // Parameters can have multiple locations. When there's a unique location we use @@ -1789,7 +1796,7 @@ class VariableNode extends Node, TVariableNode { } override DataFlowType getType() { - result = getTypeImpl(v.getUnspecifiedType(), indirectionIndex - 1) + result = getTypeImpl(v.getUnderlyingType(), indirectionIndex - 1) } final override Location getLocationImpl() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll index bc511d6f340..e64f2285821 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll @@ -507,13 +507,13 @@ module ProductFlow { private predicate pathSuccPlus(TNodePair n1, TNodePair n2) = fastTC(pathSucc/2)(n1, n2) private predicate localPathStep1(Flow1::PathNode pred, Flow1::PathNode succ) { - Flow1::PathGraph::edges(pred, succ) and + Flow1::PathGraph::edges(pred, succ, _, _) and pragma[only_bind_out](pred.getNode().getEnclosingCallable()) = pragma[only_bind_out](succ.getNode().getEnclosingCallable()) } private predicate localPathStep2(Flow2::PathNode pred, Flow2::PathNode succ) { - Flow2::PathGraph::edges(pred, succ) and + Flow2::PathGraph::edges(pred, succ, _, _) and pragma[only_bind_out](pred.getNode().getEnclosingCallable()) = pragma[only_bind_out](succ.getNode().getEnclosingCallable()) } @@ -530,7 +530,7 @@ module ProductFlow { TJump() private predicate intoImpl1(Flow1::PathNode pred1, Flow1::PathNode succ1, DataFlowCall call) { - Flow1::PathGraph::edges(pred1, succ1) and + Flow1::PathGraph::edges(pred1, succ1, _, _) and pred1.getNode().(ArgumentNode).getCall() = call and succ1.getNode() instanceof ParameterNode } @@ -543,7 +543,7 @@ module ProductFlow { } private predicate outImpl1(Flow1::PathNode pred1, Flow1::PathNode succ1, DataFlowCall call) { - Flow1::PathGraph::edges(pred1, succ1) and + Flow1::PathGraph::edges(pred1, succ1, _, _) and exists(ReturnKindExt returnKind | succ1.getNode() = returnKind.getAnOutNode(call) and pred1.getNode().(ReturnNodeExt).getKind() = returnKind @@ -558,7 +558,7 @@ module ProductFlow { } private predicate intoImpl2(Flow2::PathNode pred2, Flow2::PathNode succ2, DataFlowCall call) { - Flow2::PathGraph::edges(pred2, succ2) and + Flow2::PathGraph::edges(pred2, succ2, _, _) and pred2.getNode().(ArgumentNode).getCall() = call and succ2.getNode() instanceof ParameterNode } @@ -571,7 +571,7 @@ module ProductFlow { } private predicate outImpl2(Flow2::PathNode pred2, Flow2::PathNode succ2, DataFlowCall call) { - Flow2::PathGraph::edges(pred2, succ2) and + Flow2::PathGraph::edges(pred2, succ2, _, _) and exists(ReturnKindExt returnKind | succ2.getNode() = returnKind.getAnOutNode(call) and pred2.getNode().(ReturnNodeExt).getKind() = returnKind @@ -590,7 +590,7 @@ module ProductFlow { Declaration predDecl, Declaration succDecl, Flow1::PathNode pred1, Flow1::PathNode succ1, TKind kind ) { - Flow1::PathGraph::edges(pred1, succ1) and + Flow1::PathGraph::edges(pred1, succ1, _, _) and predDecl != succDecl and pred1.getNode().getEnclosingCallable() = predDecl and succ1.getNode().getEnclosingCallable() = succDecl and @@ -610,7 +610,7 @@ module ProductFlow { Declaration predDecl, Declaration succDecl, Flow2::PathNode pred2, Flow2::PathNode succ2, TKind kind ) { - Flow2::PathGraph::edges(pred2, succ2) and + Flow2::PathGraph::edges(pred2, succ2, _, _) and predDecl != succDecl and pred2.getNode().getEnclosingCallable() = predDecl and succ2.getNode().getEnclosingCallable() = succDecl and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 996385f2bfa..8a5e8d20319 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -142,7 +142,7 @@ private newtype TDefOrUseImpl = exists(SsaInternals0::Def def | def.getSourceVariable().getBaseVariable().(BaseIRVariable).getIRVariable().getAst() = p and not def.getValue().asInstruction() instanceof InitializeParameterInstruction and - unspecifiedTypeIsModifiableAt(p.getUnspecifiedType(), indirectionIndex) + underlyingTypeIsModifiableAt(p.getUnderlyingType(), indirectionIndex) ) } @@ -172,11 +172,13 @@ private predicate isGlobalDefImpl( ) } -private predicate unspecifiedTypeIsModifiableAt(Type unspecified, int indirectionIndex) { - indirectionIndex = [1 .. getIndirectionForUnspecifiedType(unspecified).getNumberOfIndirections()] and +private predicate underlyingTypeIsModifiableAt(Type underlying, int indirectionIndex) { + indirectionIndex = + [1 .. getIndirectionForUnspecifiedType(underlying.getUnspecifiedType()) + .getNumberOfIndirections()] and exists(CppType cppType | - cppType.hasUnspecifiedType(unspecified, _) and - isModifiableAt(cppType, indirectionIndex + 1) + cppType.hasUnderlyingType(underlying, false) and + isModifiableAt(cppType, indirectionIndex) ) } @@ -545,6 +547,11 @@ class GlobalUse extends UseImpl, TGlobalUse { */ Type getUnspecifiedType() { result = global.getUnspecifiedType() } + /** + * Gets the type of this use, after typedefs have been resolved. + */ + Type getUnderlyingType() { result = global.getUnderlyingType() } + override predicate isCertain() { any() } override BaseSourceVariableInstruction getBase() { none() } @@ -588,11 +595,16 @@ class GlobalDefImpl extends DefOrUseImpl, TGlobalDefImpl { int getIndirection() { result = indirectionIndex } /** - * Gets the type of this use after specifiers have been deeply stripped - * and typedefs have been resolved. + * Gets the type of this definition after specifiers have been deeply + * stripped and typedefs have been resolved. */ Type getUnspecifiedType() { result = global.getUnspecifiedType() } + /** + * Gets the type of this definition, after typedefs have been resolved. + */ + Type getUnderlyingType() { result = global.getUnderlyingType() } + override string toString() { result = "Def of " + this.getSourceVariable() } override Location getLocation() { result = f.getLocation() } @@ -1092,6 +1104,11 @@ class GlobalDef extends TGlobalDef, SsaDefOrUse { */ DataFlowType getUnspecifiedType() { result = global.getUnspecifiedType() } + /** + * Gets the type of this definition, after typedefs have been resolved. + */ + DataFlowType getUnderlyingType() { result = global.getUnderlyingType() } + /** Gets the `IRFunction` whose body is evaluated after this definition. */ IRFunction getIRFunction() { result = global.getIRFunction() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll index e349367fed4..862070820f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternalsCommon.qll @@ -452,7 +452,7 @@ private module IsModifiableAtImpl { private predicate impl(CppType cppType, int indirectionIndex) { exists(Type pointerType, Type base | isUnderlyingIndirectionType(pointerType) and - cppType.hasUnderlyingType(pointerType, _) and + cppType.hasUnderlyingType(pointerType, false) and base = getTypeImpl(pointerType, indirectionIndex) | // The value cannot be modified if it has a const specifier, diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index bf07e73d5fe..189ffce2903 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -2125,13 +2125,6 @@ class ChiInstruction extends Instruction { */ final Instruction getPartial() { result = this.getPartialOperand().getDef() } - /** - * Gets the bit range `[startBit, endBit)` updated by the partial operand of this `ChiInstruction`, relative to the start address of the total operand. - */ - final predicate getUpdatedInterval(int startBit, int endBit) { - Construction::getIntervalUpdatedByChi(this, startBit, endBit) - } - /** * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. * This means that the `ChiPartialOperand` will not override the entire memory associated with the diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll index 04522e4fe18..209c42726b7 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/SSAConstruction.qll @@ -233,20 +233,6 @@ private module Cached { ) } - /** - * Holds if the partial operand of this `ChiInstruction` updates the bit range - * `[startBitOffset, endBitOffset)` of the total operand. - */ - cached - predicate getIntervalUpdatedByChi(ChiInstruction chi, int startBitOffset, int endBitOffset) { - exists(Alias::MemoryLocation location, OldInstruction oldInstruction | - oldInstruction = getOldInstruction(chi.getPartial()) and - location = Alias::getResultMemoryLocation(oldInstruction) and - startBitOffset = Alias::getStartBitOffset(location) and - endBitOffset = Alias::getEndBitOffset(location) - ) - } - /** * Holds if `operand` totally overlaps with its definition and consumes the bit range * `[startBitOffset, endBitOffset)`. diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll index bf07e73d5fe..189ffce2903 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -2125,13 +2125,6 @@ class ChiInstruction extends Instruction { */ final Instruction getPartial() { result = this.getPartialOperand().getDef() } - /** - * Gets the bit range `[startBit, endBit)` updated by the partial operand of this `ChiInstruction`, relative to the start address of the total operand. - */ - final predicate getUpdatedInterval(int startBit, int endBit) { - Construction::getIntervalUpdatedByChi(this, startBit, endBit) - } - /** * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. * This means that the `ChiPartialOperand` will not override the entire memory associated with the diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll index 7e4c3e7934c..07764ef7aa4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/IRConstruction.qll @@ -202,12 +202,6 @@ Instruction getMemoryOperandDefinition( none() } -/** - * Holds if the partial operand of this `ChiInstruction` updates the bit range - * `[startBitOffset, endBitOffset)` of the total operand. - */ -predicate getIntervalUpdatedByChi(ChiInstruction chi, int startBit, int endBit) { none() } - /** * Holds if the operand totally overlaps with its definition and consumes the * bit range `[startBitOffset, endBitOffset)`. diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index c3c4bf897cc..c83aea863e0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -209,6 +209,8 @@ private predicate usedAsCondition(Expr expr) { or exists(IfStmt ifStmt | ifStmt.getCondition().getFullyConverted() = expr) or + exists(ConstexprIfStmt ifStmt | ifStmt.getCondition().getFullyConverted() = expr) + or exists(ConditionalExpr condExpr | // The two-operand form of `ConditionalExpr` treats its condition as a value, since it needs to // be reused as a value if the condition is true. @@ -474,7 +476,6 @@ private module IRDeclarationEntries { * This class exists to work around the fact that `DeclStmt`s in some cases * do not have `DeclarationEntry`s. Currently, this is the case for: * - `DeclStmt`s in template instantiations. - * - `DeclStmt`s that are generated by the desugaring of range-based for-loops. * * So instead, the IR works with `IRDeclarationEntry`s that synthesize missing * `DeclarationEntry`s when there is no result for `DeclStmt::getDeclarationEntry`. diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index 1e4b52283fc..4bf21a43f63 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -3173,7 +3173,7 @@ class TranslatedConditionDeclExpr extends TranslatedNonConstantExpr { private TranslatedConditionDecl getDecl() { result = getTranslatedConditionDecl(expr) } private TranslatedExpr getConditionExpr() { - result = getTranslatedExpr(expr.getVariableAccess().getFullyConverted()) + result = getTranslatedExpr(expr.getExpr().getFullyConverted()) } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll index 67a7a8aa83b..a7d12052392 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll @@ -774,6 +774,72 @@ class TranslatedIfStmt extends TranslatedStmt, ConditionContext { } } +class TranslatedConstExprIfStmt extends TranslatedStmt, ConditionContext { + override ConstexprIfStmt stmt; + + override Instruction getFirstInstruction(EdgeKind kind) { + if this.hasInitialization() + then result = this.getInitialization().getFirstInstruction(kind) + else result = this.getFirstConditionInstruction(kind) + } + + override TranslatedElement getChild(int id) { + id = 0 and result = this.getInitialization() + or + id = 1 and result = this.getCondition() + or + id = 2 and result = this.getThen() + or + id = 3 and result = this.getElse() + } + + private predicate hasInitialization() { exists(stmt.getInitialization()) } + + private TranslatedStmt getInitialization() { + result = getTranslatedStmt(stmt.getInitialization()) + } + + private TranslatedCondition getCondition() { + result = getTranslatedCondition(stmt.getCondition().getFullyConverted()) + } + + private Instruction getFirstConditionInstruction(EdgeKind kind) { + result = this.getCondition().getFirstInstruction(kind) + } + + private TranslatedStmt getThen() { result = getTranslatedStmt(stmt.getThen()) } + + private TranslatedStmt getElse() { result = getTranslatedStmt(stmt.getElse()) } + + private predicate hasElse() { exists(stmt.getElse()) } + + override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) { none() } + + override Instruction getChildTrueSuccessor(TranslatedCondition child, EdgeKind kind) { + child = this.getCondition() and + result = this.getThen().getFirstInstruction(kind) + } + + override Instruction getChildFalseSuccessor(TranslatedCondition child, EdgeKind kind) { + child = this.getCondition() and + if this.hasElse() + then result = this.getElse().getFirstInstruction(kind) + else result = this.getParent().getChildSuccessor(this, kind) + } + + override Instruction getChildSuccessor(TranslatedElement child, EdgeKind kind) { + child = this.getInitialization() and + result = this.getFirstConditionInstruction(kind) + or + (child = this.getThen() or child = this.getElse()) and + result = this.getParent().getChildSuccessor(this, kind) + } + + override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + none() + } +} + abstract class TranslatedLoop extends TranslatedStmt, ConditionContext { override Loop stmt; @@ -894,25 +960,38 @@ class TranslatedRangeBasedForStmt extends TranslatedStmt, ConditionContext { override RangeBasedForStmt stmt; override TranslatedElement getChild(int id) { - id = 0 and result = this.getRangeVariableDeclStmt() + id = 0 and result = this.getInitialization() + or + id = 1 and result = this.getRangeVariableDeclStmt() or // Note: `__begin` and `__end` are declared by the same `DeclStmt` - id = 1 and result = this.getBeginEndVariableDeclStmt() + id = 2 and result = this.getBeginEndVariableDeclStmt() or - id = 2 and result = this.getCondition() + id = 3 and result = this.getCondition() or - id = 3 and result = this.getUpdate() + id = 4 and result = this.getUpdate() or - id = 4 and result = this.getVariableDeclStmt() + id = 5 and result = this.getVariableDeclStmt() or - id = 5 and result = this.getBody() + id = 6 and result = this.getBody() + } + + private predicate hasInitialization() { exists(stmt.getInitialization()) } + + private TranslatedStmt getInitialization() { + result = getTranslatedStmt(stmt.getInitialization()) } override Instruction getFirstInstruction(EdgeKind kind) { - result = this.getRangeVariableDeclStmt().getFirstInstruction(kind) + if this.hasInitialization() + then result = this.getInitialization().getFirstInstruction(kind) + else result = this.getFirstRangeVariableDeclStmtInstruction(kind) } override Instruction getChildSuccessor(TranslatedElement child, EdgeKind kind) { + child = this.getInitialization() and + result = this.getFirstRangeVariableDeclStmtInstruction(kind) + or child = this.getRangeVariableDeclStmt() and result = this.getBeginEndVariableDeclStmt().getFirstInstruction(kind) or @@ -952,6 +1031,10 @@ class TranslatedRangeBasedForStmt extends TranslatedStmt, ConditionContext { ) } + private Instruction getFirstRangeVariableDeclStmtInstruction(EdgeKind kind) { + result = this.getRangeVariableDeclStmt().getFirstInstruction(kind) + } + private TranslatedDeclStmt getBeginEndVariableDeclStmt() { exists(IRVariableDeclarationEntry entry | entry.getStmt() = stmt.getBeginEndDeclaration() and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index bf07e73d5fe..189ffce2903 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -2125,13 +2125,6 @@ class ChiInstruction extends Instruction { */ final Instruction getPartial() { result = this.getPartialOperand().getDef() } - /** - * Gets the bit range `[startBit, endBit)` updated by the partial operand of this `ChiInstruction`, relative to the start address of the total operand. - */ - final predicate getUpdatedInterval(int startBit, int endBit) { - Construction::getIntervalUpdatedByChi(this, startBit, endBit) - } - /** * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. * This means that the `ChiPartialOperand` will not override the entire memory associated with the diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll index 04522e4fe18..209c42726b7 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll @@ -233,20 +233,6 @@ private module Cached { ) } - /** - * Holds if the partial operand of this `ChiInstruction` updates the bit range - * `[startBitOffset, endBitOffset)` of the total operand. - */ - cached - predicate getIntervalUpdatedByChi(ChiInstruction chi, int startBitOffset, int endBitOffset) { - exists(Alias::MemoryLocation location, OldInstruction oldInstruction | - oldInstruction = getOldInstruction(chi.getPartial()) and - location = Alias::getResultMemoryLocation(oldInstruction) and - startBitOffset = Alias::getStartBitOffset(location) and - endBitOffset = Alias::getEndBitOffset(location) - ) - } - /** * Holds if `operand` totally overlaps with its definition and consumes the bit range * `[startBitOffset, endBitOffset)`. diff --git a/cpp/ql/lib/semmle/code/cpp/models/Models.qll b/cpp/ql/lib/semmle/code/cpp/models/Models.qll index 6c3914ab92d..32377dbd71f 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/Models.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/Models.qll @@ -3,6 +3,7 @@ private import implementations.Deallocation private import implementations.Fread private import implementations.Getenv private import implementations.Gets +private import implementations.GetText private import implementations.IdentityFunction private import implementations.Inet private import implementations.Iterator diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/GetText.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/GetText.qll new file mode 100644 index 00000000000..fcaacc16344 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/GetText.qll @@ -0,0 +1,33 @@ +import semmle.code.cpp.models.interfaces.DataFlow + +/** + * Returns the transated text index for a given gettext function `f` + */ +private int getTextArg(Function f) { + // basic variations of gettext + f.hasGlobalOrStdName("gettext") and result = 0 + or + f.hasGlobalOrStdName("dgettext") and result = 1 + or + f.hasGlobalOrStdName("dcgettext") and result = 1 + or + // plural variations of gettext that take one format string for singular and another for plural form + f.hasGlobalOrStdName("ngettext") and + (result = 0 or result = 1) + or + f.hasGlobalOrStdName("dngettext") and + (result = 1 or result = 2) + or + f.hasGlobalOrStdName("dcngettext") and + (result = 1 or result = 2) +} + +class GetTextFunction extends DataFlowFunction { + int argInd; + + GetTextFunction() { argInd = getTextArg(this) } + + override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { + input.isParameterDeref(argInd) and output.isReturnValueDeref() + } +} diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll index a540c0a88b6..965ac8daf3b 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll @@ -22,11 +22,28 @@ private class MemsetFunctionModel extends ArrayFunction, DataFlowFunction, Alias ]) } + /** + * Gets the index of the parameter that specifies the fill character to insert, if any. + */ + private int getFillCharParameterIndex() { + ( + this.hasGlobalOrStdOrBslName("memset") + or + this.hasGlobalOrStdName("wmemset") + or + this.hasGlobalName(["__builtin_memset", "__builtin_memset_chk"]) + ) and + result = 1 + } + override predicate hasArrayOutput(int bufParam) { bufParam = 0 } override predicate hasDataFlow(FunctionInput input, FunctionOutput output) { input.isParameter(0) and output.isReturnValue() + or + input.isParameter(this.getFillCharParameterIndex()) and + (output.isParameterDeref(0) or output.isReturnValueDeref()) } override predicate hasArrayWithVariableSize(int bufParam, int countParam) { diff --git a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll index 13046d79a7a..b161da47620 100644 --- a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll @@ -892,6 +892,26 @@ class DoStmt extends Loop, @stmt_end_test_while { class RangeBasedForStmt extends Loop, @stmt_range_based_for { override string getAPrimaryQlClass() { result = "RangeBasedForStmt" } + /** + * Gets the initialization statement of this 'for' statement, if any. + * + * For example, for + * ``` + * for (int x = y; auto z : ... ) { } + * ``` + * the result is `int x = y;`. + * + * Does not hold if the initialization statement is missing or an empty statement, as in + * ``` + * for (auto z : ...) { } + * ``` + * or + * ``` + * for (; auto z : ) { } + * ``` + */ + Stmt getInitialization() { for_initialization(underlyingElement(this), unresolveElement(result)) } + /** * Gets the 'body' statement of this range-based 'for' statement. * @@ -901,7 +921,7 @@ class RangeBasedForStmt extends Loop, @stmt_range_based_for { * ``` * the result is the `BlockStmt` `{ y += x; }`. */ - override Stmt getStmt() { result = this.getChild(5) } + override Stmt getStmt() { result = this.getChild(6) } override string toString() { result = "for(...:...) ..." } @@ -914,7 +934,7 @@ class RangeBasedForStmt extends Loop, @stmt_range_based_for { * ``` * the result is `int x`. */ - LocalVariable getVariable() { result = this.getChild(4).(DeclStmt).getADeclaration() } + LocalVariable getVariable() { result = this.getChild(5).(DeclStmt).getADeclaration() } /** * Gets the expression giving the range to iterate over. @@ -928,7 +948,7 @@ class RangeBasedForStmt extends Loop, @stmt_range_based_for { Expr getRange() { result = this.getRangeVariable().getInitializer().getExpr() } /** Gets the compiler-generated `__range` variable after desugaring. */ - LocalVariable getRangeVariable() { result = this.getChild(0).(DeclStmt).getADeclaration() } + LocalVariable getRangeVariable() { result = this.getChild(1).(DeclStmt).getADeclaration() } /** * Gets the compiler-generated `__begin != __end` which is the @@ -936,7 +956,7 @@ class RangeBasedForStmt extends Loop, @stmt_range_based_for { * It will be either an `NEExpr` or a call to a user-defined * `operator!=`. */ - override Expr getCondition() { result = this.getChild(2) } + override Expr getCondition() { result = this.getChild(3) } override Expr getControllingExpr() { result = this.getCondition() } @@ -945,7 +965,7 @@ class RangeBasedForStmt extends Loop, @stmt_range_based_for { * `__end`, initializing them to the values they have before entering the * desugared loop. */ - DeclStmt getBeginEndDeclaration() { result = this.getChild(1) } + DeclStmt getBeginEndDeclaration() { result = this.getChild(2) } /** Gets the compiler-generated `__begin` variable after desugaring. */ LocalVariable getBeginVariable() { result = this.getBeginEndDeclaration().getDeclaration(0) } @@ -959,7 +979,7 @@ class RangeBasedForStmt extends Loop, @stmt_range_based_for { * be either a `PrefixIncrExpr` or a call to a user-defined * `operator++`. */ - Expr getUpdate() { result = this.getChild(3) } + Expr getUpdate() { result = this.getChild(4) } /** Gets the compiler-generated `__begin` variable after desugaring. */ LocalVariable getAnIterationVariable() { result = this.getBeginVariable() } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 4f9fabab512..298438feb14 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -2050,8 +2050,11 @@ switch_body( int body_id: @stmt ref ); +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + for_initialization( - unique int for_stmt: @stmt_for ref, + unique int for_stmt: @stmt_for_or_range_based_for ref, int init_id: @stmt ref ); diff --git a/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/exprparents.ql b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/exprparents.ql new file mode 100644 index 00000000000..eb72780d7b2 --- /dev/null +++ b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/exprparents.ql @@ -0,0 +1,19 @@ +class Element extends @element { + string toString() { none() } +} + +class Expr extends @expr { + string toString() { none() } +} + +class Stmt extends @stmt { + string toString() { none() } +} + +predicate isStmtWithInitializer(Stmt stmt) { exists(int kind | stmts(stmt, kind, _) | kind = 29) } + +from Expr child, int index, int index_new, Element parent +where + exprparents(child, index, parent) and + if isStmtWithInitializer(parent) then index_new = index + 1 else index_new = index +select child, index_new, parent diff --git a/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/old.dbscheme b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/old.dbscheme new file mode 100644 index 00000000000..4f9fabab512 --- /dev/null +++ b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/old.dbscheme @@ -0,0 +1,2241 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +for_initialization( + unique int for_stmt: @stmt_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..298438feb14 --- /dev/null +++ b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/semmlecode.cpp.dbscheme @@ -0,0 +1,2244 @@ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/** + * Information about packages that provide code used during compilation. + * The `id` is just a unique identifier. + * The `namespace` is typically the name of the package manager that + * provided the package (e.g. "dpkg" or "yum"). + * The `package_name` is the name of the package, and `version` is its + * version (as a string). + */ +external_packages( + unique int id: @external_package, + string namespace : string ref, + string package_name : string ref, + string version : string ref +); + +/** + * Holds if File `fileid` was provided by package `package`. + */ +header_to_external_package( + int fileid : @file ref, + int package : @external_package ref +); + +/* + * Version history + */ + +svnentries( + unique int id : @svnentry, + string revision : string ref, + string author : string ref, + date revisionDate : date ref, + int changeSize : int ref +) + +svnaffectedfiles( + int id : @svnentry ref, + int file : @file ref, + string action : string ref +) + +svnentrymsg( + unique int id : @svnentry ref, + string message : string ref +) + +svnchurn( + int commit : @svnentry ref, + int file : @file ref, + int addedLines : int ref, + int deletedLines : int ref +) + +/* + * C++ dbscheme + */ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +@location = @location_stmt | @location_expr | @location_default ; + +/** + * The location of an element that is not an expression or a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + /** The location of an element that is not an expression or a statement. */ + unique int id: @location_default, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of a statement. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_stmt( + /** The location of a statement. */ + unique int id: @location_stmt, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** + * The location of an expression. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_expr( + /** The location of an expression. */ + unique int id: @location_expr, + int container: @container ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +/* +case @function.kind of + 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +| 6 = @builtin_function // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; +*/ + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref, + int handle: @variable ref, + int promise: @variable ref +); + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @functionorblock ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator. For example: + * ``` + * int a; + * decltype(1+a) b; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * would change the semantics of this decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +/* +case @usertype.kind of + 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +| 5 = @typedef // classic C: typedef typedef type name +| 6 = @template +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +| 14 = @using_alias // a using name = type style typedef +; +*/ + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +is_proxy_class_for( + unique int id: @usertype ref, + unique int templ_param_id: @usertype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +/* + Fixed point types + precision(1) = short, precision(2) = default, precision(3) = long + is_unsigned(1) = unsigned is_unsigned(2) = signed + is_fract_type(1) = declared with _Fract + saturating(1) = declared with _Sat +*/ +/* TODO +fixedpointtypes( + unique int id: @fixedpointtype, + int precision: int ref, + int is_unsigned: int ref, + int is_fract_type: int ref, + int saturating: int ref); +*/ + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + /* TODO | @fixedpointtype */ + | @routinetype + | @ptrtomember + | @decltype; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 3 = size_and_alignment + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_expr ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_expr ref +); + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + ; + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof; + +sizeof_bind( + unique int expr: @runtime_sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_stmt ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@functionorblock = @function | @stmt_block; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @functionorblock ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/* XML Files */ + +xmlEncoding(unique int id: @file ref, string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/stmtparents.ql b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/stmtparents.ql new file mode 100644 index 00000000000..e69ab3f6679 --- /dev/null +++ b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/stmtparents.ql @@ -0,0 +1,15 @@ +class Element extends @element { + string toString() { none() } +} + +class Stmt extends @stmt { + string toString() { none() } +} + +predicate isStmtWithInitializer(Stmt stmt) { exists(int kind | stmts(stmt, kind, _) | kind = 29) } + +from Stmt child, int index, int index_new, Element parent +where + stmtparents(child, index, parent) and + if isStmtWithInitializer(parent) then index_new = index + 1 else index_new = index +select child, index_new, parent diff --git a/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/upgrade.properties b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/upgrade.properties new file mode 100644 index 00000000000..9eb5a30ee50 --- /dev/null +++ b/cpp/ql/lib/upgrades/4f9fabab5124d49108782c081579f45a70571d74/upgrade.properties @@ -0,0 +1,4 @@ +description: Support C++20 range-based for initializers +compatibility: partial +exprparents.rel: run exprparents.qlo +stmtparents.rel: run stmtparents.qlo diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 68bcdbc5b07..ffcd73ff5d7 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.9.5 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been updated to produce fewer false positives. +* Added dataflow models for the `gettext` function variants. + ## 0.9.4 ### Minor Analysis Improvements @@ -6,7 +13,6 @@ * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. * The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` * The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. ## 0.9.3 diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 830859b18ff..2a50e7ae358 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -1,9 +1,13 @@ /** * @name Non-constant format string - * @description Passing a non-constant 'format' string to a printf-like function can lead + * @description Passing a value that is not a string literal 'format' string to a printf-like function can lead * to a mismatch between the number of arguments defined by the 'format' and the number * of arguments actually passed to the function. If the format string ultimately stems * from an untrusted source, this can be used for exploits. + * This query finds format strings coming from non-literal sources. Note that format strings of + * type `const char*` it is still considered non-constant if the value is not coming from a string + * literal. For example, for a parameter with type `const char*` of an exported function that is + * used as a format string, there is no way to ensure the originating value was a string literal. * @kind problem * @problem.severity recommendation * @security-severity 9.3 @@ -17,142 +21,117 @@ import semmle.code.cpp.ir.dataflow.TaintTracking import semmle.code.cpp.commons.Printf +import semmle.code.cpp.security.FlowSources +import semmle.code.cpp.ir.dataflow.internal.ModelUtil +import semmle.code.cpp.models.interfaces.DataFlow +import semmle.code.cpp.models.interfaces.Taint +import semmle.code.cpp.ir.IR -// For the following `...gettext` functions, we assume that -// all translations preserve the type and order of `%` specifiers -// (and hence are safe to use as format strings). This -// assumption is hard-coded into the query. -predicate whitelistFunction(Function f, int arg) { - // basic variations of gettext - f.getName() = "_" and arg = 0 - or - f.getName() = "gettext" and arg = 0 - or - f.getName() = "dgettext" and arg = 1 - or - f.getName() = "dcgettext" and arg = 1 - or - // plural variations of gettext that take one format string for singular and another for plural form - f.getName() = "ngettext" and - (arg = 0 or arg = 1) - or - f.getName() = "dngettext" and - (arg = 1 or arg = 2) - or - f.getName() = "dcngettext" and - (arg = 1 or arg = 2) +class UncalledFunction extends Function { + UncalledFunction() { + not exists(Call c | c.getTarget() = this) and + // Ignore functions that appear to be function pointers + // function pointers may be seen as uncalled statically + not exists(FunctionAccess fa | fa.getTarget() = this) + } } -// we assume that ALL uses of the `_` macro -// return constant string literals -predicate underscoreMacro(Expr e) { - exists(MacroInvocation mi | - mi.getMacroName() = "_" and - mi.getExpr() = e +/** + * Holds if `node` is a non-constant source of data flow for non-const format string detection. + * This is defined as either: + * 1) a `FlowSource` + * 2) a parameter of an 'uncalled' function + * 3) an argument to a function with no definition that is not known to define the output through its input + * 4) an out arg of a function with no definition that is not known to define the output through its input + * + * The latter two cases address identifying standard string manipulation libraries as input sources + * e.g., strcpy. More simply, functions without definitions that are known to manipulate the + * input to produce an output are not sources. Instead the ultimate source of input to these functions + * should be considered as the source. + * + * False Negative Implication: This approach has false negatives (fails to identify non-const sources) + * when the source is a field of a struct or object and the initialization is not observed statically. + * There are 3 general cases where this can occur: + * 1) Parameters of uncalled functions that are structs/objects and a field is accessed for a format string. + * 2) A local variable that is a struct/object and initialization of the field occurs in code that is unseen statically. + * e.g., an object constructor isn't known statically, or a function sets fields + * of a struct, but the function is not known statically. + * 3) A function meeting cases (3) and (4) above returns (through an out argument or return value) + * a struct or object where a field containing a format string has been initialized. + * + * Note, uninitialized variables used as format strings are never detected by design. + * Uninitialized variables are a separate vulnerability concern and should be addressed by a separate query. + */ +predicate isNonConst(DataFlow::Node node) { + node instanceof FlowSource + or + // Parameters of uncalled functions that aren't const + exists(UncalledFunction f, Parameter p | + f.getAParameter() = p and + p = node.asParameter() + ) + or + // Consider as an input any out arg of a function or a function's return where the function is not: + // 1. a function with a known dataflow or taintflow from input to output and the `node` is the output + // 2. a function where there is a known definition + // i.e., functions that with unknown bodies and are not known to define the output through its input + // are considered as possible non-const sources + // The function's output must also not be const to be considered a non-const source + exists(Function func, CallInstruction call | + // NOTE: could use `Call` getAnArgument() instead of `CallInstruction` but requires two + // variables representing the same call in ordoer to use `callOutput` below. + exists(Expr arg | + call.getPositionalArgumentOperand(_).getDef().getUnconvertedResultExpression() = arg and + arg = node.asDefiningArgument() + ) + or + call.getUnconvertedResultExpression() = node.asIndirectExpr() + | + func = call.getStaticCallTarget() and + not exists(FunctionOutput output | + // NOTE: we must include dataflow and taintflow. e.g., including only dataflow we will find sprintf + // variant function's output are now possible non-const sources + pragma[only_bind_out](func).(DataFlowFunction).hasDataFlow(_, output) or + pragma[only_bind_out](func).(TaintFunction).hasTaintFlow(_, output) + | + node = callOutput(call, output) + ) + ) and + not exists(Call c | + c.getTarget().hasDefinition() and + if node instanceof DataFlow::DefinitionByReferenceNode + then c.getAnArgument() = node.asDefiningArgument() + else c = [node.asExpr(), node.asIndirectExpr()] ) } /** - * Holds if `t` cannot hold a character array, directly or indirectly. + * Holds if `sink` is a sink is a format string of any + * `FormattingFunctionCall`. */ -predicate cannotContainString(Type t, boolean isIndirect) { - isIndirect = false and - exists(Type unspecified | - unspecified = t.getUnspecifiedType() and - not unspecified instanceof UnknownType - | - unspecified instanceof BuiltInType or - unspecified instanceof IntegralOrEnumType - ) -} - -predicate isNonConst(DataFlow::Node node, boolean isIndirect) { - exists(Expr e | - e = node.asExpr() and isIndirect = false - or - e = node.asIndirectExpr() and isIndirect = true - | - exists(FunctionCall fc | fc = e | - not ( - whitelistFunction(fc.getTarget(), _) or - fc.getTarget().hasDefinition() - ) - ) - or - exists(Parameter p | p = e.(VariableAccess).getTarget() | - p.getFunction().getName() = "main" and p.getType() instanceof PointerType - ) - or - e instanceof CrementOperation - or - e instanceof AddressOfExpr - or - e instanceof ReferenceToExpr - or - e instanceof AssignPointerAddExpr - or - e instanceof AssignPointerSubExpr - or - e instanceof PointerArithmeticOperation - or - e instanceof FieldAccess - or - e instanceof PointerDereferenceExpr - or - e instanceof AddressOfExpr - or - e instanceof ExprCall - or - e instanceof NewArrayExpr - or - exists(Variable v | v = e.(VariableAccess).getTarget() | - v.getType().(ArrayType).getBaseType() instanceof CharType and - exists(AssignExpr ae | - ae.getLValue().(ArrayExpr).getArrayBase().(VariableAccess).getTarget() = v - ) - ) - ) - or - node instanceof DataFlow::DefinitionByReferenceNode and - isIndirect = true -} - -pragma[noinline] -predicate isBarrierNode(DataFlow::Node node) { - underscoreMacro([node.asExpr(), node.asIndirectExpr()]) - or - exists(node.asExpr()) and - cannotContainString(node.getType(), false) -} - predicate isSinkImpl(DataFlow::Node sink, Expr formatString) { [sink.asExpr(), sink.asIndirectExpr()] = formatString and exists(FormattingFunctionCall fc | formatString = fc.getArgument(fc.getFormatParameterIndex())) } module NonConstFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(boolean isIndirect, Type t | - isNonConst(source, isIndirect) and - t = source.getType() and - not cannotContainString(t, isIndirect) - ) - } + predicate isSource(DataFlow::Node source) { isNonConst(source) } predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) } - predicate isBarrier(DataFlow::Node node) { isBarrierNode(node) } + predicate isBarrier(DataFlow::Node node) { + // Ignore tracing non-const through array indices + exists(ArrayExpr a | a.getArrayOffset() = node.asExpr()) + } } module NonConstFlow = TaintTracking::Global; -from FormattingFunctionCall call, Expr formatString +from FormattingFunctionCall call, Expr formatString, DataFlow::Node sink where call.getArgument(call.getFormatParameterIndex()) = formatString and - exists(DataFlow::Node sink | - NonConstFlow::flowTo(sink) and - isSinkImpl(sink, formatString) - ) + NonConstFlow::flowTo(sink) and + isSinkImpl(sink, formatString) select formatString, "The format string argument to " + call.getTarget().getName() + " should be constant to prevent security issues and other potential errors." diff --git a/cpp/ql/src/change-notes/released/0.9.4.md b/cpp/ql/src/change-notes/released/0.9.4.md index 6525a90f9bb..bc6e71d7054 100644 --- a/cpp/ql/src/change-notes/released/0.9.4.md +++ b/cpp/ql/src/change-notes/released/0.9.4.md @@ -6,5 +6,4 @@ * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. * The "Incorrect return-value check for a 'scanf'-like function" query (`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. * The "Potentially uninitialized local variable" query (`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. -* ``` * The diagnostic query `cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. diff --git a/cpp/ql/src/change-notes/released/0.9.5.md b/cpp/ql/src/change-notes/released/0.9.5.md new file mode 100644 index 00000000000..6a961750d93 --- /dev/null +++ b/cpp/ql/src/change-notes/released/0.9.5.md @@ -0,0 +1,6 @@ +## 0.9.5 + +### Minor Analysis Improvements + +* The "non-constant format string" query (`cpp/non-constant-format`) has been updated to produce fewer false positives. +* Added dataflow models for the `gettext` function variants. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 694907ca221..460240feaff 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.9.4 +lastReleaseVersion: 0.9.5 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 0da41987b3e..371648a28fd 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.9.4 +version: 0.9.5 groups: - cpp - queries diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected index 20bab064242..f35b2230f15 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-078/WordexpTainted.expected @@ -1,5 +1,5 @@ edges -| test.cpp:22:27:22:30 | **argv | test.cpp:29:13:29:20 | *filePath | +| test.cpp:22:27:22:30 | **argv | test.cpp:29:13:29:20 | *filePath | provenance | | nodes | test.cpp:22:27:22:30 | **argv | semmle.label | **argv | | test.cpp:29:13:29:20 | *filePath | semmle.label | *filePath | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected index fe7246092b6..94d399f6195 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-190/AllocMultiplicationOverflow/AllocMultiplicationOverflow.expected @@ -1,7 +1,7 @@ edges -| test.cpp:22:17:22:21 | ... * ... | test.cpp:23:33:23:37 | size1 | -| test.cpp:37:24:37:27 | size | test.cpp:37:46:37:49 | size | -| test.cpp:45:36:45:40 | ... * ... | test.cpp:37:24:37:27 | size | +| test.cpp:22:17:22:21 | ... * ... | test.cpp:23:33:23:37 | size1 | provenance | | +| test.cpp:37:24:37:27 | size | test.cpp:37:46:37:49 | size | provenance | | +| test.cpp:45:36:45:40 | ... * ... | test.cpp:37:24:37:27 | size | provenance | | nodes | test.cpp:13:33:13:37 | ... * ... | semmle.label | ... * ... | | test.cpp:15:31:15:35 | ... * ... | semmle.label | ... * ... | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected index eab5aabce63..bb062dac218 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/array-access/ArrayAccessProductFlow.expected @@ -1,43 +1,43 @@ edges -| test.cpp:4:17:4:22 | call to malloc | test.cpp:6:9:6:11 | arr | -| test.cpp:4:17:4:22 | call to malloc | test.cpp:10:9:10:11 | arr | -| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:28:19:28:26 | call to mk_array [p] | -| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:50:18:50:25 | call to mk_array [p] | -| test.cpp:21:5:21:7 | *arr [post update] [p] | test.cpp:22:5:22:7 | *arr [p] | -| test.cpp:21:5:21:24 | ... = ... | test.cpp:21:5:21:7 | *arr [post update] [p] | -| test.cpp:21:13:21:18 | call to malloc | test.cpp:21:5:21:24 | ... = ... | -| test.cpp:22:5:22:7 | *arr [p] | test.cpp:19:9:19:16 | *mk_array [p] | -| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:31:9:31:11 | *arr [p] | -| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:35:9:35:11 | *arr [p] | -| test.cpp:31:9:31:11 | *arr [p] | test.cpp:31:13:31:13 | p | -| test.cpp:35:9:35:11 | *arr [p] | test.cpp:35:13:35:13 | p | -| test.cpp:39:27:39:29 | arr [p] | test.cpp:41:9:41:11 | *arr [p] | -| test.cpp:39:27:39:29 | arr [p] | test.cpp:45:9:45:11 | *arr [p] | -| test.cpp:41:9:41:11 | *arr [p] | test.cpp:41:13:41:13 | p | -| test.cpp:45:9:45:11 | *arr [p] | test.cpp:45:13:45:13 | p | -| test.cpp:50:18:50:25 | call to mk_array [p] | test.cpp:39:27:39:29 | arr [p] | -| test.cpp:55:5:55:7 | *arr [post update] [p] | test.cpp:56:5:56:7 | *arr [p] | -| test.cpp:55:5:55:24 | ... = ... | test.cpp:55:5:55:7 | *arr [post update] [p] | -| test.cpp:55:13:55:18 | call to malloc | test.cpp:55:5:55:24 | ... = ... | -| test.cpp:56:5:56:7 | *arr [p] | test.cpp:59:9:59:11 | *arr [p] | -| test.cpp:56:5:56:7 | *arr [p] | test.cpp:63:9:63:11 | *arr [p] | -| test.cpp:59:9:59:11 | *arr [p] | test.cpp:59:13:59:13 | p | -| test.cpp:63:9:63:11 | *arr [p] | test.cpp:63:13:63:13 | p | -| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:76:20:76:29 | *call to mk_array_p [p] | -| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:98:18:98:27 | *call to mk_array_p [p] | -| test.cpp:69:5:69:7 | *arr [post update] [p] | test.cpp:70:5:70:7 | *arr [p] | -| test.cpp:69:5:69:25 | ... = ... | test.cpp:69:5:69:7 | *arr [post update] [p] | -| test.cpp:69:14:69:19 | call to malloc | test.cpp:69:5:69:25 | ... = ... | -| test.cpp:70:5:70:7 | *arr [p] | test.cpp:67:10:67:19 | **mk_array_p [p] | -| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:79:9:79:11 | *arr [p] | -| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:83:9:83:11 | *arr [p] | -| test.cpp:79:9:79:11 | *arr [p] | test.cpp:79:14:79:14 | p | -| test.cpp:83:9:83:11 | *arr [p] | test.cpp:83:14:83:14 | p | -| test.cpp:87:28:87:30 | *arr [p] | test.cpp:89:9:89:11 | *arr [p] | -| test.cpp:87:28:87:30 | *arr [p] | test.cpp:93:9:93:11 | *arr [p] | -| test.cpp:89:9:89:11 | *arr [p] | test.cpp:89:14:89:14 | p | -| test.cpp:93:9:93:11 | *arr [p] | test.cpp:93:14:93:14 | p | -| test.cpp:98:18:98:27 | *call to mk_array_p [p] | test.cpp:87:28:87:30 | *arr [p] | +| test.cpp:4:17:4:22 | call to malloc | test.cpp:6:9:6:11 | arr | provenance | | +| test.cpp:4:17:4:22 | call to malloc | test.cpp:10:9:10:11 | arr | provenance | | +| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:28:19:28:26 | call to mk_array [p] | provenance | | +| test.cpp:19:9:19:16 | *mk_array [p] | test.cpp:50:18:50:25 | call to mk_array [p] | provenance | | +| test.cpp:21:5:21:7 | *arr [post update] [p] | test.cpp:22:5:22:7 | *arr [p] | provenance | | +| test.cpp:21:5:21:24 | ... = ... | test.cpp:21:5:21:7 | *arr [post update] [p] | provenance | | +| test.cpp:21:13:21:18 | call to malloc | test.cpp:21:5:21:24 | ... = ... | provenance | | +| test.cpp:22:5:22:7 | *arr [p] | test.cpp:19:9:19:16 | *mk_array [p] | provenance | | +| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:31:9:31:11 | *arr [p] | provenance | | +| test.cpp:28:19:28:26 | call to mk_array [p] | test.cpp:35:9:35:11 | *arr [p] | provenance | | +| test.cpp:31:9:31:11 | *arr [p] | test.cpp:31:13:31:13 | p | provenance | | +| test.cpp:35:9:35:11 | *arr [p] | test.cpp:35:13:35:13 | p | provenance | | +| test.cpp:39:27:39:29 | arr [p] | test.cpp:41:9:41:11 | *arr [p] | provenance | | +| test.cpp:39:27:39:29 | arr [p] | test.cpp:45:9:45:11 | *arr [p] | provenance | | +| test.cpp:41:9:41:11 | *arr [p] | test.cpp:41:13:41:13 | p | provenance | | +| test.cpp:45:9:45:11 | *arr [p] | test.cpp:45:13:45:13 | p | provenance | | +| test.cpp:50:18:50:25 | call to mk_array [p] | test.cpp:39:27:39:29 | arr [p] | provenance | | +| test.cpp:55:5:55:7 | *arr [post update] [p] | test.cpp:56:5:56:7 | *arr [p] | provenance | | +| test.cpp:55:5:55:24 | ... = ... | test.cpp:55:5:55:7 | *arr [post update] [p] | provenance | | +| test.cpp:55:13:55:18 | call to malloc | test.cpp:55:5:55:24 | ... = ... | provenance | | +| test.cpp:56:5:56:7 | *arr [p] | test.cpp:59:9:59:11 | *arr [p] | provenance | | +| test.cpp:56:5:56:7 | *arr [p] | test.cpp:63:9:63:11 | *arr [p] | provenance | | +| test.cpp:59:9:59:11 | *arr [p] | test.cpp:59:13:59:13 | p | provenance | | +| test.cpp:63:9:63:11 | *arr [p] | test.cpp:63:13:63:13 | p | provenance | | +| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:76:20:76:29 | *call to mk_array_p [p] | provenance | | +| test.cpp:67:10:67:19 | **mk_array_p [p] | test.cpp:98:18:98:27 | *call to mk_array_p [p] | provenance | | +| test.cpp:69:5:69:7 | *arr [post update] [p] | test.cpp:70:5:70:7 | *arr [p] | provenance | | +| test.cpp:69:5:69:25 | ... = ... | test.cpp:69:5:69:7 | *arr [post update] [p] | provenance | | +| test.cpp:69:14:69:19 | call to malloc | test.cpp:69:5:69:25 | ... = ... | provenance | | +| test.cpp:70:5:70:7 | *arr [p] | test.cpp:67:10:67:19 | **mk_array_p [p] | provenance | | +| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:79:9:79:11 | *arr [p] | provenance | | +| test.cpp:76:20:76:29 | *call to mk_array_p [p] | test.cpp:83:9:83:11 | *arr [p] | provenance | | +| test.cpp:79:9:79:11 | *arr [p] | test.cpp:79:14:79:14 | p | provenance | | +| test.cpp:83:9:83:11 | *arr [p] | test.cpp:83:14:83:14 | p | provenance | | +| test.cpp:87:28:87:30 | *arr [p] | test.cpp:89:9:89:11 | *arr [p] | provenance | | +| test.cpp:87:28:87:30 | *arr [p] | test.cpp:93:9:93:11 | *arr [p] | provenance | | +| test.cpp:89:9:89:11 | *arr [p] | test.cpp:89:14:89:14 | p | provenance | | +| test.cpp:93:9:93:11 | *arr [p] | test.cpp:93:14:93:14 | p | provenance | | +| test.cpp:98:18:98:27 | *call to mk_array_p [p] | test.cpp:87:28:87:30 | *arr [p] | provenance | | nodes | test.cpp:4:17:4:22 | call to malloc | semmle.label | call to malloc | | test.cpp:6:9:6:11 | arr | semmle.label | arr | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected index 07fbd84e4af..fee771d8f70 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected @@ -1,74 +1,74 @@ edges -| test.cpp:34:10:34:12 | buf | test.cpp:34:5:34:24 | access to array | -| test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | -| test.cpp:36:10:36:12 | buf | test.cpp:36:5:36:24 | access to array | -| test.cpp:39:14:39:16 | buf | test.cpp:39:9:39:19 | access to array | -| test.cpp:43:14:43:16 | buf | test.cpp:43:9:43:19 | access to array | -| test.cpp:48:10:48:12 | buf | test.cpp:48:5:48:24 | access to array | -| test.cpp:49:10:49:12 | buf | test.cpp:49:5:49:22 | access to array | -| test.cpp:50:10:50:12 | buf | test.cpp:50:5:50:24 | access to array | -| test.cpp:53:14:53:16 | buf | test.cpp:53:9:53:19 | access to array | -| test.cpp:57:14:57:16 | buf | test.cpp:57:9:57:19 | access to array | -| test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | -| test.cpp:70:33:70:33 | p | test.cpp:71:5:71:17 | access to array | -| test.cpp:70:33:70:33 | p | test.cpp:72:5:72:15 | access to array | -| test.cpp:76:26:76:46 | & ... | test.cpp:66:32:66:32 | p | -| test.cpp:76:32:76:34 | buf | test.cpp:76:26:76:46 | & ... | -| test.cpp:77:26:77:44 | & ... | test.cpp:66:32:66:32 | p | -| test.cpp:77:32:77:34 | buf | test.cpp:77:26:77:44 | & ... | -| test.cpp:79:27:79:34 | buf | test.cpp:70:33:70:33 | p | -| test.cpp:79:32:79:34 | buf | test.cpp:79:27:79:34 | buf | -| test.cpp:85:34:85:36 | buf | test.cpp:87:5:87:31 | access to array | -| test.cpp:85:34:85:36 | buf | test.cpp:88:5:88:27 | access to array | -| test.cpp:96:13:96:15 | arr | test.cpp:96:13:96:18 | access to array | -| test.cpp:111:17:111:19 | arr | test.cpp:111:17:111:22 | access to array | -| test.cpp:111:17:111:19 | arr | test.cpp:115:35:115:40 | access to array | -| test.cpp:111:17:111:19 | arr | test.cpp:119:17:119:22 | access to array | -| test.cpp:115:35:115:37 | arr | test.cpp:111:17:111:22 | access to array | -| test.cpp:115:35:115:37 | arr | test.cpp:115:35:115:40 | access to array | -| test.cpp:115:35:115:37 | arr | test.cpp:119:17:119:22 | access to array | -| test.cpp:119:17:119:19 | arr | test.cpp:111:17:111:22 | access to array | -| test.cpp:119:17:119:19 | arr | test.cpp:115:35:115:40 | access to array | -| test.cpp:119:17:119:19 | arr | test.cpp:119:17:119:22 | access to array | -| test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | -| test.cpp:134:25:134:27 | arr | test.cpp:136:9:136:16 | ... += ... | -| test.cpp:136:9:136:16 | ... += ... | test.cpp:138:13:138:15 | arr | -| test.cpp:143:18:143:21 | asdf | test.cpp:134:25:134:27 | arr | -| test.cpp:143:18:143:21 | asdf | test.cpp:143:18:143:21 | asdf | -| test.cpp:146:26:146:26 | *p | test.cpp:147:4:147:9 | -- ... | -| test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | -| test.cpp:156:12:156:18 | ... + ... | test.cpp:158:17:158:18 | *& ... | -| test.cpp:158:17:158:18 | *& ... | test.cpp:146:26:146:26 | *p | -| test.cpp:218:23:218:28 | buffer | test.cpp:220:5:220:11 | access to array | -| test.cpp:218:23:218:28 | buffer | test.cpp:221:5:221:11 | access to array | -| test.cpp:229:25:229:29 | array | test.cpp:231:5:231:10 | access to array | -| test.cpp:229:25:229:29 | array | test.cpp:232:5:232:10 | access to array | -| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | -| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | -| test.cpp:274:14:274:20 | buffer3 | test.cpp:245:30:245:30 | p | -| test.cpp:274:14:274:20 | buffer3 | test.cpp:274:14:274:20 | buffer3 | -| test.cpp:277:35:277:35 | p | test.cpp:278:14:278:14 | p | -| test.cpp:278:14:278:14 | p | test.cpp:245:30:245:30 | p | -| test.cpp:283:19:283:25 | buffer1 | test.cpp:277:35:277:35 | p | -| test.cpp:283:19:283:25 | buffer1 | test.cpp:283:19:283:25 | buffer1 | -| test.cpp:286:19:286:25 | buffer2 | test.cpp:277:35:277:35 | p | -| test.cpp:286:19:286:25 | buffer2 | test.cpp:286:19:286:25 | buffer2 | -| test.cpp:289:19:289:25 | buffer3 | test.cpp:277:35:277:35 | p | -| test.cpp:289:19:289:25 | buffer3 | test.cpp:289:19:289:25 | buffer3 | -| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | -| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | -| test.cpp:306:20:306:23 | arr1 | test.cpp:292:25:292:27 | arr | -| test.cpp:306:20:306:23 | arr1 | test.cpp:306:20:306:23 | arr1 | -| test.cpp:309:20:309:23 | arr2 | test.cpp:292:25:292:27 | arr | -| test.cpp:309:20:309:23 | arr2 | test.cpp:309:20:309:23 | arr2 | -| test.cpp:319:19:319:22 | temp | test.cpp:319:19:319:27 | ... + ... | -| test.cpp:319:19:319:22 | temp | test.cpp:324:23:324:32 | ... + ... | -| test.cpp:319:19:319:27 | ... + ... | test.cpp:325:24:325:26 | end | -| test.cpp:322:19:322:22 | temp | test.cpp:322:19:322:27 | ... + ... | -| test.cpp:322:19:322:22 | temp | test.cpp:324:23:324:32 | ... + ... | -| test.cpp:322:19:322:27 | ... + ... | test.cpp:325:24:325:26 | end | -| test.cpp:324:23:324:26 | temp | test.cpp:324:23:324:32 | ... + ... | -| test.cpp:324:23:324:32 | ... + ... | test.cpp:325:15:325:19 | temp2 | +| test.cpp:34:10:34:12 | buf | test.cpp:34:5:34:24 | access to array | provenance | | +| test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | provenance | | +| test.cpp:36:10:36:12 | buf | test.cpp:36:5:36:24 | access to array | provenance | | +| test.cpp:39:14:39:16 | buf | test.cpp:39:9:39:19 | access to array | provenance | | +| test.cpp:43:14:43:16 | buf | test.cpp:43:9:43:19 | access to array | provenance | | +| test.cpp:48:10:48:12 | buf | test.cpp:48:5:48:24 | access to array | provenance | | +| test.cpp:49:10:49:12 | buf | test.cpp:49:5:49:22 | access to array | provenance | | +| test.cpp:50:10:50:12 | buf | test.cpp:50:5:50:24 | access to array | provenance | | +| test.cpp:53:14:53:16 | buf | test.cpp:53:9:53:19 | access to array | provenance | | +| test.cpp:57:14:57:16 | buf | test.cpp:57:9:57:19 | access to array | provenance | | +| test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | provenance | | +| test.cpp:70:33:70:33 | p | test.cpp:71:5:71:17 | access to array | provenance | | +| test.cpp:70:33:70:33 | p | test.cpp:72:5:72:15 | access to array | provenance | | +| test.cpp:76:26:76:46 | & ... | test.cpp:66:32:66:32 | p | provenance | | +| test.cpp:76:32:76:34 | buf | test.cpp:76:26:76:46 | & ... | provenance | | +| test.cpp:77:26:77:44 | & ... | test.cpp:66:32:66:32 | p | provenance | | +| test.cpp:77:32:77:34 | buf | test.cpp:77:26:77:44 | & ... | provenance | | +| test.cpp:79:27:79:34 | buf | test.cpp:70:33:70:33 | p | provenance | | +| test.cpp:79:32:79:34 | buf | test.cpp:79:27:79:34 | buf | provenance | | +| test.cpp:85:34:85:36 | buf | test.cpp:87:5:87:31 | access to array | provenance | | +| test.cpp:85:34:85:36 | buf | test.cpp:88:5:88:27 | access to array | provenance | | +| test.cpp:96:13:96:15 | arr | test.cpp:96:13:96:18 | access to array | provenance | | +| test.cpp:111:17:111:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | | +| test.cpp:111:17:111:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | | +| test.cpp:111:17:111:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | | +| test.cpp:115:35:115:37 | arr | test.cpp:111:17:111:22 | access to array | provenance | | +| test.cpp:115:35:115:37 | arr | test.cpp:115:35:115:40 | access to array | provenance | | +| test.cpp:115:35:115:37 | arr | test.cpp:119:17:119:22 | access to array | provenance | | +| test.cpp:119:17:119:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | | +| test.cpp:119:17:119:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | | +| test.cpp:119:17:119:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | | +| test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | provenance | | +| test.cpp:134:25:134:27 | arr | test.cpp:136:9:136:16 | ... += ... | provenance | | +| test.cpp:136:9:136:16 | ... += ... | test.cpp:138:13:138:15 | arr | provenance | | +| test.cpp:143:18:143:21 | asdf | test.cpp:134:25:134:27 | arr | provenance | | +| test.cpp:143:18:143:21 | asdf | test.cpp:143:18:143:21 | asdf | provenance | | +| test.cpp:146:26:146:26 | *p | test.cpp:147:4:147:9 | -- ... | provenance | | +| test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | provenance | | +| test.cpp:156:12:156:18 | ... + ... | test.cpp:158:17:158:18 | *& ... | provenance | | +| test.cpp:158:17:158:18 | *& ... | test.cpp:146:26:146:26 | *p | provenance | | +| test.cpp:218:23:218:28 | buffer | test.cpp:220:5:220:11 | access to array | provenance | | +| test.cpp:218:23:218:28 | buffer | test.cpp:221:5:221:11 | access to array | provenance | | +| test.cpp:229:25:229:29 | array | test.cpp:231:5:231:10 | access to array | provenance | | +| test.cpp:229:25:229:29 | array | test.cpp:232:5:232:10 | access to array | provenance | | +| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | | +| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | | +| test.cpp:274:14:274:20 | buffer3 | test.cpp:245:30:245:30 | p | provenance | | +| test.cpp:274:14:274:20 | buffer3 | test.cpp:274:14:274:20 | buffer3 | provenance | | +| test.cpp:277:35:277:35 | p | test.cpp:278:14:278:14 | p | provenance | | +| test.cpp:278:14:278:14 | p | test.cpp:245:30:245:30 | p | provenance | | +| test.cpp:283:19:283:25 | buffer1 | test.cpp:277:35:277:35 | p | provenance | | +| test.cpp:283:19:283:25 | buffer1 | test.cpp:283:19:283:25 | buffer1 | provenance | | +| test.cpp:286:19:286:25 | buffer2 | test.cpp:277:35:277:35 | p | provenance | | +| test.cpp:286:19:286:25 | buffer2 | test.cpp:286:19:286:25 | buffer2 | provenance | | +| test.cpp:289:19:289:25 | buffer3 | test.cpp:277:35:277:35 | p | provenance | | +| test.cpp:289:19:289:25 | buffer3 | test.cpp:289:19:289:25 | buffer3 | provenance | | +| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | provenance | | +| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | provenance | | +| test.cpp:306:20:306:23 | arr1 | test.cpp:292:25:292:27 | arr | provenance | | +| test.cpp:306:20:306:23 | arr1 | test.cpp:306:20:306:23 | arr1 | provenance | | +| test.cpp:309:20:309:23 | arr2 | test.cpp:292:25:292:27 | arr | provenance | | +| test.cpp:309:20:309:23 | arr2 | test.cpp:309:20:309:23 | arr2 | provenance | | +| test.cpp:319:19:319:22 | temp | test.cpp:319:19:319:27 | ... + ... | provenance | | +| test.cpp:319:19:319:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | | +| test.cpp:319:19:319:27 | ... + ... | test.cpp:325:24:325:26 | end | provenance | | +| test.cpp:322:19:322:22 | temp | test.cpp:322:19:322:27 | ... + ... | provenance | | +| test.cpp:322:19:322:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | | +| test.cpp:322:19:322:27 | ... + ... | test.cpp:325:24:325:26 | end | provenance | | +| test.cpp:324:23:324:26 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | | +| test.cpp:324:23:324:32 | ... + ... | test.cpp:325:15:325:19 | temp2 | provenance | | nodes | test.cpp:34:5:34:24 | access to array | semmle.label | access to array | | test.cpp:34:10:34:12 | buf | semmle.label | buf | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected index 78f724f788c..ae24fbb77c4 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-359/semmle/tests/PrivateCleartextWrite.expected @@ -1,14 +1,14 @@ edges -| test.cpp:45:18:45:23 | buffer | test.cpp:45:7:45:10 | *func | -| test.cpp:74:24:74:30 | medical | test.cpp:78:24:78:27 | temp | -| test.cpp:74:24:74:30 | medical | test.cpp:81:22:81:28 | medical | -| test.cpp:77:16:77:22 | medical | test.cpp:78:24:78:27 | temp | -| test.cpp:77:16:77:22 | medical | test.cpp:81:22:81:28 | medical | -| test.cpp:81:17:81:20 | call to func | test.cpp:82:24:82:28 | buff5 | -| test.cpp:81:22:81:28 | medical | test.cpp:45:18:45:23 | buffer | -| test.cpp:81:22:81:28 | medical | test.cpp:81:17:81:20 | call to func | -| test.cpp:96:37:96:46 | theZipcode | test.cpp:99:42:99:51 | theZipcode | -| test.cpp:99:61:99:70 | theZipcode | test.cpp:99:42:99:51 | theZipcode | +| test.cpp:45:18:45:23 | buffer | test.cpp:45:7:45:10 | *func | provenance | | +| test.cpp:74:24:74:30 | medical | test.cpp:78:24:78:27 | temp | provenance | | +| test.cpp:74:24:74:30 | medical | test.cpp:81:22:81:28 | medical | provenance | | +| test.cpp:77:16:77:22 | medical | test.cpp:78:24:78:27 | temp | provenance | | +| test.cpp:77:16:77:22 | medical | test.cpp:81:22:81:28 | medical | provenance | | +| test.cpp:81:17:81:20 | call to func | test.cpp:82:24:82:28 | buff5 | provenance | | +| test.cpp:81:22:81:28 | medical | test.cpp:45:18:45:23 | buffer | provenance | | +| test.cpp:81:22:81:28 | medical | test.cpp:81:17:81:20 | call to func | provenance | | +| test.cpp:96:37:96:46 | theZipcode | test.cpp:99:42:99:51 | theZipcode | provenance | | +| test.cpp:99:61:99:70 | theZipcode | test.cpp:99:42:99:51 | theZipcode | provenance | | nodes | test.cpp:45:7:45:10 | *func | semmle.label | *func | | test.cpp:45:18:45:23 | buffer | semmle.label | buffer | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index af91d22d4bf..8b2b371a4e2 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -165,6 +165,7 @@ postWithInFlow | test.cpp:931:5:931:18 | global_pointer [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:5:932:19 | * ... [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:6:932:19 | global_pointer [inner post update] | PostUpdateNode should not be the target of local flow. | +| test.cpp:1045:9:1045:11 | ref arg buf | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected index 93792f406aa..cc0903c1efb 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-ir-consistency.expected @@ -25,6 +25,7 @@ postWithInFlow | test.cpp:391:10:391:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | | test.cpp:400:10:400:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | | test.cpp:407:10:407:13 | memcpy output argument | PostUpdateNode should not be the target of local flow. | +| test.cpp:1045:9:1045:11 | memset output argument | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index 27c7b9b3ddb..2d33f47ba60 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -303,6 +303,13 @@ irFlow | test.cpp:914:46:914:53 | source | test.cpp:919:10:919:30 | global_pointer_static | | test.cpp:915:57:915:76 | *indirect_source(1) | test.cpp:921:19:921:50 | *global_pointer_static_indirect_1 | | test.cpp:932:23:932:28 | call to source | test.cpp:937:10:937:24 | * ... | +| test.cpp:958:18:958:32 | *call to indirect_source | test.cpp:961:19:961:28 | *translated | +| test.cpp:973:18:973:32 | *call to indirect_source | test.cpp:977:19:977:28 | *translated | +| test.cpp:994:18:994:32 | *call to indirect_source | test.cpp:999:19:999:28 | *translated | +| test.cpp:994:18:994:32 | *call to indirect_source | test.cpp:1003:19:1003:28 | *translated | +| test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1027:19:1027:28 | *translated | +| test.cpp:1021:18:1021:32 | *call to indirect_source | test.cpp:1031:19:1031:28 | *translated | +| test.cpp:1045:14:1045:19 | call to source | test.cpp:1046:7:1046:10 | * ... | | true_upon_entry.cpp:9:11:9:16 | call to source | true_upon_entry.cpp:13:8:13:8 | x | | true_upon_entry.cpp:17:11:17:16 | call to source | true_upon_entry.cpp:21:8:21:8 | x | | true_upon_entry.cpp:27:9:27:14 | call to source | true_upon_entry.cpp:29:8:29:8 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp index 0a16f4606cd..e29619a6800 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test.cpp @@ -936,4 +936,112 @@ namespace global_variable_conflation_test { sink(global_pointer); // clean sink(*global_pointer); // $ ir MISSING: ast } +} + +char* gettext(const char*); +char* dgettext(const char*, const char*); +char* ngettext(const char*, const char*, unsigned long int); +char* dngettext (const char*, const char *, const char *, unsigned long int); + +namespace test_gettext { + char* source(); + char* indirect_source(); + + void test_gettext() { + char* data = source(); + char* translated = gettext(data); + sink(translated); // clean + indirect_sink(translated); // clean + } + + void indirect_test_dgettext() { + char* data = indirect_source(); + char* translated = gettext(data); + sink(translated); // clean + indirect_sink(translated); // $ ir MISSING: ast + } + + void test_dgettext() { + char* data = source(); + char* domain = source(); // Should not trace from this source + char* translated = dgettext(domain, data); + sink(translated); // clean + indirect_sink(translated); // clean + } + + void indirect_test_gettext() { + char* data = indirect_source(); + char* domain = indirect_source(); // Should not trace from this source + char* translated = dgettext(domain, data); + sink(translated); // clean + indirect_sink(translated); // $ ir MISSING: ast + } + + void test_ngettext() { + char* data = source(); + char* np = nullptr; // Don't coun't as a source + + char* translated = ngettext(data, np, 0); + sink(translated); // clean + indirect_sink(translated); // clean + + translated = ngettext(np, data, 0); + sink(translated); // clean + indirect_sink(translated); // clean + } + + void indirect_test_ngettext() { + char* data = indirect_source(); + char* np = nullptr; // Don't coun't as a source + + char* translated = ngettext(data, np, 0); + sink(translated); // clean + indirect_sink(translated); // $ ir MISSING: ast + + translated = ngettext(np, data, 0); + sink(translated); // clean + indirect_sink(translated); // $ ir MISSING: ast + } + + void test_dngettext() { + char* data = source(); + char* np = nullptr; // Don't coun't as a source + char* domain = source(); // Should not trace from this source + + char* translated = dngettext(domain, data, np, 0); + sink(translated); // clean + indirect_sink(translated); // clean + + translated = dngettext(domain, np, data, 0); + sink(translated); // clean + indirect_sink(translated); // clean + } + + void indirect_test_dngettext() { + char* data = indirect_source(); + char* np = nullptr; // Don't coun't as a source + char* domain = indirect_source(); // Should not trace from this source + + char* translated = dngettext(domain, data, np, 0); + sink(translated); // clean + indirect_sink(translated); // $ ir MISSING: ast + + translated = dngettext(domain, np, data, 0); + sink(translated); // clean + indirect_sink(translated); // $ ir MISSING: ast + } + + void indirect_test_gettext_no_flow_from_domain() { + char* domain = source(); // Should not trace from this source + char* translated = dgettext(domain, nullptr); + sink(translated); // clean + indirect_sink(translated); // clean + } +} + +void* memset(void*, int, size_t); + +void memset_test(char* buf) { // $ ast-def=buf + memset(buf, source(), 10); + sink(*buf); // $ ir MISSING: ast } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected index c63c723118b..6706d79e902 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.expected @@ -1,3 +1,18 @@ astTypeBugs irTypeBugs +incorrectBaseType +| clang.cpp:22:8:22:20 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| clang.cpp:23:17:23:29 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| flowOut.cpp:50:14:50:15 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| flowOut.cpp:84:9:84:10 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| flowOut.cpp:101:13:101:14 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| self_parameter_flow.cpp:8:8:8:9 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | +| test.cpp:67:28:67:37 | (reference dereference) | Expected 'Node.getType()' to be const int, but it was int * | +| test.cpp:531:39:531:40 | *& ... | Expected 'Node.getType()' to be int, but it was const int * | +| test.cpp:615:13:615:21 | *& ... | Expected 'Node.getType()' to be int, but it was void | +| test.cpp:704:22:704:25 | *& ... | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:715:24:715:25 | *& ... | Expected 'Node.getType()' to be unsigned char, but it was unsigned char * | +| test.cpp:848:23:848:25 | (reference dereference) | Expected 'Node.getType()' to be int, but it was int * | +| test.cpp:854:10:854:36 | * ... | Expected 'Node.getType()' to be const int, but it was int | +| test.cpp:867:10:867:30 | * ... | Expected 'Node.getType()' to be const int, but it was int | failures diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql index 5ff9204f305..b246f392a8d 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/type-bugs.ql @@ -25,6 +25,17 @@ module IrTest { n != 1 ) } + + query predicate incorrectBaseType(Node n, string msg) { + exists(PointerType pointerType, Type nodeType, Type baseType | + not n.isGLValue() and + pointerType = n.asIndirectExpr(1).getActualType() and + baseType = pointerType.getBaseType() and + nodeType = n.getType() and + nodeType != baseType and + msg = "Expected 'Node.getType()' to be " + baseType + ", but it was " + nodeType + ) + } } import IrTest diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected index b000ff9d089..770a70f2a1d 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected @@ -1,753 +1,753 @@ edges -| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | -| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | *this [post update] [c] | -| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | -| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | *this [post update] [c] | -| A.cpp:28:8:28:10 | *this [c] | A.cpp:28:23:28:26 | *this [c] | -| A.cpp:28:23:28:26 | *this [c] | A.cpp:28:29:28:29 | c | -| A.cpp:28:29:28:29 | c | A.cpp:28:8:28:10 | *get | -| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | -| A.cpp:31:14:31:21 | call to B [c] | A.cpp:29:15:29:18 | **make [c] | -| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | -| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | -| A.cpp:41:5:41:6 | insert output argument | A.cpp:43:10:43:12 | *& ... | -| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | insert output argument | -| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | -| A.cpp:48:12:48:18 | *call to make [c] | A.cpp:49:10:49:10 | *b [c] | -| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | -| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | *call to make [c] | -| A.cpp:49:10:49:10 | *b [c] | A.cpp:49:10:49:13 | c | -| A.cpp:55:5:55:5 | set output argument [c] | A.cpp:56:10:56:10 | *b [c] | -| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | -| A.cpp:55:12:55:19 | new | A.cpp:55:5:55:5 | set output argument [c] | -| A.cpp:56:10:56:10 | *b [c] | A.cpp:28:8:28:10 | *this [c] | -| A.cpp:56:10:56:10 | *b [c] | A.cpp:56:10:56:17 | call to get | -| A.cpp:57:11:57:24 | *new [c] | A.cpp:28:8:28:10 | *this [c] | -| A.cpp:57:11:57:24 | *new [c] | A.cpp:57:10:57:32 | call to get | -| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | *new [c] | -| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | -| A.cpp:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | -| A.cpp:57:17:57:23 | new | A.cpp:57:17:57:23 | new | -| A.cpp:64:10:64:15 | *call to setOnB [c] | A.cpp:66:10:66:11 | *b2 [c] | -| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | *call to setOnB [c] | -| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | -| A.cpp:66:10:66:11 | *b2 [c] | A.cpp:66:10:66:14 | c | -| A.cpp:73:10:73:19 | *call to setOnBWrap [c] | A.cpp:75:10:75:11 | *b2 [c] | -| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | *call to setOnBWrap [c] | -| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | -| A.cpp:75:10:75:11 | *b2 [c] | A.cpp:75:10:75:14 | c | -| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | -| A.cpp:81:10:81:15 | *call to setOnB [c] | A.cpp:78:6:78:15 | **setOnBWrap [c] | -| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | *call to setOnB [c] | -| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | -| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | -| A.cpp:90:7:90:8 | set output argument [c] | A.cpp:85:9:85:14 | **setOnB [c] | -| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | -| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | set output argument [c] | -| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | -| A.cpp:100:5:100:6 | *c1 [post update] [a] | A.cpp:101:8:101:9 | *c1 [a] | -| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | *c1 [post update] [a] | -| A.cpp:101:8:101:9 | *c1 [a] | A.cpp:103:14:103:14 | *c [a] | -| A.cpp:103:14:103:14 | *c [a] | A.cpp:107:12:107:13 | *c1 [a] | -| A.cpp:103:14:103:14 | *c [a] | A.cpp:120:12:120:13 | *c1 [a] | -| A.cpp:107:12:107:13 | *c1 [a] | A.cpp:107:12:107:16 | a | -| A.cpp:120:12:120:13 | *c1 [a] | A.cpp:120:12:120:16 | a | -| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:131:8:131:8 | f7 output argument [c] | -| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | -| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | set output argument [c] | -| A.cpp:126:12:126:18 | new | A.cpp:126:12:126:18 | new | -| A.cpp:131:8:131:8 | f7 output argument [c] | A.cpp:132:10:132:10 | *b [c] | -| A.cpp:132:10:132:10 | *b [c] | A.cpp:132:10:132:13 | c | -| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:143:7:143:31 | *... = ... [c] | -| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:151:18:151:18 | D output argument [c] | -| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | *b [post update] [c] | -| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | -| A.cpp:143:7:143:10 | *this [post update] [*b, c] | A.cpp:151:12:151:24 | call to D [*b, c] | -| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:143:7:143:31 | *... = ... [c] | A.cpp:143:7:143:10 | *this [post update] [*b, c] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | -| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | -| A.cpp:151:12:151:24 | call to D [*b, c] | A.cpp:153:10:153:10 | *d [*b, c] | -| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | *d [b] | -| A.cpp:151:18:151:18 | D output argument [c] | A.cpp:154:10:154:10 | *b [c] | -| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | -| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:152:10:152:10 | *d [b] | A.cpp:152:10:152:13 | b | -| A.cpp:153:10:153:10 | *d [*b, c] | A.cpp:153:13:153:13 | *b [c] | -| A.cpp:153:13:153:13 | *b [c] | A.cpp:153:10:153:16 | c | -| A.cpp:154:10:154:10 | *b [c] | A.cpp:154:10:154:13 | c | -| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | -| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | *l1 [head] | -| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | -| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | -| A.cpp:161:18:161:40 | call to MyList [*next, head] | A.cpp:162:38:162:39 | *l2 [*next, head] | -| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:161:18:161:40 | call to MyList [*next, head] | -| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | -| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:165:10:165:11 | *l3 [*next, *next, head] | -| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:167:44:167:44 | *l [*next, *next, head] | -| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | -| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | -| A.cpp:165:10:165:11 | *l3 [*next, *next, head] | A.cpp:165:14:165:17 | *next [*next, head] | -| A.cpp:165:14:165:17 | *next [*next, head] | A.cpp:165:20:165:23 | *next [head] | -| A.cpp:165:20:165:23 | *next [head] | A.cpp:165:10:165:29 | head | -| A.cpp:167:44:167:44 | *l [*next, *next, head] | A.cpp:167:47:167:50 | *next [*next, head] | -| A.cpp:167:44:167:44 | *l [*next, head] | A.cpp:167:47:167:50 | *next [head] | -| A.cpp:167:47:167:50 | *next [*next, head] | A.cpp:167:44:167:44 | *l [*next, head] | -| A.cpp:167:47:167:50 | *next [head] | A.cpp:169:12:169:12 | *l [head] | -| A.cpp:169:12:169:12 | *l [head] | A.cpp:169:12:169:18 | head | -| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | -| A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:184:7:184:23 | *... = ... [*next, head] | -| A.cpp:181:32:181:35 | *next [head] | A.cpp:184:7:184:23 | *... = ... [head] | -| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | *this [post update] [head] | -| A.cpp:184:7:184:23 | *... = ... [*next, head] | A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | -| A.cpp:184:7:184:23 | *... = ... [head] | A.cpp:184:7:184:10 | *this [post update] [*next, head] | -| B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | -| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | *b1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | -| B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | B.cpp:9:10:9:11 | *b2 [*box1, elem1] | -| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | -| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | -| B.cpp:9:10:9:11 | *b2 [*box1, elem1] | B.cpp:9:14:9:17 | *box1 [elem1] | -| B.cpp:9:14:9:17 | *box1 [elem1] | B.cpp:9:10:9:24 | elem1 | -| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | -| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | *b1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | -| B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | B.cpp:19:10:19:11 | *b2 [*box1, elem2] | -| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | -| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | -| B.cpp:19:10:19:11 | *b2 [*box1, elem2] | B.cpp:19:14:19:17 | *box1 [elem2] | -| B.cpp:19:14:19:17 | *box1 [elem2] | B.cpp:19:10:19:24 | elem2 | -| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | -| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | -| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | *this [post update] [elem1] | -| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | *this [post update] [elem2] | -| B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:46:7:46:21 | *... = ... [elem1] | -| B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:46:7:46:21 | *... = ... [elem2] | -| B.cpp:46:7:46:21 | *... = ... [elem1] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | -| B.cpp:46:7:46:21 | *... = ... [elem2] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | -| C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | *c [s1] | -| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | *c [s3] | -| C.cpp:19:5:19:5 | *c [s1] | C.cpp:27:8:27:11 | *this [s1] | -| C.cpp:19:5:19:5 | *c [s3] | C.cpp:27:8:27:11 | *this [s3] | -| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:18:12:18:18 | call to C [s1] | -| C.cpp:22:12:22:21 | new | C.cpp:22:3:22:3 | *this [post update] [s1] | -| C.cpp:22:12:22:21 | new | C.cpp:22:12:22:21 | new | -| C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | -| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | *this [post update] [s3] | -| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | -| C.cpp:27:8:27:11 | *this [s1] | C.cpp:29:10:29:11 | *this [s1] | -| C.cpp:27:8:27:11 | *this [s3] | C.cpp:31:10:31:11 | *this [s3] | -| C.cpp:29:10:29:11 | *this [s1] | C.cpp:29:10:29:11 | s1 | -| C.cpp:31:10:31:11 | *this [s3] | C.cpp:31:10:31:11 | s3 | -| D.cpp:10:11:10:17 | *this [elem] | D.cpp:10:30:10:33 | *this [elem] | -| D.cpp:10:30:10:33 | *this [elem] | D.cpp:10:30:10:33 | elem | -| D.cpp:10:30:10:33 | elem | D.cpp:10:11:10:17 | *getElem | -| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | -| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | *this [post update] [elem] | -| D.cpp:17:11:17:17 | *this [*box, elem] | D.cpp:17:30:17:32 | *this [*box, elem] | -| D.cpp:17:30:17:32 | *box [elem] | D.cpp:17:11:17:17 | **getBox1 [elem] | -| D.cpp:17:30:17:32 | *this [*box, elem] | D.cpp:17:30:17:32 | *box [elem] | -| D.cpp:21:30:21:31 | *b2 [*box, elem] | D.cpp:22:10:22:11 | *b2 [*box, elem] | -| D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:17:11:17:17 | *this [*box, elem] | -| D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:22:14:22:20 | *call to getBox1 [elem] | -| D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:10:11:10:17 | *this [elem] | -| D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:22:10:22:33 | call to getElem | -| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | -| D.cpp:30:5:30:5 | *b [post update] [*box, elem] | D.cpp:31:14:31:14 | *b [*box, elem] | -| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | *box [post update] [elem] | -| D.cpp:30:8:30:10 | *box [post update] [elem] | D.cpp:30:5:30:5 | *b [post update] [*box, elem] | -| D.cpp:31:14:31:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | -| D.cpp:37:5:37:5 | *b [post update] [*box, elem] | D.cpp:38:14:38:14 | *b [*box, elem] | -| D.cpp:37:8:37:10 | setElem output argument [elem] | D.cpp:37:5:37:5 | *b [post update] [*box, elem] | -| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | -| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | setElem output argument [elem] | -| D.cpp:38:14:38:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | -| D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | D.cpp:45:14:45:14 | *b [*box, elem] | -| D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | -| D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | -| D.cpp:45:14:45:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | -| D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | D.cpp:52:14:52:14 | *b [*box, elem] | -| D.cpp:51:8:51:14 | setElem output argument [elem] | D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | -| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | -| D.cpp:51:27:51:27 | e | D.cpp:51:8:51:14 | setElem output argument [elem] | -| D.cpp:52:14:52:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | -| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | -| D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | -| D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | -| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | *box [post update] [elem] | -| D.cpp:58:15:58:17 | *box [post update] [elem] | D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | -| D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | -| D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | -| D.cpp:64:10:64:17 | *boxfield [*box, elem] | D.cpp:64:20:64:22 | *box [elem] | -| D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *boxfield [*box, elem] | -| D.cpp:64:20:64:22 | *box [elem] | D.cpp:64:10:64:28 | elem | -| E.cpp:19:27:19:27 | *p [data, *buffer] | E.cpp:21:10:21:10 | *p [data, *buffer] | -| E.cpp:21:10:21:10 | *p [data, *buffer] | E.cpp:21:13:21:16 | *data [*buffer] | -| E.cpp:21:13:21:16 | *data [*buffer] | E.cpp:21:18:21:23 | *buffer | -| E.cpp:28:21:28:23 | argument_source output argument | E.cpp:31:10:31:12 | *raw | -| E.cpp:29:21:29:21 | *b [post update] [*buffer] | E.cpp:32:10:32:10 | *b [*buffer] | -| E.cpp:29:21:29:29 | argument_source output argument | E.cpp:29:21:29:21 | *b [post update] [*buffer] | -| E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | E.cpp:33:18:33:19 | *& ... [data, *buffer] | -| E.cpp:30:21:30:33 | argument_source output argument | E.cpp:30:23:30:26 | *data [post update] [*buffer] | -| E.cpp:30:23:30:26 | *data [post update] [*buffer] | E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | -| E.cpp:32:10:32:10 | *b [*buffer] | E.cpp:32:13:32:18 | *buffer | -| E.cpp:33:18:33:19 | *& ... [data, *buffer] | E.cpp:19:27:19:27 | *p [data, *buffer] | -| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | -| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | *s [post update] [m1] | -| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | -| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | -| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | *s [post update] [m1] | -| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | -| aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | aliasing.cpp:29:8:29:9 | *s1 [m1] | -| aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | aliasing.cpp:30:8:30:9 | *s2 [m1] | -| aliasing.cpp:29:8:29:9 | *s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | -| aliasing.cpp:30:8:30:9 | *s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | -| aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | *copy2 [m1] | -| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | -| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | -| aliasing.cpp:62:8:62:12 | *copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | -| aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | *w [s, m1] | -| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | *s [post update] [m1] | -| aliasing.cpp:92:5:92:5 | *s [post update] [m1] | aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | -| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | -| aliasing.cpp:93:8:93:8 | *w [s, m1] | aliasing.cpp:93:10:93:10 | *s [m1] | -| aliasing.cpp:93:10:93:10 | *s [m1] | aliasing.cpp:93:12:93:13 | m1 | -| aliasing.cpp:98:3:98:3 | *s [post update] [m1] | aliasing.cpp:101:14:101:19 | *s_copy [m1] | -| aliasing.cpp:98:3:98:21 | ... = ... | aliasing.cpp:98:3:98:3 | *s [post update] [m1] | -| aliasing.cpp:98:10:98:19 | call to user_input | aliasing.cpp:98:3:98:21 | ... = ... | -| aliasing.cpp:101:13:101:22 | *& ... | aliasing.cpp:102:8:102:10 | * ... | -| aliasing.cpp:101:14:101:19 | *s_copy [m1] | aliasing.cpp:101:13:101:22 | *& ... | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | -| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | -| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | *pa | -| aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | aliasing.cpp:122:8:122:12 | access to array | -| aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | aliasing.cpp:127:8:127:16 | * ... | -| aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | aliasing.cpp:132:8:132:14 | * ... | -| aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | aliasing.cpp:137:8:137:11 | * ... | -| aliasing.cpp:141:15:141:15 | *s [post update] [*data] | aliasing.cpp:143:8:143:8 | *s [*data] | -| aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | aliasing.cpp:141:15:141:15 | *s [post update] [*data] | -| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:8:143:16 | access to array | -| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:10:143:13 | *data | -| aliasing.cpp:143:10:143:13 | *data | aliasing.cpp:143:8:143:16 | access to array | -| aliasing.cpp:158:15:158:15 | *s [post update] [data] | aliasing.cpp:159:9:159:9 | *s [data] | -| aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | aliasing.cpp:158:15:158:15 | *s [post update] [data] | -| aliasing.cpp:159:9:159:9 | *s [data] | aliasing.cpp:159:8:159:14 | * ... | -| aliasing.cpp:164:15:164:15 | *s [post update] [data] | aliasing.cpp:165:8:165:8 | *s [data] | -| aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | aliasing.cpp:164:15:164:15 | *s [post update] [data] | -| aliasing.cpp:165:8:165:8 | *s [data] | aliasing.cpp:165:8:165:16 | access to array | -| aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | aliasing.cpp:175:19:175:19 | *s [post update] [m1] | -| aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | *s2 [s, m1] | -| aliasing.cpp:175:19:175:19 | *s [post update] [m1] | aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | -| aliasing.cpp:176:8:176:9 | *s2 [s, m1] | aliasing.cpp:176:11:176:11 | *s [m1] | -| aliasing.cpp:176:11:176:11 | *s [m1] | aliasing.cpp:176:13:176:14 | m1 | -| aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | aliasing.cpp:187:19:187:19 | *s [post update] [m1] | -| aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | -| aliasing.cpp:187:19:187:19 | *s [post update] [m1] | aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | -| aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | *s [m1] | -| aliasing.cpp:189:13:189:13 | *s [m1] | aliasing.cpp:189:15:189:16 | m1 | -| aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | aliasing.cpp:200:21:200:21 | *s [post update] [m1] | -| aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | -| aliasing.cpp:200:21:200:21 | *s [post update] [m1] | aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | -| aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | aliasing.cpp:201:13:201:13 | *s [m1] | -| aliasing.cpp:201:13:201:13 | *s [m1] | aliasing.cpp:201:15:201:16 | m1 | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | -| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | *o [nested, arr, data] | -| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | *o [nested, arr, data] | -| arrays.cpp:36:3:36:17 | *access to array [post update] [data] | arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | -| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | *access to array [post update] [data] | -| arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | -| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | -| arrays.cpp:37:8:37:8 | *o [nested, arr, data] | arrays.cpp:37:10:37:15 | *nested [arr, data] | -| arrays.cpp:37:8:37:22 | *access to array [data] | arrays.cpp:37:24:37:27 | data | -| arrays.cpp:37:10:37:15 | *nested [arr, data] | arrays.cpp:37:8:37:22 | *access to array [data] | -| arrays.cpp:38:8:38:8 | *o [nested, arr, data] | arrays.cpp:38:10:38:15 | *nested [arr, data] | -| arrays.cpp:38:8:38:22 | *access to array [data] | arrays.cpp:38:24:38:27 | data | -| arrays.cpp:38:10:38:15 | *nested [arr, data] | arrays.cpp:38:8:38:22 | *access to array [data] | -| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | -| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | -| arrays.cpp:42:3:42:20 | *access to array [post update] [data] | arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | -| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | *access to array [post update] [data] | -| arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | -| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | -| arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | arrays.cpp:43:10:43:17 | *indirect [arr, data] | -| arrays.cpp:43:8:43:25 | *access to array [data] | arrays.cpp:43:27:43:30 | data | -| arrays.cpp:43:10:43:17 | *indirect [arr, data] | arrays.cpp:43:8:43:25 | *access to array [data] | -| arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | arrays.cpp:44:10:44:17 | *indirect [arr, data] | -| arrays.cpp:44:8:44:25 | *access to array [data] | arrays.cpp:44:27:44:30 | data | -| arrays.cpp:44:10:44:17 | *indirect [arr, data] | arrays.cpp:44:8:44:25 | *access to array [data] | -| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | -| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | -| arrays.cpp:48:3:48:20 | *access to array [post update] [data] | arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | -| arrays.cpp:48:3:48:40 | ... = ... | arrays.cpp:48:3:48:20 | *access to array [post update] [data] | -| arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | -| arrays.cpp:48:29:48:38 | call to user_input | arrays.cpp:48:3:48:40 | ... = ... | -| arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | -| arrays.cpp:49:8:49:25 | *access to array [data] | arrays.cpp:49:27:49:30 | data | -| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:8:49:25 | *access to array [data] | -| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:20:49:22 | *ptr [data] | -| arrays.cpp:49:20:49:22 | *ptr [data] | arrays.cpp:49:8:49:25 | *access to array [data] | -| arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | -| arrays.cpp:50:8:50:25 | *access to array [data] | arrays.cpp:50:27:50:30 | data | -| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:8:50:25 | *access to array [data] | -| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:20:50:22 | *ptr [data] | -| arrays.cpp:50:20:50:22 | *ptr [data] | arrays.cpp:50:8:50:25 | *access to array [data] | -| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | -| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | *s [post update] [a] | -| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | -| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | *this [post update] [a] | -| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | -| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | -| by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:32:12:32:12 | *s [a] | -| by_reference.cpp:32:12:32:12 | *s [a] | by_reference.cpp:32:15:32:15 | a | -| by_reference.cpp:32:15:32:15 | a | by_reference.cpp:31:16:31:28 | *nonMemberGetA | -| by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:36:12:36:15 | *this [a] | -| by_reference.cpp:36:12:36:15 | *this [a] | by_reference.cpp:36:18:36:18 | a | -| by_reference.cpp:36:18:36:18 | a | by_reference.cpp:35:9:35:19 | *getDirectly | -| by_reference.cpp:39:9:39:21 | *this [a] | by_reference.cpp:40:12:40:15 | *this [a] | -| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:35:9:35:19 | *this [a] | -| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | -| by_reference.cpp:40:18:40:28 | call to getDirectly | by_reference.cpp:39:9:39:21 | *getIndirectly | -| by_reference.cpp:43:9:43:27 | *this [a] | by_reference.cpp:44:26:44:29 | *this [a] | -| by_reference.cpp:44:12:44:24 | call to nonMemberGetA | by_reference.cpp:43:9:43:27 | *getThroughNonMember | -| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:31:46:31:46 | *s [a] | -| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | -| by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | by_reference.cpp:51:8:51:8 | *s [a] | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | -| by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:35:9:35:19 | *this [a] | -| by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | -| by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | by_reference.cpp:57:8:57:8 | *s [a] | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | -| by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:39:9:39:21 | *this [a] | -| by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | -| by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | by_reference.cpp:63:8:63:8 | *s [a] | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | -| by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:43:9:43:27 | *this [a] | -| by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | -| by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | by_reference.cpp:69:22:69:23 | *& ... [a] | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | -| by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:31:46:31:46 | *s [a] | -| by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | -| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | *inner [post update] [a] | -| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | -| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | *inner [post update] [a] | -| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | -| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | -| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | -| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | *pa | -| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:124:15:124:21 | taint_a_ref output argument | -| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:128:15:128:23 | taint_a_ref output argument | -| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | *pa | -| by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | -| by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | -| by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | -| by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | -| by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | by_reference.cpp:104:16:104:20 | *outer [post update] [a] | -| by_reference.cpp:104:16:104:20 | *outer [post update] [a] | by_reference.cpp:112:8:112:12 | *outer [a] | -| by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | -| by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | -| by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | -| by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | -| by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | -| by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | by_reference.cpp:116:8:116:13 | *pouter [a] | -| by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | *inner_nested [a] | -| by_reference.cpp:110:14:110:25 | *inner_nested [a] | by_reference.cpp:110:27:110:27 | a | -| by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | by_reference.cpp:111:14:111:22 | *inner_ptr [a] | -| by_reference.cpp:111:14:111:22 | *inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | -| by_reference.cpp:112:8:112:12 | *outer [a] | by_reference.cpp:112:14:112:14 | a | -| by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | *inner_nested [a] | -| by_reference.cpp:114:16:114:27 | *inner_nested [a] | by_reference.cpp:114:29:114:29 | a | -| by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | by_reference.cpp:115:16:115:24 | *inner_ptr [a] | -| by_reference.cpp:115:16:115:24 | *inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | -| by_reference.cpp:116:8:116:13 | *pouter [a] | by_reference.cpp:116:16:116:16 | a | -| by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | -| by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | -| by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | -| by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | -| by_reference.cpp:124:15:124:19 | *outer [post update] [a] | by_reference.cpp:132:8:132:12 | *outer [a] | -| by_reference.cpp:124:15:124:21 | taint_a_ref output argument | by_reference.cpp:124:15:124:19 | *outer [post update] [a] | -| by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | -| by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | -| by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | -| by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | -| by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | by_reference.cpp:136:8:136:13 | *pouter [a] | -| by_reference.cpp:128:15:128:23 | taint_a_ref output argument | by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | -| by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | *inner_nested [a] | -| by_reference.cpp:130:14:130:25 | *inner_nested [a] | by_reference.cpp:130:27:130:27 | a | -| by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | by_reference.cpp:131:14:131:22 | *inner_ptr [a] | -| by_reference.cpp:131:14:131:22 | *inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | -| by_reference.cpp:132:8:132:12 | *outer [a] | by_reference.cpp:132:14:132:14 | a | -| by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | *inner_nested [a] | -| by_reference.cpp:134:16:134:27 | *inner_nested [a] | by_reference.cpp:134:29:134:29 | a | -| by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | by_reference.cpp:135:16:135:24 | *inner_ptr [a] | -| by_reference.cpp:135:16:135:24 | *inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | -| by_reference.cpp:136:8:136:13 | *pouter [a] | by_reference.cpp:136:16:136:16 | a | -| clearning.cpp:32:3:32:25 | ... = ... | clearning.cpp:32:4:32:4 | *s [post update] [*x] | -| clearning.cpp:32:4:32:4 | *s [post update] [*x] | clearning.cpp:33:5:33:5 | *s [*x] | -| clearning.cpp:32:10:32:19 | call to user_input | clearning.cpp:32:3:32:25 | ... = ... | -| clearning.cpp:33:5:33:5 | *s [*x] | clearning.cpp:34:9:34:9 | *s [*x] | -| clearning.cpp:34:9:34:9 | *s [*x] | clearning.cpp:34:8:34:11 | * ... | -| clearning.cpp:53:3:53:25 | ... = ... | clearning.cpp:53:4:53:4 | *s [post update] [*x] | -| clearning.cpp:53:4:53:4 | *s [post update] [*x] | clearning.cpp:54:3:54:3 | *s [*x] | -| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:3:53:25 | ... = ... | -| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:3:54:7 | *... ++ | -| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:5:54:5 | *x | -| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:55:8:55:8 | *s [*x] | -| clearning.cpp:54:3:54:3 | *s [post update] [*x] | clearning.cpp:55:8:55:8 | *s [*x] | -| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:3 | *s [post update] [*x] | -| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:7 | *... ++ | -| clearning.cpp:54:5:54:5 | *x | clearning.cpp:54:3:54:7 | *... ++ | -| clearning.cpp:55:8:55:8 | *s [*x] | clearning.cpp:55:10:55:10 | *x | -| clearning.cpp:60:3:60:22 | ... = ... | clearning.cpp:60:5:60:5 | *s [post update] [**x] | -| clearning.cpp:60:5:60:5 | *s [post update] [**x] | clearning.cpp:61:3:61:3 | *s [**x] | -| clearning.cpp:60:11:60:20 | call to user_input | clearning.cpp:60:3:60:22 | ... = ... | -| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:3:61:7 | **... ++ | -| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:5:61:5 | **x | -| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:62:8:62:8 | *s [**x] | -| clearning.cpp:61:3:61:3 | *s [post update] [**x] | clearning.cpp:62:8:62:8 | *s [**x] | -| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:3 | *s [post update] [**x] | -| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:7 | **... ++ | -| clearning.cpp:61:5:61:5 | **x | clearning.cpp:61:3:61:7 | **... ++ | -| clearning.cpp:62:8:62:8 | *s [**x] | clearning.cpp:62:10:62:10 | **x | -| clearning.cpp:74:18:74:18 | *s [post update] [*val] | clearning.cpp:76:8:76:8 | *s [*val] | -| clearning.cpp:74:20:74:22 | argument_source output argument | clearning.cpp:74:18:74:18 | *s [post update] [*val] | -| clearning.cpp:76:8:76:8 | *s [*val] | clearning.cpp:76:7:76:12 | * ... | -| clearning.cpp:81:18:81:18 | *s [post update] [*val] | clearning.cpp:83:13:83:13 | *s [*val] | -| clearning.cpp:81:20:81:22 | argument_source output argument | clearning.cpp:81:18:81:18 | *s [post update] [*val] | -| clearning.cpp:83:5:83:5 | *s [post update] [*val] | clearning.cpp:84:8:84:8 | *s [*val] | -| clearning.cpp:83:5:83:21 | *... = ... | clearning.cpp:83:5:83:5 | *s [post update] [*val] | -| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:13:83:21 | *... + ... | -| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:15:83:17 | *val | -| clearning.cpp:83:13:83:21 | *... + ... | clearning.cpp:83:5:83:21 | *... = ... | -| clearning.cpp:83:15:83:17 | *val | clearning.cpp:83:5:83:21 | *... = ... | -| clearning.cpp:84:8:84:8 | *s [*val] | clearning.cpp:84:7:84:12 | * ... | -| clearning.cpp:89:18:89:18 | *s [post update] [*val] | clearning.cpp:90:3:90:3 | *s [*val] | -| clearning.cpp:89:20:89:22 | argument_source output argument | clearning.cpp:89:18:89:18 | *s [post update] [*val] | -| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:3:90:9 | *... ++ | -| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:5:90:7 | **val | -| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:91:8:91:8 | *s [*val] | -| clearning.cpp:90:3:90:3 | *s [post update] [*val] | clearning.cpp:91:8:91:8 | *s [*val] | -| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:3 | *s [post update] [*val] | -| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:9 | *... ++ | -| clearning.cpp:90:5:90:7 | **val | clearning.cpp:90:3:90:9 | *... ++ | -| clearning.cpp:91:8:91:8 | *s [*val] | clearning.cpp:91:7:91:12 | * ... | -| clearning.cpp:96:18:96:18 | *s [post update] [*val] | clearning.cpp:97:10:97:10 | *s [*val] | -| clearning.cpp:96:20:96:22 | argument_source output argument | clearning.cpp:96:18:96:18 | *s [post update] [*val] | -| clearning.cpp:97:2:97:2 | *s [post update] [*val] | clearning.cpp:98:8:98:8 | *s [*val] | -| clearning.cpp:97:2:97:18 | *... = ... | clearning.cpp:97:2:97:2 | *s [post update] [*val] | -| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:10:97:18 | *... + ... | -| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:12:97:14 | *val | -| clearning.cpp:97:10:97:18 | *... + ... | clearning.cpp:97:2:97:18 | *... = ... | -| clearning.cpp:97:12:97:14 | *val | clearning.cpp:97:2:97:18 | *... = ... | -| clearning.cpp:98:8:98:8 | *s [*val] | clearning.cpp:98:7:98:12 | * ... | -| clearning.cpp:103:18:103:18 | *s [post update] [*val] | clearning.cpp:104:2:104:2 | *s [*val] | -| clearning.cpp:103:20:103:22 | argument_source output argument | clearning.cpp:103:18:103:18 | *s [post update] [*val] | -| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:2:104:8 | *... ++ | -| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:4:104:6 | *val | -| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:105:8:105:8 | *s [*val] | -| clearning.cpp:104:2:104:2 | *s [post update] [*val] | clearning.cpp:105:8:105:8 | *s [*val] | -| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:2 | *s [post update] [*val] | -| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:8 | *... ++ | -| clearning.cpp:104:4:104:6 | *val | clearning.cpp:104:2:104:8 | *... ++ | -| clearning.cpp:105:8:105:8 | *s [*val] | clearning.cpp:105:7:105:12 | * ... | -| clearning.cpp:110:18:110:18 | *s [post update] [*val] | clearning.cpp:111:4:111:4 | *s [*val] | -| clearning.cpp:110:20:110:22 | argument_source output argument | clearning.cpp:110:18:110:18 | *s [post update] [*val] | -| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:2:111:8 | *++ ... | -| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:4:111:4 | *s [post update] [*val] | -| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:2:111:8 | *++ ... | -| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:6:111:8 | *val | -| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:112:8:112:8 | *s [*val] | -| clearning.cpp:111:4:111:4 | *s [post update] [*val] | clearning.cpp:112:8:112:8 | *s [*val] | -| clearning.cpp:111:6:111:8 | *val | clearning.cpp:111:2:111:8 | *++ ... | -| clearning.cpp:112:8:112:8 | *s [*val] | clearning.cpp:112:7:112:12 | * ... | -| clearning.cpp:117:18:117:18 | *s [post update] [*val] | clearning.cpp:118:2:118:2 | *s [*val] | -| clearning.cpp:117:20:117:22 | argument_source output argument | clearning.cpp:117:18:117:18 | *s [post update] [*val] | -| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:2:118:11 | *... += ... | -| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:4:118:6 | *val | -| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:119:8:119:8 | *s [*val] | -| clearning.cpp:118:2:118:2 | *s [post update] [*val] | clearning.cpp:119:8:119:8 | *s [*val] | -| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:2 | *s [post update] [*val] | -| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:11 | *... += ... | -| clearning.cpp:118:4:118:6 | *val | clearning.cpp:118:2:118:11 | *... += ... | -| clearning.cpp:119:8:119:8 | *s [*val] | clearning.cpp:119:7:119:12 | * ... | -| clearning.cpp:151:3:151:3 | *s [post update] [val] | clearning.cpp:152:8:152:8 | *s [val] | -| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | *s [post update] [val] | -| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | -| clearning.cpp:152:8:152:8 | *s [val] | clearning.cpp:152:10:152:12 | val | -| complex.cpp:9:7:9:7 | *this [a_] | complex.cpp:9:20:9:21 | *this [a_] | -| complex.cpp:9:20:9:21 | *this [a_] | complex.cpp:9:20:9:21 | a_ | -| complex.cpp:9:20:9:21 | a_ | complex.cpp:9:7:9:7 | *a | -| complex.cpp:10:7:10:7 | *this [b_] | complex.cpp:10:20:10:21 | *this [b_] | -| complex.cpp:10:20:10:21 | *this [b_] | complex.cpp:10:20:10:21 | b_ | -| complex.cpp:10:20:10:21 | b_ | complex.cpp:10:7:10:7 | *b | -| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | -| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | *this [post update] [a_] | -| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | -| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | *this [post update] [b_] | -| complex.cpp:40:17:40:17 | *b [inner, f, a_] | complex.cpp:42:8:42:8 | *b [inner, f, a_] | -| complex.cpp:40:17:40:17 | *b [inner, f, b_] | complex.cpp:43:8:43:8 | *b [inner, f, b_] | -| complex.cpp:42:8:42:8 | *b [inner, f, a_] | complex.cpp:42:10:42:14 | *inner [f, a_] | -| complex.cpp:42:10:42:14 | *inner [f, a_] | complex.cpp:42:16:42:16 | *f [a_] | -| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:9:7:9:7 | *this [a_] | -| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:42:18:42:18 | call to a | -| complex.cpp:43:8:43:8 | *b [inner, f, b_] | complex.cpp:43:10:43:14 | *inner [f, b_] | -| complex.cpp:43:10:43:14 | *inner [f, b_] | complex.cpp:43:16:43:16 | *f [b_] | -| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:10:7:10:7 | *this [b_] | -| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:43:18:43:18 | call to b | -| complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | -| complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | -| complex.cpp:53:12:53:12 | setA output argument [a_] | complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | setA output argument [a_] | -| complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | -| complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | -| complex.cpp:54:12:54:12 | setB output argument [b_] | complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | setB output argument [b_] | -| complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | -| complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | -| complex.cpp:55:12:55:12 | setA output argument [a_] | complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | setA output argument [a_] | -| complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | -| complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | -| complex.cpp:56:12:56:12 | setB output argument [b_] | complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | setB output argument [b_] | -| complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | -| complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | -| complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | -| complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | -| conflated.cpp:10:3:10:22 | ... = ... | conflated.cpp:10:4:10:5 | *ra [post update] [*p] | -| conflated.cpp:10:4:10:5 | *ra [post update] [*p] | conflated.cpp:11:9:11:10 | *ra [*p] | -| conflated.cpp:10:11:10:20 | call to user_input | conflated.cpp:10:3:10:22 | ... = ... | -| conflated.cpp:11:9:11:10 | *ra [*p] | conflated.cpp:11:8:11:12 | * ... | -| conflated.cpp:19:19:19:21 | argument_source output argument | conflated.cpp:20:8:20:10 | *raw | -| conflated.cpp:29:3:29:4 | *pa [post update] [x] | conflated.cpp:30:8:30:9 | *pa [x] | -| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | *pa [post update] [x] | -| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | -| conflated.cpp:30:8:30:9 | *pa [x] | conflated.cpp:30:12:30:12 | x | -| conflated.cpp:36:3:36:4 | *pa [post update] [x] | conflated.cpp:37:8:37:9 | *pa [x] | -| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | *pa [post update] [x] | -| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | -| conflated.cpp:37:8:37:9 | *pa [x] | conflated.cpp:37:12:37:12 | x | -| conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | conflated.cpp:55:8:55:9 | *ll [*next, y] | -| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | *next [post update] [y] | -| conflated.cpp:54:7:54:10 | *next [post update] [y] | conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | -| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | -| conflated.cpp:55:8:55:9 | *ll [*next, y] | conflated.cpp:55:12:55:15 | *next [y] | -| conflated.cpp:55:12:55:15 | *next [y] | conflated.cpp:55:18:55:18 | y | -| conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | conflated.cpp:61:8:61:9 | *ll [*next, y] | -| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | *next [post update] [y] | -| conflated.cpp:60:7:60:10 | *next [post update] [y] | conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | -| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | -| conflated.cpp:61:8:61:9 | *ll [*next, y] | conflated.cpp:61:12:61:15 | *next [y] | -| conflated.cpp:61:12:61:15 | *next [y] | conflated.cpp:61:18:61:18 | y | -| constructors.cpp:18:9:18:9 | *this [a_] | constructors.cpp:18:22:18:23 | *this [a_] | -| constructors.cpp:18:22:18:23 | *this [a_] | constructors.cpp:18:22:18:23 | a_ | -| constructors.cpp:18:22:18:23 | a_ | constructors.cpp:18:9:18:9 | *a | -| constructors.cpp:19:9:19:9 | *this [b_] | constructors.cpp:19:22:19:23 | *this [b_] | -| constructors.cpp:19:22:19:23 | *this [b_] | constructors.cpp:19:22:19:23 | b_ | -| constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:9:19:9 | *b | -| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | -| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | -| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | -| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:5:23:7 | *this [post update] [b_] | -| constructors.cpp:26:15:26:15 | *f [a_] | constructors.cpp:28:10:28:10 | *f [a_] | -| constructors.cpp:26:15:26:15 | *f [b_] | constructors.cpp:29:10:29:10 | *f [b_] | -| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:18:9:18:9 | *this [a_] | -| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:28:12:28:12 | call to a | -| constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:19:9:19:9 | *this [b_] | -| constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:29:12:29:12 | call to b | -| constructors.cpp:34:9:34:9 | call to Foo [a_] | constructors.cpp:40:9:40:9 | *f [a_] | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:34:9:34:9 | call to Foo [a_] | -| constructors.cpp:35:9:35:9 | call to Foo [b_] | constructors.cpp:43:9:43:9 | *g [b_] | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:35:9:35:9 | call to Foo [b_] | -| constructors.cpp:36:9:36:9 | call to Foo [a_] | constructors.cpp:46:9:46:9 | *h [a_] | -| constructors.cpp:36:9:36:9 | call to Foo [b_] | constructors.cpp:46:9:46:9 | *h [b_] | -| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | -| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:36:9:36:9 | call to Foo [a_] | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:36:9:36:9 | call to Foo [b_] | -| constructors.cpp:40:9:40:9 | *f [a_] | constructors.cpp:26:15:26:15 | *f [a_] | -| constructors.cpp:43:9:43:9 | *g [b_] | constructors.cpp:26:15:26:15 | *f [b_] | -| constructors.cpp:46:9:46:9 | *h [a_] | constructors.cpp:26:15:26:15 | *f [a_] | -| constructors.cpp:46:9:46:9 | *h [b_] | constructors.cpp:26:15:26:15 | *f [b_] | -| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | -| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | *this [post update] [a] | -| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | -| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | -| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | -| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | -| qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | -| qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | -| qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | -| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | -| qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | qualifiers.cpp:23:16:23:20 | *inner [a] | -| qualifiers.cpp:23:16:23:20 | *inner [a] | qualifiers.cpp:23:23:23:23 | a | -| qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | -| qualifiers.cpp:27:11:27:18 | setA output argument [a] | qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | -| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | -| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | setA output argument [a] | -| qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | qualifiers.cpp:28:16:28:20 | *inner [a] | -| qualifiers.cpp:28:16:28:20 | *inner [a] | qualifiers.cpp:28:23:28:23 | a | -| qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | -| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | -| qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | qualifiers.cpp:33:16:33:20 | *inner [a] | -| qualifiers.cpp:33:16:33:20 | *inner [a] | qualifiers.cpp:33:23:33:23 | a | -| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | -| qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | -| qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | qualifiers.cpp:38:16:38:20 | *inner [a] | -| qualifiers.cpp:38:16:38:20 | *inner [a] | qualifiers.cpp:38:23:38:23 | a | -| qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | -| qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | -| qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | -| qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | -| qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | qualifiers.cpp:43:16:43:20 | *inner [a] | -| qualifiers.cpp:43:16:43:20 | *inner [a] | qualifiers.cpp:43:23:43:23 | a | -| qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | -| qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | -| qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | -| qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | -| qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | qualifiers.cpp:48:16:48:20 | *inner [a] | -| qualifiers.cpp:48:16:48:20 | *inner [a] | qualifiers.cpp:48:23:48:23 | a | -| realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | -| realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | -| realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | -| realistic.cpp:53:47:53:66 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | -| realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | -| realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | -| realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | *userInput [bufferLen] | -| realistic.cpp:61:37:61:45 | *userInput [bufferLen] | realistic.cpp:61:14:61:55 | bufferLen | -| simple.cpp:18:9:18:9 | *this [a_] | simple.cpp:18:22:18:23 | *this [a_] | -| simple.cpp:18:22:18:23 | *this [a_] | simple.cpp:18:22:18:23 | a_ | -| simple.cpp:18:22:18:23 | a_ | simple.cpp:18:9:18:9 | *a | -| simple.cpp:19:9:19:9 | *this [b_] | simple.cpp:19:22:19:23 | *this [b_] | -| simple.cpp:19:22:19:23 | *this [b_] | simple.cpp:19:22:19:23 | b_ | -| simple.cpp:19:22:19:23 | b_ | simple.cpp:19:9:19:9 | *b | -| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | -| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | *this [post update] [a_] | -| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | -| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | *this [post update] [b_] | -| simple.cpp:26:15:26:15 | *f [a_] | simple.cpp:28:10:28:10 | *f [a_] | -| simple.cpp:26:15:26:15 | *f [b_] | simple.cpp:29:10:29:10 | *f [b_] | -| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:18:9:18:9 | *this [a_] | -| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:28:12:28:12 | call to a | -| simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:19:9:19:9 | *this [b_] | -| simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:29:12:29:12 | call to b | -| simple.cpp:39:5:39:5 | setA output argument [a_] | simple.cpp:45:9:45:9 | *f [a_] | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | setA output argument [a_] | -| simple.cpp:40:5:40:5 | setB output argument [b_] | simple.cpp:48:9:48:9 | *g [b_] | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | setB output argument [b_] | -| simple.cpp:41:5:41:5 | setA output argument [a_] | simple.cpp:51:9:51:9 | *h [a_] | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | setA output argument [a_] | -| simple.cpp:42:5:42:5 | setB output argument [b_] | simple.cpp:51:9:51:9 | *h [b_] | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | setB output argument [b_] | -| simple.cpp:45:9:45:9 | *f [a_] | simple.cpp:26:15:26:15 | *f [a_] | -| simple.cpp:48:9:48:9 | *g [b_] | simple.cpp:26:15:26:15 | *f [b_] | -| simple.cpp:51:9:51:9 | *h [a_] | simple.cpp:26:15:26:15 | *f [a_] | -| simple.cpp:51:9:51:9 | *h [b_] | simple.cpp:26:15:26:15 | *f [b_] | -| simple.cpp:65:5:65:5 | *a [post update] [i] | simple.cpp:67:10:67:11 | *a2 [i] | -| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | *a [post update] [i] | -| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | -| simple.cpp:67:10:67:11 | *a2 [i] | simple.cpp:67:13:67:13 | i | -| simple.cpp:78:9:78:15 | *this [f2, f1] | simple.cpp:79:16:79:17 | *this [f2, f1] | -| simple.cpp:79:16:79:17 | *f2 [f1] | simple.cpp:79:19:79:20 | f1 | -| simple.cpp:79:16:79:17 | *this [f2, f1] | simple.cpp:79:16:79:17 | *f2 [f1] | -| simple.cpp:79:19:79:20 | f1 | simple.cpp:78:9:78:15 | *getf2f1 | -| simple.cpp:83:9:83:10 | *f2 [post update] [f1] | simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | -| simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | simple.cpp:84:14:84:20 | *this [f2, f1] | -| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | *f2 [post update] [f1] | -| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | -| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:78:9:78:15 | *this [f2, f1] | -| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | -| simple.cpp:92:5:92:5 | *a [post update] [i] | simple.cpp:94:10:94:11 | *a2 [i] | -| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | *a [post update] [i] | -| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | -| simple.cpp:94:10:94:11 | *a2 [i] | simple.cpp:94:13:94:13 | i | -| simple.cpp:103:24:103:24 | x | simple.cpp:104:14:104:14 | x | -| simple.cpp:108:17:108:26 | call to user_input | simple.cpp:109:43:109:43 | x | -| simple.cpp:109:43:109:43 | x | simple.cpp:103:24:103:24 | x | -| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | -| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | -| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:22:8:22:9 | *ab [a] | -| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:24:10:24:12 | *& ... [a] | -| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:28:5:28:7 | *& ... [a] | -| struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | struct_init.c:20:13:20:14 | *definition of ab [a] | -| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | -| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:20:20:29 | call to user_input | -| struct_init.c:22:8:22:9 | *ab [a] | struct_init.c:22:11:22:11 | a | -| struct_init.c:24:10:24:12 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | -| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:31:8:31:12 | *outer [nestedAB, a] | -| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:36:11:36:15 | *outer [nestedAB, a] | -| struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | -| struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | -| struct_init.c:26:23:29:3 | *{...} [post update] [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | -| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:26:23:29:3 | *{...} [post update] [a] | -| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:7:27:16 | call to user_input | -| struct_init.c:28:5:28:7 | *& ... [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | -| struct_init.c:31:8:31:12 | *outer [nestedAB, a] | struct_init.c:31:14:31:21 | *nestedAB [a] | -| struct_init.c:31:14:31:21 | *nestedAB [a] | struct_init.c:31:23:31:23 | a | -| struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | struct_init.c:33:14:33:22 | *pointerAB [a] | -| struct_init.c:33:14:33:22 | *pointerAB [a] | struct_init.c:33:25:33:25 | a | -| struct_init.c:36:10:36:24 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | -| struct_init.c:36:11:36:15 | *outer [nestedAB, a] | struct_init.c:36:10:36:24 | *& ... [a] | -| struct_init.c:40:13:40:14 | *definition of ab [a] | struct_init.c:43:5:43:7 | *& ... [a] | -| struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | struct_init.c:40:13:40:14 | *definition of ab [a] | -| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | -| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:20:40:29 | call to user_input | -| struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | -| struct_init.c:43:5:43:7 | *& ... [a] | struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | -| struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | struct_init.c:46:16:46:24 | *pointerAB [a] | -| struct_init.c:46:16:46:24 | *pointerAB [a] | struct_init.c:14:24:14:25 | *ab [a] | +| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | provenance | | +| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | *this [post update] [c] | provenance | | +| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | provenance | | +| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | *this [post update] [c] | provenance | | +| A.cpp:28:8:28:10 | *this [c] | A.cpp:28:23:28:26 | *this [c] | provenance | | +| A.cpp:28:23:28:26 | *this [c] | A.cpp:28:29:28:29 | c | provenance | | +| A.cpp:28:29:28:29 | c | A.cpp:28:8:28:10 | *get | provenance | | +| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | provenance | | +| A.cpp:31:14:31:21 | call to B [c] | A.cpp:29:15:29:18 | **make [c] | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | provenance | | +| A.cpp:41:5:41:6 | insert output argument | A.cpp:43:10:43:12 | *& ... | provenance | | +| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | insert output argument | provenance | | +| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | provenance | | +| A.cpp:48:12:48:18 | *call to make [c] | A.cpp:49:10:49:10 | *b [c] | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | *call to make [c] | provenance | | +| A.cpp:49:10:49:10 | *b [c] | A.cpp:49:10:49:13 | c | provenance | | +| A.cpp:55:5:55:5 | set output argument [c] | A.cpp:56:10:56:10 | *b [c] | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:55:5:55:5 | set output argument [c] | provenance | | +| A.cpp:56:10:56:10 | *b [c] | A.cpp:28:8:28:10 | *this [c] | provenance | | +| A.cpp:56:10:56:10 | *b [c] | A.cpp:56:10:56:17 | call to get | provenance | | +| A.cpp:57:11:57:24 | *new [c] | A.cpp:28:8:28:10 | *this [c] | provenance | | +| A.cpp:57:11:57:24 | *new [c] | A.cpp:57:10:57:32 | call to get | provenance | | +| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | *new [c] | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:57:17:57:23 | new | provenance | | +| A.cpp:64:10:64:15 | *call to setOnB [c] | A.cpp:66:10:66:11 | *b2 [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | *call to setOnB [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:66:10:66:11 | *b2 [c] | A.cpp:66:10:66:14 | c | provenance | | +| A.cpp:73:10:73:19 | *call to setOnBWrap [c] | A.cpp:75:10:75:11 | *b2 [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | *call to setOnBWrap [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | provenance | | +| A.cpp:75:10:75:11 | *b2 [c] | A.cpp:75:10:75:14 | c | provenance | | +| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | provenance | | +| A.cpp:81:10:81:15 | *call to setOnB [c] | A.cpp:78:6:78:15 | **setOnBWrap [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | *call to setOnB [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | provenance | | +| A.cpp:90:7:90:8 | set output argument [c] | A.cpp:85:9:85:14 | **setOnB [c] | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | set output argument [c] | provenance | | +| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | provenance | | +| A.cpp:100:5:100:6 | *c1 [post update] [a] | A.cpp:101:8:101:9 | *c1 [a] | provenance | | +| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | *c1 [post update] [a] | provenance | | +| A.cpp:101:8:101:9 | *c1 [a] | A.cpp:103:14:103:14 | *c [a] | provenance | | +| A.cpp:103:14:103:14 | *c [a] | A.cpp:107:12:107:13 | *c1 [a] | provenance | | +| A.cpp:103:14:103:14 | *c [a] | A.cpp:120:12:120:13 | *c1 [a] | provenance | | +| A.cpp:107:12:107:13 | *c1 [a] | A.cpp:107:12:107:16 | a | provenance | | +| A.cpp:120:12:120:13 | *c1 [a] | A.cpp:120:12:120:16 | a | provenance | | +| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:131:8:131:8 | f7 output argument [c] | provenance | | +| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | set output argument [c] | provenance | | +| A.cpp:126:12:126:18 | new | A.cpp:126:12:126:18 | new | provenance | | +| A.cpp:131:8:131:8 | f7 output argument [c] | A.cpp:132:10:132:10 | *b [c] | provenance | | +| A.cpp:132:10:132:10 | *b [c] | A.cpp:132:10:132:13 | c | provenance | | +| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | provenance | | +| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:143:7:143:31 | *... = ... [c] | provenance | | +| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:151:18:151:18 | D output argument [c] | provenance | | +| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | *b [post update] [c] | provenance | | +| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | provenance | | +| A.cpp:143:7:143:10 | *this [post update] [*b, c] | A.cpp:151:12:151:24 | call to D [*b, c] | provenance | | +| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:143:7:143:31 | *... = ... [c] | A.cpp:143:7:143:10 | *this [post update] [*b, c] | provenance | | +| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | provenance | | +| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | provenance | | +| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | provenance | | +| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | provenance | | +| A.cpp:151:12:151:24 | call to D [*b, c] | A.cpp:153:10:153:10 | *d [*b, c] | provenance | | +| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | *d [b] | provenance | | +| A.cpp:151:18:151:18 | D output argument [c] | A.cpp:154:10:154:10 | *b [c] | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:152:10:152:10 | *d [b] | A.cpp:152:10:152:13 | b | provenance | | +| A.cpp:153:10:153:10 | *d [*b, c] | A.cpp:153:13:153:13 | *b [c] | provenance | | +| A.cpp:153:13:153:13 | *b [c] | A.cpp:153:10:153:16 | c | provenance | | +| A.cpp:154:10:154:10 | *b [c] | A.cpp:154:10:154:13 | c | provenance | | +| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | provenance | | +| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | *l1 [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | provenance | | +| A.cpp:161:18:161:40 | call to MyList [*next, head] | A.cpp:162:38:162:39 | *l2 [*next, head] | provenance | | +| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:161:18:161:40 | call to MyList [*next, head] | provenance | | +| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:165:10:165:11 | *l3 [*next, *next, head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | A.cpp:167:44:167:44 | *l [*next, *next, head] | provenance | | +| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | provenance | | +| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | provenance | | +| A.cpp:165:10:165:11 | *l3 [*next, *next, head] | A.cpp:165:14:165:17 | *next [*next, head] | provenance | | +| A.cpp:165:14:165:17 | *next [*next, head] | A.cpp:165:20:165:23 | *next [head] | provenance | | +| A.cpp:165:20:165:23 | *next [head] | A.cpp:165:10:165:29 | head | provenance | | +| A.cpp:167:44:167:44 | *l [*next, *next, head] | A.cpp:167:47:167:50 | *next [*next, head] | provenance | | +| A.cpp:167:44:167:44 | *l [*next, head] | A.cpp:167:47:167:50 | *next [head] | provenance | | +| A.cpp:167:47:167:50 | *next [*next, head] | A.cpp:167:44:167:44 | *l [*next, head] | provenance | | +| A.cpp:167:47:167:50 | *next [head] | A.cpp:169:12:169:12 | *l [head] | provenance | | +| A.cpp:169:12:169:12 | *l [head] | A.cpp:169:12:169:18 | head | provenance | | +| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | provenance | | +| A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:184:7:184:23 | *... = ... [*next, head] | provenance | | +| A.cpp:181:32:181:35 | *next [head] | A.cpp:184:7:184:23 | *... = ... [head] | provenance | | +| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | *this [post update] [head] | provenance | | +| A.cpp:184:7:184:23 | *... = ... [*next, head] | A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | provenance | | +| A.cpp:184:7:184:23 | *... = ... [head] | A.cpp:184:7:184:10 | *this [post update] [*next, head] | provenance | | +| B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | provenance | | +| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | *b1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | provenance | | +| B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | B.cpp:9:10:9:11 | *b2 [*box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | provenance | | +| B.cpp:9:10:9:11 | *b2 [*box1, elem1] | B.cpp:9:14:9:17 | *box1 [elem1] | provenance | | +| B.cpp:9:14:9:17 | *box1 [elem1] | B.cpp:9:10:9:24 | elem1 | provenance | | +| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | provenance | | +| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | *b1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | provenance | | +| B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | B.cpp:19:10:19:11 | *b2 [*box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | provenance | | +| B.cpp:19:10:19:11 | *b2 [*box1, elem2] | B.cpp:19:14:19:17 | *box1 [elem2] | provenance | | +| B.cpp:19:14:19:17 | *box1 [elem2] | B.cpp:19:10:19:24 | elem2 | provenance | | +| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | provenance | | +| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | provenance | | +| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | *this [post update] [elem1] | provenance | | +| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | *this [post update] [elem2] | provenance | | +| B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:46:7:46:21 | *... = ... [elem1] | provenance | | +| B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:46:7:46:21 | *... = ... [elem2] | provenance | | +| B.cpp:46:7:46:21 | *... = ... [elem1] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | provenance | | +| B.cpp:46:7:46:21 | *... = ... [elem2] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | provenance | | +| C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | *c [s1] | provenance | | +| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | *c [s3] | provenance | | +| C.cpp:19:5:19:5 | *c [s1] | C.cpp:27:8:27:11 | *this [s1] | provenance | | +| C.cpp:19:5:19:5 | *c [s3] | C.cpp:27:8:27:11 | *this [s3] | provenance | | +| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | +| C.cpp:22:12:22:21 | new | C.cpp:22:3:22:3 | *this [post update] [s1] | provenance | | +| C.cpp:22:12:22:21 | new | C.cpp:22:12:22:21 | new | provenance | | +| C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | | +| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | *this [post update] [s3] | provenance | | +| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | provenance | | +| C.cpp:27:8:27:11 | *this [s1] | C.cpp:29:10:29:11 | *this [s1] | provenance | | +| C.cpp:27:8:27:11 | *this [s3] | C.cpp:31:10:31:11 | *this [s3] | provenance | | +| C.cpp:29:10:29:11 | *this [s1] | C.cpp:29:10:29:11 | s1 | provenance | | +| C.cpp:31:10:31:11 | *this [s3] | C.cpp:31:10:31:11 | s3 | provenance | | +| D.cpp:10:11:10:17 | *this [elem] | D.cpp:10:30:10:33 | *this [elem] | provenance | | +| D.cpp:10:30:10:33 | *this [elem] | D.cpp:10:30:10:33 | elem | provenance | | +| D.cpp:10:30:10:33 | elem | D.cpp:10:11:10:17 | *getElem | provenance | | +| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | provenance | | +| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | *this [post update] [elem] | provenance | | +| D.cpp:17:11:17:17 | *this [*box, elem] | D.cpp:17:30:17:32 | *this [*box, elem] | provenance | | +| D.cpp:17:30:17:32 | *box [elem] | D.cpp:17:11:17:17 | **getBox1 [elem] | provenance | | +| D.cpp:17:30:17:32 | *this [*box, elem] | D.cpp:17:30:17:32 | *box [elem] | provenance | | +| D.cpp:21:30:21:31 | *b2 [*box, elem] | D.cpp:22:10:22:11 | *b2 [*box, elem] | provenance | | +| D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:17:11:17:17 | *this [*box, elem] | provenance | | +| D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:22:14:22:20 | *call to getBox1 [elem] | provenance | | +| D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:10:11:10:17 | *this [elem] | provenance | | +| D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:22:10:22:33 | call to getElem | provenance | | +| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | provenance | | +| D.cpp:30:5:30:5 | *b [post update] [*box, elem] | D.cpp:31:14:31:14 | *b [*box, elem] | provenance | | +| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | *box [post update] [elem] | provenance | | +| D.cpp:30:8:30:10 | *box [post update] [elem] | D.cpp:30:5:30:5 | *b [post update] [*box, elem] | provenance | | +| D.cpp:31:14:31:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | +| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | provenance | | +| D.cpp:37:5:37:5 | *b [post update] [*box, elem] | D.cpp:38:14:38:14 | *b [*box, elem] | provenance | | +| D.cpp:37:8:37:10 | setElem output argument [elem] | D.cpp:37:5:37:5 | *b [post update] [*box, elem] | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | setElem output argument [elem] | provenance | | +| D.cpp:38:14:38:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | +| D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | provenance | | +| D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | D.cpp:45:14:45:14 | *b [*box, elem] | provenance | | +| D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | provenance | | +| D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | provenance | | +| D.cpp:45:14:45:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | +| D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | provenance | | +| D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | D.cpp:52:14:52:14 | *b [*box, elem] | provenance | | +| D.cpp:51:8:51:14 | setElem output argument [elem] | D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | provenance | | +| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | provenance | | +| D.cpp:51:27:51:27 | e | D.cpp:51:8:51:14 | setElem output argument [elem] | provenance | | +| D.cpp:52:14:52:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | +| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | provenance | | +| D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | provenance | | +| D.cpp:58:5:58:12 | *this [post update] [*boxfield, *box, elem] | D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | provenance | | +| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | *box [post update] [elem] | provenance | | +| D.cpp:58:15:58:17 | *box [post update] [elem] | D.cpp:58:5:58:12 | *boxfield [post update] [*box, elem] | provenance | | +| D.cpp:59:5:59:7 | *this [*boxfield, *box, elem] | D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | provenance | | +| D.cpp:63:8:63:10 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | provenance | | +| D.cpp:64:10:64:17 | *boxfield [*box, elem] | D.cpp:64:20:64:22 | *box [elem] | provenance | | +| D.cpp:64:10:64:17 | *this [*boxfield, *box, elem] | D.cpp:64:10:64:17 | *boxfield [*box, elem] | provenance | | +| D.cpp:64:20:64:22 | *box [elem] | D.cpp:64:10:64:28 | elem | provenance | | +| E.cpp:19:27:19:27 | *p [data, *buffer] | E.cpp:21:10:21:10 | *p [data, *buffer] | provenance | | +| E.cpp:21:10:21:10 | *p [data, *buffer] | E.cpp:21:13:21:16 | *data [*buffer] | provenance | | +| E.cpp:21:13:21:16 | *data [*buffer] | E.cpp:21:18:21:23 | *buffer | provenance | | +| E.cpp:28:21:28:23 | argument_source output argument | E.cpp:31:10:31:12 | *raw | provenance | | +| E.cpp:29:21:29:21 | *b [post update] [*buffer] | E.cpp:32:10:32:10 | *b [*buffer] | provenance | | +| E.cpp:29:21:29:29 | argument_source output argument | E.cpp:29:21:29:21 | *b [post update] [*buffer] | provenance | | +| E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | E.cpp:33:18:33:19 | *& ... [data, *buffer] | provenance | | +| E.cpp:30:21:30:33 | argument_source output argument | E.cpp:30:23:30:26 | *data [post update] [*buffer] | provenance | | +| E.cpp:30:23:30:26 | *data [post update] [*buffer] | E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | provenance | | +| E.cpp:32:10:32:10 | *b [*buffer] | E.cpp:32:13:32:18 | *buffer | provenance | | +| E.cpp:33:18:33:19 | *& ... [data, *buffer] | E.cpp:19:27:19:27 | *p [data, *buffer] | provenance | | +| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | provenance | | +| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | *s [post update] [m1] | provenance | | +| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | provenance | | +| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | provenance | | +| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | *s [post update] [m1] | provenance | | +| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | provenance | | +| aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | aliasing.cpp:29:8:29:9 | *s1 [m1] | provenance | | +| aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | aliasing.cpp:30:8:30:9 | *s2 [m1] | provenance | | +| aliasing.cpp:29:8:29:9 | *s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | provenance | | +| aliasing.cpp:30:8:30:9 | *s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | provenance | | +| aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | *copy2 [m1] | provenance | | +| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | *s2 [post update] [m1] | provenance | | +| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | provenance | | +| aliasing.cpp:62:8:62:12 | *copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | provenance | | +| aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | *w [s, m1] | provenance | | +| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | *s [post update] [m1] | provenance | | +| aliasing.cpp:92:5:92:5 | *s [post update] [m1] | aliasing.cpp:92:3:92:3 | *w [post update] [s, m1] | provenance | | +| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | provenance | | +| aliasing.cpp:93:8:93:8 | *w [s, m1] | aliasing.cpp:93:10:93:10 | *s [m1] | provenance | | +| aliasing.cpp:93:10:93:10 | *s [m1] | aliasing.cpp:93:12:93:13 | m1 | provenance | | +| aliasing.cpp:98:3:98:3 | *s [post update] [m1] | aliasing.cpp:101:14:101:19 | *s_copy [m1] | provenance | | +| aliasing.cpp:98:3:98:21 | ... = ... | aliasing.cpp:98:3:98:3 | *s [post update] [m1] | provenance | | +| aliasing.cpp:98:10:98:19 | call to user_input | aliasing.cpp:98:3:98:21 | ... = ... | provenance | | +| aliasing.cpp:101:13:101:22 | *& ... | aliasing.cpp:102:8:102:10 | * ... | provenance | | +| aliasing.cpp:101:14:101:19 | *s_copy [m1] | aliasing.cpp:101:13:101:22 | *& ... | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:105:23:105:24 | *pa | aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | provenance | | +| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | *pa | provenance | | +| aliasing.cpp:121:15:121:16 | taint_a_ptr output argument | aliasing.cpp:122:8:122:12 | access to array | provenance | | +| aliasing.cpp:126:15:126:20 | taint_a_ptr output argument | aliasing.cpp:127:8:127:16 | * ... | provenance | | +| aliasing.cpp:131:15:131:16 | taint_a_ptr output argument | aliasing.cpp:132:8:132:14 | * ... | provenance | | +| aliasing.cpp:136:15:136:17 | taint_a_ptr output argument | aliasing.cpp:137:8:137:11 | * ... | provenance | | +| aliasing.cpp:141:15:141:15 | *s [post update] [*data] | aliasing.cpp:143:8:143:8 | *s [*data] | provenance | | +| aliasing.cpp:141:17:141:20 | taint_a_ptr output argument | aliasing.cpp:141:15:141:15 | *s [post update] [*data] | provenance | | +| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:8:143:16 | access to array | provenance | | +| aliasing.cpp:143:8:143:8 | *s [*data] | aliasing.cpp:143:10:143:13 | *data | provenance | | +| aliasing.cpp:143:10:143:13 | *data | aliasing.cpp:143:8:143:16 | access to array | provenance | | +| aliasing.cpp:158:15:158:15 | *s [post update] [data] | aliasing.cpp:159:9:159:9 | *s [data] | provenance | | +| aliasing.cpp:158:15:158:20 | taint_a_ptr output argument | aliasing.cpp:158:15:158:15 | *s [post update] [data] | provenance | | +| aliasing.cpp:159:9:159:9 | *s [data] | aliasing.cpp:159:8:159:14 | * ... | provenance | | +| aliasing.cpp:164:15:164:15 | *s [post update] [data] | aliasing.cpp:165:8:165:8 | *s [data] | provenance | | +| aliasing.cpp:164:15:164:20 | taint_a_ptr output argument | aliasing.cpp:164:15:164:15 | *s [post update] [data] | provenance | | +| aliasing.cpp:165:8:165:8 | *s [data] | aliasing.cpp:165:8:165:16 | access to array | provenance | | +| aliasing.cpp:175:15:175:22 | taint_a_ptr output argument | aliasing.cpp:175:19:175:19 | *s [post update] [m1] | provenance | | +| aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | *s2 [s, m1] | provenance | | +| aliasing.cpp:175:19:175:19 | *s [post update] [m1] | aliasing.cpp:175:16:175:17 | *s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:176:8:176:9 | *s2 [s, m1] | aliasing.cpp:176:11:176:11 | *s [m1] | provenance | | +| aliasing.cpp:176:11:176:11 | *s [m1] | aliasing.cpp:176:13:176:14 | m1 | provenance | | +| aliasing.cpp:187:15:187:22 | taint_a_ptr output argument | aliasing.cpp:187:19:187:19 | *s [post update] [m1] | provenance | | +| aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | provenance | | +| aliasing.cpp:187:19:187:19 | *s [post update] [m1] | aliasing.cpp:187:16:187:17 | *s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:189:8:189:11 | *s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | *s [m1] | provenance | | +| aliasing.cpp:189:13:189:13 | *s [m1] | aliasing.cpp:189:15:189:16 | m1 | provenance | | +| aliasing.cpp:200:15:200:24 | taint_a_ptr output argument | aliasing.cpp:200:21:200:21 | *s [post update] [m1] | provenance | | +| aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | provenance | | +| aliasing.cpp:200:21:200:21 | *s [post update] [m1] | aliasing.cpp:200:16:200:18 | *ps2 [post update] [s, m1] | provenance | | +| aliasing.cpp:201:8:201:10 | *ps2 [s, m1] | aliasing.cpp:201:13:201:13 | *s [m1] | provenance | | +| aliasing.cpp:201:13:201:13 | *s [m1] | aliasing.cpp:201:15:201:16 | m1 | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | provenance | | +| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | *o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | *o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:17 | *access to array [post update] [data] | arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | provenance | | +| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | *access to array [post update] [data] | provenance | | +| arrays.cpp:36:5:36:10 | *nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | *o [post update] [nested, arr, data] | provenance | | +| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | provenance | | +| arrays.cpp:37:8:37:8 | *o [nested, arr, data] | arrays.cpp:37:10:37:15 | *nested [arr, data] | provenance | | +| arrays.cpp:37:8:37:22 | *access to array [data] | arrays.cpp:37:24:37:27 | data | provenance | | +| arrays.cpp:37:10:37:15 | *nested [arr, data] | arrays.cpp:37:8:37:22 | *access to array [data] | provenance | | +| arrays.cpp:38:8:38:8 | *o [nested, arr, data] | arrays.cpp:38:10:38:15 | *nested [arr, data] | provenance | | +| arrays.cpp:38:8:38:22 | *access to array [data] | arrays.cpp:38:24:38:27 | data | provenance | | +| arrays.cpp:38:10:38:15 | *nested [arr, data] | arrays.cpp:38:8:38:22 | *access to array [data] | provenance | | +| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:20 | *access to array [post update] [data] | arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | provenance | | +| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | *access to array [post update] [data] | provenance | | +| arrays.cpp:42:5:42:12 | *indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | *o [post update] [*indirect, arr, data] | provenance | | +| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | provenance | | +| arrays.cpp:43:8:43:8 | *o [*indirect, arr, data] | arrays.cpp:43:10:43:17 | *indirect [arr, data] | provenance | | +| arrays.cpp:43:8:43:25 | *access to array [data] | arrays.cpp:43:27:43:30 | data | provenance | | +| arrays.cpp:43:10:43:17 | *indirect [arr, data] | arrays.cpp:43:8:43:25 | *access to array [data] | provenance | | +| arrays.cpp:44:8:44:8 | *o [*indirect, arr, data] | arrays.cpp:44:10:44:17 | *indirect [arr, data] | provenance | | +| arrays.cpp:44:8:44:25 | *access to array [data] | arrays.cpp:44:27:44:30 | data | provenance | | +| arrays.cpp:44:10:44:17 | *indirect [arr, data] | arrays.cpp:44:8:44:25 | *access to array [data] | provenance | | +| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | provenance | | +| arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | provenance | | +| arrays.cpp:48:3:48:20 | *access to array [post update] [data] | arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | provenance | | +| arrays.cpp:48:3:48:40 | ... = ... | arrays.cpp:48:3:48:20 | *access to array [post update] [data] | provenance | | +| arrays.cpp:48:5:48:12 | *indirect [post update] [*ptr, data] | arrays.cpp:48:3:48:3 | *o [post update] [*indirect, *ptr, data] | provenance | | +| arrays.cpp:48:29:48:38 | call to user_input | arrays.cpp:48:3:48:40 | ... = ... | provenance | | +| arrays.cpp:49:8:49:8 | *o [*indirect, *ptr, data] | arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | provenance | | +| arrays.cpp:49:8:49:25 | *access to array [data] | arrays.cpp:49:27:49:30 | data | provenance | | +| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:8:49:25 | *access to array [data] | provenance | | +| arrays.cpp:49:10:49:17 | *indirect [*ptr, data] | arrays.cpp:49:20:49:22 | *ptr [data] | provenance | | +| arrays.cpp:49:20:49:22 | *ptr [data] | arrays.cpp:49:8:49:25 | *access to array [data] | provenance | | +| arrays.cpp:50:8:50:8 | *o [*indirect, *ptr, data] | arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | provenance | | +| arrays.cpp:50:8:50:25 | *access to array [data] | arrays.cpp:50:27:50:30 | data | provenance | | +| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:8:50:25 | *access to array [data] | provenance | | +| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:20:50:22 | *ptr [data] | provenance | | +| arrays.cpp:50:20:50:22 | *ptr [data] | arrays.cpp:50:8:50:25 | *access to array [data] | provenance | | +| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | provenance | | +| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | *s [post update] [a] | provenance | | +| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | provenance | | +| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | *this [post update] [a] | provenance | | +| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | provenance | | +| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | provenance | | +| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | provenance | | +| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | provenance | | +| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | provenance | | +| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | provenance | | +| by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:32:12:32:12 | *s [a] | provenance | | +| by_reference.cpp:32:12:32:12 | *s [a] | by_reference.cpp:32:15:32:15 | a | provenance | | +| by_reference.cpp:32:15:32:15 | a | by_reference.cpp:31:16:31:28 | *nonMemberGetA | provenance | | +| by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:36:12:36:15 | *this [a] | provenance | | +| by_reference.cpp:36:12:36:15 | *this [a] | by_reference.cpp:36:18:36:18 | a | provenance | | +| by_reference.cpp:36:18:36:18 | a | by_reference.cpp:35:9:35:19 | *getDirectly | provenance | | +| by_reference.cpp:39:9:39:21 | *this [a] | by_reference.cpp:40:12:40:15 | *this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:35:9:35:19 | *this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | provenance | | +| by_reference.cpp:40:18:40:28 | call to getDirectly | by_reference.cpp:39:9:39:21 | *getIndirectly | provenance | | +| by_reference.cpp:43:9:43:27 | *this [a] | by_reference.cpp:44:26:44:29 | *this [a] | provenance | | +| by_reference.cpp:44:12:44:24 | call to nonMemberGetA | by_reference.cpp:43:9:43:27 | *getThroughNonMember | provenance | | +| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:31:46:31:46 | *s [a] | provenance | | +| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | provenance | | +| by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | by_reference.cpp:51:8:51:8 | *s [a] | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | provenance | | +| by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:35:9:35:19 | *this [a] | provenance | | +| by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | provenance | | +| by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | by_reference.cpp:57:8:57:8 | *s [a] | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | provenance | | +| by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:39:9:39:21 | *this [a] | provenance | | +| by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | provenance | | +| by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | by_reference.cpp:63:8:63:8 | *s [a] | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | provenance | | +| by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:43:9:43:27 | *this [a] | provenance | | +| by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | provenance | | +| by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | by_reference.cpp:69:22:69:23 | *& ... [a] | provenance | | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | provenance | | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | provenance | | +| by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:31:46:31:46 | *s [a] | provenance | | +| by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | *inner [post update] [a] | provenance | | +| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | *inner [post update] [a] | provenance | | +| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | provenance | | +| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | provenance | | +| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | provenance | | +| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | *pa | provenance | | +| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:124:15:124:21 | taint_a_ref output argument | provenance | | +| by_reference.cpp:95:25:95:26 | *pa | by_reference.cpp:128:15:128:23 | taint_a_ref output argument | provenance | | +| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | *pa | provenance | | +| by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:102:22:102:26 | *outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | provenance | | +| by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | provenance | | +| by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | by_reference.cpp:103:21:103:25 | *outer [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | by_reference.cpp:104:16:104:20 | *outer [post update] [a] | provenance | | +| by_reference.cpp:104:16:104:20 | *outer [post update] [a] | by_reference.cpp:112:8:112:12 | *outer [a] | provenance | | +| by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:106:22:106:27 | *pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | provenance | | +| by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | provenance | | +| by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | by_reference.cpp:107:21:107:26 | *pouter [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:108:15:108:24 | taint_a_ptr output argument | by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | provenance | | +| by_reference.cpp:108:16:108:21 | *pouter [post update] [a] | by_reference.cpp:116:8:116:13 | *pouter [a] | provenance | | +| by_reference.cpp:110:8:110:12 | *outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | *inner_nested [a] | provenance | | +| by_reference.cpp:110:14:110:25 | *inner_nested [a] | by_reference.cpp:110:27:110:27 | a | provenance | | +| by_reference.cpp:111:8:111:12 | *outer [*inner_ptr, a] | by_reference.cpp:111:14:111:22 | *inner_ptr [a] | provenance | | +| by_reference.cpp:111:14:111:22 | *inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | provenance | | +| by_reference.cpp:112:8:112:12 | *outer [a] | by_reference.cpp:112:14:112:14 | a | provenance | | +| by_reference.cpp:114:8:114:13 | *pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | *inner_nested [a] | provenance | | +| by_reference.cpp:114:16:114:27 | *inner_nested [a] | by_reference.cpp:114:29:114:29 | a | provenance | | +| by_reference.cpp:115:8:115:13 | *pouter [*inner_ptr, a] | by_reference.cpp:115:16:115:24 | *inner_ptr [a] | provenance | | +| by_reference.cpp:115:16:115:24 | *inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | provenance | | +| by_reference.cpp:116:8:116:13 | *pouter [a] | by_reference.cpp:116:16:116:16 | a | provenance | | +| by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | provenance | | +| by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:122:21:122:25 | *outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:123:22:123:26 | *outer [post update] [*inner_ptr, a] | by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | provenance | | +| by_reference.cpp:124:15:124:19 | *outer [post update] [a] | by_reference.cpp:132:8:132:12 | *outer [a] | provenance | | +| by_reference.cpp:124:15:124:21 | taint_a_ref output argument | by_reference.cpp:124:15:124:19 | *outer [post update] [a] | provenance | | +| by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | provenance | | +| by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | by_reference.cpp:126:21:126:26 | *pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | provenance | | +| by_reference.cpp:127:22:127:27 | *pouter [post update] [*inner_ptr, a] | by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | provenance | | +| by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | by_reference.cpp:136:8:136:13 | *pouter [a] | provenance | | +| by_reference.cpp:128:15:128:23 | taint_a_ref output argument | by_reference.cpp:128:15:128:20 | *pouter [post update] [a] | provenance | | +| by_reference.cpp:130:8:130:12 | *outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | *inner_nested [a] | provenance | | +| by_reference.cpp:130:14:130:25 | *inner_nested [a] | by_reference.cpp:130:27:130:27 | a | provenance | | +| by_reference.cpp:131:8:131:12 | *outer [*inner_ptr, a] | by_reference.cpp:131:14:131:22 | *inner_ptr [a] | provenance | | +| by_reference.cpp:131:14:131:22 | *inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | provenance | | +| by_reference.cpp:132:8:132:12 | *outer [a] | by_reference.cpp:132:14:132:14 | a | provenance | | +| by_reference.cpp:134:8:134:13 | *pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | *inner_nested [a] | provenance | | +| by_reference.cpp:134:16:134:27 | *inner_nested [a] | by_reference.cpp:134:29:134:29 | a | provenance | | +| by_reference.cpp:135:8:135:13 | *pouter [*inner_ptr, a] | by_reference.cpp:135:16:135:24 | *inner_ptr [a] | provenance | | +| by_reference.cpp:135:16:135:24 | *inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | provenance | | +| by_reference.cpp:136:8:136:13 | *pouter [a] | by_reference.cpp:136:16:136:16 | a | provenance | | +| clearning.cpp:32:3:32:25 | ... = ... | clearning.cpp:32:4:32:4 | *s [post update] [*x] | provenance | | +| clearning.cpp:32:4:32:4 | *s [post update] [*x] | clearning.cpp:33:5:33:5 | *s [*x] | provenance | | +| clearning.cpp:32:10:32:19 | call to user_input | clearning.cpp:32:3:32:25 | ... = ... | provenance | | +| clearning.cpp:33:5:33:5 | *s [*x] | clearning.cpp:34:9:34:9 | *s [*x] | provenance | | +| clearning.cpp:34:9:34:9 | *s [*x] | clearning.cpp:34:8:34:11 | * ... | provenance | | +| clearning.cpp:53:3:53:25 | ... = ... | clearning.cpp:53:4:53:4 | *s [post update] [*x] | provenance | | +| clearning.cpp:53:4:53:4 | *s [post update] [*x] | clearning.cpp:54:3:54:3 | *s [*x] | provenance | | +| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:3:53:25 | ... = ... | provenance | | +| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:3:54:7 | *... ++ | provenance | | +| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:54:5:54:5 | *x | provenance | | +| clearning.cpp:54:3:54:3 | *s [*x] | clearning.cpp:55:8:55:8 | *s [*x] | provenance | | +| clearning.cpp:54:3:54:3 | *s [post update] [*x] | clearning.cpp:55:8:55:8 | *s [*x] | provenance | | +| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:3 | *s [post update] [*x] | provenance | | +| clearning.cpp:54:3:54:7 | *... ++ | clearning.cpp:54:3:54:7 | *... ++ | provenance | | +| clearning.cpp:54:5:54:5 | *x | clearning.cpp:54:3:54:7 | *... ++ | provenance | | +| clearning.cpp:55:8:55:8 | *s [*x] | clearning.cpp:55:10:55:10 | *x | provenance | | +| clearning.cpp:60:3:60:22 | ... = ... | clearning.cpp:60:5:60:5 | *s [post update] [**x] | provenance | | +| clearning.cpp:60:5:60:5 | *s [post update] [**x] | clearning.cpp:61:3:61:3 | *s [**x] | provenance | | +| clearning.cpp:60:11:60:20 | call to user_input | clearning.cpp:60:3:60:22 | ... = ... | provenance | | +| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:3:61:7 | **... ++ | provenance | | +| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:61:5:61:5 | **x | provenance | | +| clearning.cpp:61:3:61:3 | *s [**x] | clearning.cpp:62:8:62:8 | *s [**x] | provenance | | +| clearning.cpp:61:3:61:3 | *s [post update] [**x] | clearning.cpp:62:8:62:8 | *s [**x] | provenance | | +| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:3 | *s [post update] [**x] | provenance | | +| clearning.cpp:61:3:61:7 | **... ++ | clearning.cpp:61:3:61:7 | **... ++ | provenance | | +| clearning.cpp:61:5:61:5 | **x | clearning.cpp:61:3:61:7 | **... ++ | provenance | | +| clearning.cpp:62:8:62:8 | *s [**x] | clearning.cpp:62:10:62:10 | **x | provenance | | +| clearning.cpp:74:18:74:18 | *s [post update] [*val] | clearning.cpp:76:8:76:8 | *s [*val] | provenance | | +| clearning.cpp:74:20:74:22 | argument_source output argument | clearning.cpp:74:18:74:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:76:8:76:8 | *s [*val] | clearning.cpp:76:7:76:12 | * ... | provenance | | +| clearning.cpp:81:18:81:18 | *s [post update] [*val] | clearning.cpp:83:13:83:13 | *s [*val] | provenance | | +| clearning.cpp:81:20:81:22 | argument_source output argument | clearning.cpp:81:18:81:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:83:5:83:5 | *s [post update] [*val] | clearning.cpp:84:8:84:8 | *s [*val] | provenance | | +| clearning.cpp:83:5:83:21 | *... = ... | clearning.cpp:83:5:83:5 | *s [post update] [*val] | provenance | | +| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:13:83:21 | *... + ... | provenance | | +| clearning.cpp:83:13:83:13 | *s [*val] | clearning.cpp:83:15:83:17 | *val | provenance | | +| clearning.cpp:83:13:83:21 | *... + ... | clearning.cpp:83:5:83:21 | *... = ... | provenance | | +| clearning.cpp:83:15:83:17 | *val | clearning.cpp:83:5:83:21 | *... = ... | provenance | | +| clearning.cpp:84:8:84:8 | *s [*val] | clearning.cpp:84:7:84:12 | * ... | provenance | | +| clearning.cpp:89:18:89:18 | *s [post update] [*val] | clearning.cpp:90:3:90:3 | *s [*val] | provenance | | +| clearning.cpp:89:20:89:22 | argument_source output argument | clearning.cpp:89:18:89:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:3:90:9 | *... ++ | provenance | | +| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:90:5:90:7 | **val | provenance | | +| clearning.cpp:90:3:90:3 | *s [*val] | clearning.cpp:91:8:91:8 | *s [*val] | provenance | | +| clearning.cpp:90:3:90:3 | *s [post update] [*val] | clearning.cpp:91:8:91:8 | *s [*val] | provenance | | +| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:3 | *s [post update] [*val] | provenance | | +| clearning.cpp:90:3:90:9 | *... ++ | clearning.cpp:90:3:90:9 | *... ++ | provenance | | +| clearning.cpp:90:5:90:7 | **val | clearning.cpp:90:3:90:9 | *... ++ | provenance | | +| clearning.cpp:91:8:91:8 | *s [*val] | clearning.cpp:91:7:91:12 | * ... | provenance | | +| clearning.cpp:96:18:96:18 | *s [post update] [*val] | clearning.cpp:97:10:97:10 | *s [*val] | provenance | | +| clearning.cpp:96:20:96:22 | argument_source output argument | clearning.cpp:96:18:96:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:97:2:97:2 | *s [post update] [*val] | clearning.cpp:98:8:98:8 | *s [*val] | provenance | | +| clearning.cpp:97:2:97:18 | *... = ... | clearning.cpp:97:2:97:2 | *s [post update] [*val] | provenance | | +| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:10:97:18 | *... + ... | provenance | | +| clearning.cpp:97:10:97:10 | *s [*val] | clearning.cpp:97:12:97:14 | *val | provenance | | +| clearning.cpp:97:10:97:18 | *... + ... | clearning.cpp:97:2:97:18 | *... = ... | provenance | | +| clearning.cpp:97:12:97:14 | *val | clearning.cpp:97:2:97:18 | *... = ... | provenance | | +| clearning.cpp:98:8:98:8 | *s [*val] | clearning.cpp:98:7:98:12 | * ... | provenance | | +| clearning.cpp:103:18:103:18 | *s [post update] [*val] | clearning.cpp:104:2:104:2 | *s [*val] | provenance | | +| clearning.cpp:103:20:103:22 | argument_source output argument | clearning.cpp:103:18:103:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:2:104:8 | *... ++ | provenance | | +| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:104:4:104:6 | *val | provenance | | +| clearning.cpp:104:2:104:2 | *s [*val] | clearning.cpp:105:8:105:8 | *s [*val] | provenance | | +| clearning.cpp:104:2:104:2 | *s [post update] [*val] | clearning.cpp:105:8:105:8 | *s [*val] | provenance | | +| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:2 | *s [post update] [*val] | provenance | | +| clearning.cpp:104:2:104:8 | *... ++ | clearning.cpp:104:2:104:8 | *... ++ | provenance | | +| clearning.cpp:104:4:104:6 | *val | clearning.cpp:104:2:104:8 | *... ++ | provenance | | +| clearning.cpp:105:8:105:8 | *s [*val] | clearning.cpp:105:7:105:12 | * ... | provenance | | +| clearning.cpp:110:18:110:18 | *s [post update] [*val] | clearning.cpp:111:4:111:4 | *s [*val] | provenance | | +| clearning.cpp:110:20:110:22 | argument_source output argument | clearning.cpp:110:18:110:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:2:111:8 | *++ ... | provenance | | +| clearning.cpp:111:2:111:8 | *++ ... | clearning.cpp:111:4:111:4 | *s [post update] [*val] | provenance | | +| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:2:111:8 | *++ ... | provenance | | +| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:111:6:111:8 | *val | provenance | | +| clearning.cpp:111:4:111:4 | *s [*val] | clearning.cpp:112:8:112:8 | *s [*val] | provenance | | +| clearning.cpp:111:4:111:4 | *s [post update] [*val] | clearning.cpp:112:8:112:8 | *s [*val] | provenance | | +| clearning.cpp:111:6:111:8 | *val | clearning.cpp:111:2:111:8 | *++ ... | provenance | | +| clearning.cpp:112:8:112:8 | *s [*val] | clearning.cpp:112:7:112:12 | * ... | provenance | | +| clearning.cpp:117:18:117:18 | *s [post update] [*val] | clearning.cpp:118:2:118:2 | *s [*val] | provenance | | +| clearning.cpp:117:20:117:22 | argument_source output argument | clearning.cpp:117:18:117:18 | *s [post update] [*val] | provenance | | +| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:2:118:11 | *... += ... | provenance | | +| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:118:4:118:6 | *val | provenance | | +| clearning.cpp:118:2:118:2 | *s [*val] | clearning.cpp:119:8:119:8 | *s [*val] | provenance | | +| clearning.cpp:118:2:118:2 | *s [post update] [*val] | clearning.cpp:119:8:119:8 | *s [*val] | provenance | | +| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:2 | *s [post update] [*val] | provenance | | +| clearning.cpp:118:2:118:11 | *... += ... | clearning.cpp:118:2:118:11 | *... += ... | provenance | | +| clearning.cpp:118:4:118:6 | *val | clearning.cpp:118:2:118:11 | *... += ... | provenance | | +| clearning.cpp:119:8:119:8 | *s [*val] | clearning.cpp:119:7:119:12 | * ... | provenance | | +| clearning.cpp:151:3:151:3 | *s [post update] [val] | clearning.cpp:152:8:152:8 | *s [val] | provenance | | +| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | *s [post update] [val] | provenance | | +| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | provenance | | +| clearning.cpp:152:8:152:8 | *s [val] | clearning.cpp:152:10:152:12 | val | provenance | | +| complex.cpp:9:7:9:7 | *this [a_] | complex.cpp:9:20:9:21 | *this [a_] | provenance | | +| complex.cpp:9:20:9:21 | *this [a_] | complex.cpp:9:20:9:21 | a_ | provenance | | +| complex.cpp:9:20:9:21 | a_ | complex.cpp:9:7:9:7 | *a | provenance | | +| complex.cpp:10:7:10:7 | *this [b_] | complex.cpp:10:20:10:21 | *this [b_] | provenance | | +| complex.cpp:10:20:10:21 | *this [b_] | complex.cpp:10:20:10:21 | b_ | provenance | | +| complex.cpp:10:20:10:21 | b_ | complex.cpp:10:7:10:7 | *b | provenance | | +| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | provenance | | +| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | *this [post update] [a_] | provenance | | +| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | provenance | | +| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | *this [post update] [b_] | provenance | | +| complex.cpp:40:17:40:17 | *b [inner, f, a_] | complex.cpp:42:8:42:8 | *b [inner, f, a_] | provenance | | +| complex.cpp:40:17:40:17 | *b [inner, f, b_] | complex.cpp:43:8:43:8 | *b [inner, f, b_] | provenance | | +| complex.cpp:42:8:42:8 | *b [inner, f, a_] | complex.cpp:42:10:42:14 | *inner [f, a_] | provenance | | +| complex.cpp:42:10:42:14 | *inner [f, a_] | complex.cpp:42:16:42:16 | *f [a_] | provenance | | +| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:9:7:9:7 | *this [a_] | provenance | | +| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:42:18:42:18 | call to a | provenance | | +| complex.cpp:43:8:43:8 | *b [inner, f, b_] | complex.cpp:43:10:43:14 | *inner [f, b_] | provenance | | +| complex.cpp:43:10:43:14 | *inner [f, b_] | complex.cpp:43:16:43:16 | *f [b_] | provenance | | +| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:10:7:10:7 | *this [b_] | provenance | | +| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:43:18:43:18 | call to b | provenance | | +| complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | provenance | | +| complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | complex.cpp:53:3:53:4 | *b1 [post update] [inner, f, a_] | provenance | | +| complex.cpp:53:12:53:12 | setA output argument [a_] | complex.cpp:53:6:53:10 | *inner [post update] [f, a_] | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | setA output argument [a_] | provenance | | +| complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | provenance | | +| complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | complex.cpp:54:3:54:4 | *b2 [post update] [inner, f, b_] | provenance | | +| complex.cpp:54:12:54:12 | setB output argument [b_] | complex.cpp:54:6:54:10 | *inner [post update] [f, b_] | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | setB output argument [b_] | provenance | | +| complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | provenance | | +| complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | complex.cpp:55:3:55:4 | *b3 [post update] [inner, f, a_] | provenance | | +| complex.cpp:55:12:55:12 | setA output argument [a_] | complex.cpp:55:6:55:10 | *inner [post update] [f, a_] | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | setA output argument [a_] | provenance | | +| complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | provenance | | +| complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | complex.cpp:56:3:56:4 | *b3 [post update] [inner, f, b_] | provenance | | +| complex.cpp:56:12:56:12 | setB output argument [b_] | complex.cpp:56:6:56:10 | *inner [post update] [f, b_] | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | setB output argument [b_] | provenance | | +| complex.cpp:59:7:59:8 | *b1 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | provenance | | +| complex.cpp:62:7:62:8 | *b2 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | provenance | | +| complex.cpp:65:7:65:8 | *b3 [inner, f, a_] | complex.cpp:40:17:40:17 | *b [inner, f, a_] | provenance | | +| complex.cpp:65:7:65:8 | *b3 [inner, f, b_] | complex.cpp:40:17:40:17 | *b [inner, f, b_] | provenance | | +| conflated.cpp:10:3:10:22 | ... = ... | conflated.cpp:10:4:10:5 | *ra [post update] [*p] | provenance | | +| conflated.cpp:10:4:10:5 | *ra [post update] [*p] | conflated.cpp:11:9:11:10 | *ra [*p] | provenance | | +| conflated.cpp:10:11:10:20 | call to user_input | conflated.cpp:10:3:10:22 | ... = ... | provenance | | +| conflated.cpp:11:9:11:10 | *ra [*p] | conflated.cpp:11:8:11:12 | * ... | provenance | | +| conflated.cpp:19:19:19:21 | argument_source output argument | conflated.cpp:20:8:20:10 | *raw | provenance | | +| conflated.cpp:29:3:29:4 | *pa [post update] [x] | conflated.cpp:30:8:30:9 | *pa [x] | provenance | | +| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | *pa [post update] [x] | provenance | | +| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | provenance | | +| conflated.cpp:30:8:30:9 | *pa [x] | conflated.cpp:30:12:30:12 | x | provenance | | +| conflated.cpp:36:3:36:4 | *pa [post update] [x] | conflated.cpp:37:8:37:9 | *pa [x] | provenance | | +| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | *pa [post update] [x] | provenance | | +| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | provenance | | +| conflated.cpp:37:8:37:9 | *pa [x] | conflated.cpp:37:12:37:12 | x | provenance | | +| conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | conflated.cpp:55:8:55:9 | *ll [*next, y] | provenance | | +| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | *next [post update] [y] | provenance | | +| conflated.cpp:54:7:54:10 | *next [post update] [y] | conflated.cpp:54:3:54:4 | *ll [post update] [*next, y] | provenance | | +| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | provenance | | +| conflated.cpp:55:8:55:9 | *ll [*next, y] | conflated.cpp:55:12:55:15 | *next [y] | provenance | | +| conflated.cpp:55:12:55:15 | *next [y] | conflated.cpp:55:18:55:18 | y | provenance | | +| conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | conflated.cpp:61:8:61:9 | *ll [*next, y] | provenance | | +| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | *next [post update] [y] | provenance | | +| conflated.cpp:60:7:60:10 | *next [post update] [y] | conflated.cpp:60:3:60:4 | *ll [post update] [*next, y] | provenance | | +| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | provenance | | +| conflated.cpp:61:8:61:9 | *ll [*next, y] | conflated.cpp:61:12:61:15 | *next [y] | provenance | | +| conflated.cpp:61:12:61:15 | *next [y] | conflated.cpp:61:18:61:18 | y | provenance | | +| constructors.cpp:18:9:18:9 | *this [a_] | constructors.cpp:18:22:18:23 | *this [a_] | provenance | | +| constructors.cpp:18:22:18:23 | *this [a_] | constructors.cpp:18:22:18:23 | a_ | provenance | | +| constructors.cpp:18:22:18:23 | a_ | constructors.cpp:18:9:18:9 | *a | provenance | | +| constructors.cpp:19:9:19:9 | *this [b_] | constructors.cpp:19:22:19:23 | *this [b_] | provenance | | +| constructors.cpp:19:22:19:23 | *this [b_] | constructors.cpp:19:22:19:23 | b_ | provenance | | +| constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:9:19:9 | *b | provenance | | +| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | provenance | | +| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | provenance | | +| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | provenance | | +| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:5:23:7 | *this [post update] [b_] | provenance | | +| constructors.cpp:26:15:26:15 | *f [a_] | constructors.cpp:28:10:28:10 | *f [a_] | provenance | | +| constructors.cpp:26:15:26:15 | *f [b_] | constructors.cpp:29:10:29:10 | *f [b_] | provenance | | +| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:18:9:18:9 | *this [a_] | provenance | | +| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:28:12:28:12 | call to a | provenance | | +| constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:19:9:19:9 | *this [b_] | provenance | | +| constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:29:12:29:12 | call to b | provenance | | +| constructors.cpp:34:9:34:9 | call to Foo [a_] | constructors.cpp:40:9:40:9 | *f [a_] | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:34:9:34:9 | call to Foo [a_] | provenance | | +| constructors.cpp:35:9:35:9 | call to Foo [b_] | constructors.cpp:43:9:43:9 | *g [b_] | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:35:9:35:9 | call to Foo [b_] | provenance | | +| constructors.cpp:36:9:36:9 | call to Foo [a_] | constructors.cpp:46:9:46:9 | *h [a_] | provenance | | +| constructors.cpp:36:9:36:9 | call to Foo [b_] | constructors.cpp:46:9:46:9 | *h [b_] | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:36:9:36:9 | call to Foo [a_] | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:36:9:36:9 | call to Foo [b_] | provenance | | +| constructors.cpp:40:9:40:9 | *f [a_] | constructors.cpp:26:15:26:15 | *f [a_] | provenance | | +| constructors.cpp:43:9:43:9 | *g [b_] | constructors.cpp:26:15:26:15 | *f [b_] | provenance | | +| constructors.cpp:46:9:46:9 | *h [a_] | constructors.cpp:26:15:26:15 | *f [a_] | provenance | | +| constructors.cpp:46:9:46:9 | *h [b_] | constructors.cpp:26:15:26:15 | *f [b_] | provenance | | +| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | provenance | | +| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | *this [post update] [a] | provenance | | +| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | provenance | | +| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | provenance | | +| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | provenance | | +| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | provenance | | +| qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | provenance | | +| qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | provenance | | +| qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | provenance | | +| qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | qualifiers.cpp:23:16:23:20 | *inner [a] | provenance | | +| qualifiers.cpp:23:16:23:20 | *inner [a] | qualifiers.cpp:23:23:23:23 | a | provenance | | +| qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | provenance | | +| qualifiers.cpp:27:11:27:18 | setA output argument [a] | qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | provenance | | +| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | setA output argument [a] | provenance | | +| qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | qualifiers.cpp:28:16:28:20 | *inner [a] | provenance | | +| qualifiers.cpp:28:16:28:20 | *inner [a] | qualifiers.cpp:28:23:28:23 | a | provenance | | +| qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | provenance | | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | provenance | | +| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | provenance | | +| qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | qualifiers.cpp:33:16:33:20 | *inner [a] | provenance | | +| qualifiers.cpp:33:16:33:20 | *inner [a] | qualifiers.cpp:33:23:33:23 | a | provenance | | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | provenance | | +| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | provenance | | +| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | provenance | | +| qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | qualifiers.cpp:38:16:38:20 | *inner [a] | provenance | | +| qualifiers.cpp:38:16:38:20 | *inner [a] | qualifiers.cpp:38:23:38:23 | a | provenance | | +| qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | provenance | | +| qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | provenance | | +| qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | provenance | | +| qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | qualifiers.cpp:43:16:43:20 | *inner [a] | provenance | | +| qualifiers.cpp:43:16:43:20 | *inner [a] | qualifiers.cpp:43:23:43:23 | a | provenance | | +| qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | provenance | | +| qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | provenance | | +| qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | provenance | | +| qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | qualifiers.cpp:48:16:48:20 | *inner [a] | provenance | | +| qualifiers.cpp:48:16:48:20 | *inner [a] | qualifiers.cpp:48:23:48:23 | a | provenance | | +| realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | *foo [post update] [bar, *baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | provenance | | +| realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | *access to array [post update] [*baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:25:53:33 | *userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | *baz [post update] [userInput, bufferLen] | provenance | | +| realistic.cpp:53:47:53:66 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | provenance | | +| realistic.cpp:61:21:61:23 | *foo [bar, *baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:30 | *access to array [*baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | provenance | | +| realistic.cpp:61:32:61:34 | *baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | *userInput [bufferLen] | provenance | | +| realistic.cpp:61:37:61:45 | *userInput [bufferLen] | realistic.cpp:61:14:61:55 | bufferLen | provenance | | +| simple.cpp:18:9:18:9 | *this [a_] | simple.cpp:18:22:18:23 | *this [a_] | provenance | | +| simple.cpp:18:22:18:23 | *this [a_] | simple.cpp:18:22:18:23 | a_ | provenance | | +| simple.cpp:18:22:18:23 | a_ | simple.cpp:18:9:18:9 | *a | provenance | | +| simple.cpp:19:9:19:9 | *this [b_] | simple.cpp:19:22:19:23 | *this [b_] | provenance | | +| simple.cpp:19:22:19:23 | *this [b_] | simple.cpp:19:22:19:23 | b_ | provenance | | +| simple.cpp:19:22:19:23 | b_ | simple.cpp:19:9:19:9 | *b | provenance | | +| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | provenance | | +| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | *this [post update] [a_] | provenance | | +| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | provenance | | +| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | *this [post update] [b_] | provenance | | +| simple.cpp:26:15:26:15 | *f [a_] | simple.cpp:28:10:28:10 | *f [a_] | provenance | | +| simple.cpp:26:15:26:15 | *f [b_] | simple.cpp:29:10:29:10 | *f [b_] | provenance | | +| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:18:9:18:9 | *this [a_] | provenance | | +| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:28:12:28:12 | call to a | provenance | | +| simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:19:9:19:9 | *this [b_] | provenance | | +| simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:29:12:29:12 | call to b | provenance | | +| simple.cpp:39:5:39:5 | setA output argument [a_] | simple.cpp:45:9:45:9 | *f [a_] | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | setA output argument [a_] | provenance | | +| simple.cpp:40:5:40:5 | setB output argument [b_] | simple.cpp:48:9:48:9 | *g [b_] | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | setB output argument [b_] | provenance | | +| simple.cpp:41:5:41:5 | setA output argument [a_] | simple.cpp:51:9:51:9 | *h [a_] | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | setA output argument [a_] | provenance | | +| simple.cpp:42:5:42:5 | setB output argument [b_] | simple.cpp:51:9:51:9 | *h [b_] | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | setB output argument [b_] | provenance | | +| simple.cpp:45:9:45:9 | *f [a_] | simple.cpp:26:15:26:15 | *f [a_] | provenance | | +| simple.cpp:48:9:48:9 | *g [b_] | simple.cpp:26:15:26:15 | *f [b_] | provenance | | +| simple.cpp:51:9:51:9 | *h [a_] | simple.cpp:26:15:26:15 | *f [a_] | provenance | | +| simple.cpp:51:9:51:9 | *h [b_] | simple.cpp:26:15:26:15 | *f [b_] | provenance | | +| simple.cpp:65:5:65:5 | *a [post update] [i] | simple.cpp:67:10:67:11 | *a2 [i] | provenance | | +| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | *a [post update] [i] | provenance | | +| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | provenance | | +| simple.cpp:67:10:67:11 | *a2 [i] | simple.cpp:67:13:67:13 | i | provenance | | +| simple.cpp:78:9:78:15 | *this [f2, f1] | simple.cpp:79:16:79:17 | *this [f2, f1] | provenance | | +| simple.cpp:79:16:79:17 | *f2 [f1] | simple.cpp:79:19:79:20 | f1 | provenance | | +| simple.cpp:79:16:79:17 | *this [f2, f1] | simple.cpp:79:16:79:17 | *f2 [f1] | provenance | | +| simple.cpp:79:19:79:20 | f1 | simple.cpp:78:9:78:15 | *getf2f1 | provenance | | +| simple.cpp:83:9:83:10 | *f2 [post update] [f1] | simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | provenance | | +| simple.cpp:83:9:83:10 | *this [post update] [f2, f1] | simple.cpp:84:14:84:20 | *this [f2, f1] | provenance | | +| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | *f2 [post update] [f1] | provenance | | +| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | provenance | | +| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:78:9:78:15 | *this [f2, f1] | provenance | | +| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | provenance | | +| simple.cpp:92:5:92:5 | *a [post update] [i] | simple.cpp:94:10:94:11 | *a2 [i] | provenance | | +| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | *a [post update] [i] | provenance | | +| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | provenance | | +| simple.cpp:94:10:94:11 | *a2 [i] | simple.cpp:94:13:94:13 | i | provenance | | +| simple.cpp:103:24:103:24 | x | simple.cpp:104:14:104:14 | x | provenance | | +| simple.cpp:108:17:108:26 | call to user_input | simple.cpp:109:43:109:43 | x | provenance | | +| simple.cpp:109:43:109:43 | x | simple.cpp:103:24:103:24 | x | provenance | | +| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | provenance | | +| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:22:8:22:9 | *ab [a] | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:24:10:24:12 | *& ... [a] | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [a] | struct_init.c:28:5:28:7 | *& ... [a] | provenance | | +| struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | struct_init.c:20:13:20:14 | *definition of ab [a] | provenance | | +| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:13:20:14 | *definition of ab [post update] [a] | provenance | | +| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:20:20:29 | call to user_input | provenance | | +| struct_init.c:22:8:22:9 | *ab [a] | struct_init.c:22:11:22:11 | a | provenance | | +| struct_init.c:24:10:24:12 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:31:8:31:12 | *outer [nestedAB, a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | struct_init.c:36:11:36:15 | *outer [nestedAB, a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | provenance | | +| struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | struct_init.c:26:16:26:20 | *definition of outer [nestedAB, a] | provenance | | +| struct_init.c:26:23:29:3 | *{...} [post update] [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [nestedAB, a] | provenance | | +| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:26:23:29:3 | *{...} [post update] [a] | provenance | | +| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:7:27:16 | call to user_input | provenance | | +| struct_init.c:28:5:28:7 | *& ... [a] | struct_init.c:26:16:26:20 | *definition of outer [post update] [*pointerAB, a] | provenance | | +| struct_init.c:31:8:31:12 | *outer [nestedAB, a] | struct_init.c:31:14:31:21 | *nestedAB [a] | provenance | | +| struct_init.c:31:14:31:21 | *nestedAB [a] | struct_init.c:31:23:31:23 | a | provenance | | +| struct_init.c:33:8:33:12 | *outer [*pointerAB, a] | struct_init.c:33:14:33:22 | *pointerAB [a] | provenance | | +| struct_init.c:33:14:33:22 | *pointerAB [a] | struct_init.c:33:25:33:25 | a | provenance | | +| struct_init.c:36:10:36:24 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | | +| struct_init.c:36:11:36:15 | *outer [nestedAB, a] | struct_init.c:36:10:36:24 | *& ... [a] | provenance | | +| struct_init.c:40:13:40:14 | *definition of ab [a] | struct_init.c:43:5:43:7 | *& ... [a] | provenance | | +| struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | struct_init.c:40:13:40:14 | *definition of ab [a] | provenance | | +| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:13:40:14 | *definition of ab [post update] [a] | provenance | | +| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:20:40:29 | call to user_input | provenance | | +| struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | provenance | | +| struct_init.c:43:5:43:7 | *& ... [a] | struct_init.c:41:16:41:20 | *definition of outer [post update] [*pointerAB, a] | provenance | | +| struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | struct_init.c:46:16:46:24 | *pointerAB [a] | provenance | | +| struct_init.c:46:16:46:24 | *pointerAB [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | | nodes | A.cpp:23:10:23:10 | c | semmle.label | c | | A.cpp:25:7:25:10 | *this [post update] [c] | semmle.label | *this [post update] [c] | diff --git a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected index 78b3832ea92..3eebd355b14 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected @@ -1,751 +1,751 @@ edges -| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | -| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | this [post update] [c] | -| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | -| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | this [post update] [c] | -| A.cpp:28:8:28:10 | this [c] | A.cpp:28:23:28:26 | this [c] | -| A.cpp:28:23:28:26 | this [c] | A.cpp:28:29:28:29 | c | -| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | -| A.cpp:31:14:31:21 | call to B [c] | A.cpp:31:14:31:21 | new [c] | -| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | -| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | -| A.cpp:41:5:41:6 | ref arg ct | A.cpp:43:11:43:12 | ct | -| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | ref arg ct | -| A.cpp:43:11:43:12 | ct | A.cpp:43:10:43:12 | & ... | -| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | -| A.cpp:48:12:48:18 | call to make [c] | A.cpp:49:10:49:10 | b [c] | -| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | -| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | call to make [c] | -| A.cpp:49:10:49:10 | b [c] | A.cpp:49:13:49:13 | c | -| A.cpp:55:5:55:5 | ref arg b [c] | A.cpp:56:10:56:10 | b [c] | -| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | -| A.cpp:55:12:55:19 | new | A.cpp:55:5:55:5 | ref arg b [c] | -| A.cpp:56:10:56:10 | b [c] | A.cpp:28:8:28:10 | this [c] | -| A.cpp:56:10:56:10 | b [c] | A.cpp:56:13:56:15 | call to get | -| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | new [c] | -| A.cpp:57:11:57:24 | new [c] | A.cpp:28:8:28:10 | this [c] | -| A.cpp:57:11:57:24 | new [c] | A.cpp:57:28:57:30 | call to get | -| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | -| A.cpp:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | -| A.cpp:64:10:64:15 | call to setOnB [c] | A.cpp:66:10:66:11 | b2 [c] | -| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | call to setOnB [c] | -| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | -| A.cpp:66:10:66:11 | b2 [c] | A.cpp:66:14:66:14 | c | -| A.cpp:73:10:73:19 | call to setOnBWrap [c] | A.cpp:75:10:75:11 | b2 [c] | -| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | call to setOnBWrap [c] | -| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | -| A.cpp:75:10:75:11 | b2 [c] | A.cpp:75:14:75:14 | c | -| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | -| A.cpp:81:10:81:15 | call to setOnB [c] | A.cpp:82:12:82:24 | ... ? ... : ... [c] | -| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | call to setOnB [c] | -| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | -| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | -| A.cpp:90:7:90:8 | ref arg b2 [c] | A.cpp:91:14:91:15 | b2 [c] | -| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | -| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | ref arg b2 [c] | -| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | -| A.cpp:100:5:100:6 | c1 [post update] [a] | A.cpp:101:8:101:9 | c1 [a] | -| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | c1 [post update] [a] | -| A.cpp:101:8:101:9 | c1 [a] | A.cpp:103:14:103:14 | c [a] | -| A.cpp:103:14:103:14 | c [a] | A.cpp:107:12:107:13 | c1 [a] | -| A.cpp:103:14:103:14 | c [a] | A.cpp:120:12:120:13 | c1 [a] | -| A.cpp:107:12:107:13 | c1 [a] | A.cpp:107:16:107:16 | a | -| A.cpp:120:12:120:13 | c1 [a] | A.cpp:120:16:120:16 | a | -| A.cpp:124:14:124:14 | b [c] | A.cpp:131:8:131:8 | ref arg b [c] | -| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [c] | -| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:131:8:131:8 | ref arg b [c] | -| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | -| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | ref arg b [c] | -| A.cpp:131:8:131:8 | ref arg b [c] | A.cpp:132:10:132:10 | b [c] | -| A.cpp:132:10:132:10 | b [c] | A.cpp:132:13:132:13 | c | -| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:140:13:140:13 | b [c] | A.cpp:151:18:151:18 | ref arg b [c] | -| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [c] | -| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:143:7:143:31 | ... = ... [c] | -| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:151:18:151:18 | ref arg b [c] | -| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | b [post update] [c] | -| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | -| A.cpp:143:7:143:10 | this [post update] [b, c] | A.cpp:151:12:151:24 | call to D [b, c] | -| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | -| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | -| A.cpp:143:7:143:31 | ... = ... [c] | A.cpp:143:7:143:10 | this [post update] [b, c] | -| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | -| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | -| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:152:10:152:10 | d [b, c] | -| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:153:10:153:10 | d [b, c] | -| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | d [b] | -| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | -| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | -| A.cpp:151:18:151:18 | ref arg b [c] | A.cpp:154:10:154:10 | b [c] | -| A.cpp:152:10:152:10 | d [b, c] | A.cpp:152:13:152:13 | b [c] | -| A.cpp:152:10:152:10 | d [b] | A.cpp:152:13:152:13 | b | -| A.cpp:152:10:152:10 | d [post update] [b, c] | A.cpp:153:10:153:10 | d [b, c] | -| A.cpp:152:13:152:13 | b [c] | A.cpp:152:13:152:13 | ref arg b [c] | -| A.cpp:152:13:152:13 | b [c] | A.cpp:173:26:173:26 | o [c] | -| A.cpp:152:13:152:13 | ref arg b [c] | A.cpp:152:10:152:10 | d [post update] [b, c] | -| A.cpp:153:10:153:10 | d [b, c] | A.cpp:153:13:153:13 | b [c] | -| A.cpp:153:13:153:13 | b [c] | A.cpp:153:16:153:16 | c | -| A.cpp:154:10:154:10 | b [c] | A.cpp:154:13:154:13 | c | -| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | -| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | l1 [head] | -| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | -| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | -| A.cpp:161:18:161:40 | call to MyList [next, head] | A.cpp:162:38:162:39 | l2 [next, head] | -| A.cpp:161:38:161:39 | l1 [head] | A.cpp:161:18:161:40 | call to MyList [next, head] | -| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | -| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:165:10:165:11 | l3 [next, next, head] | -| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | -| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] | -| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | -| A.cpp:165:10:165:11 | l3 [next, next, head] | A.cpp:165:14:165:17 | next [next, head] | -| A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | -| A.cpp:165:14:165:17 | next [next, head] | A.cpp:165:20:165:23 | next [head] | -| A.cpp:165:14:165:17 | next [post update] [next, head] | A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | -| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | -| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | -| A.cpp:165:20:165:23 | next [post update] [head] | A.cpp:165:14:165:17 | next [post update] [next, head] | -| A.cpp:165:26:165:29 | head | A.cpp:165:26:165:29 | ref arg head | -| A.cpp:165:26:165:29 | head | A.cpp:173:26:173:26 | o | -| A.cpp:165:26:165:29 | ref arg head | A.cpp:165:20:165:23 | next [post update] [head] | -| A.cpp:167:44:167:44 | l [next, head] | A.cpp:167:47:167:50 | next [head] | -| A.cpp:167:44:167:44 | l [next, next, head] | A.cpp:167:47:167:50 | next [next, head] | -| A.cpp:167:47:167:50 | next [head] | A.cpp:169:12:169:12 | l [head] | -| A.cpp:167:47:167:50 | next [next, head] | A.cpp:167:44:167:44 | l [next, head] | -| A.cpp:169:12:169:12 | l [head] | A.cpp:169:15:169:18 | head | -| A.cpp:173:26:173:26 | o | A.cpp:173:26:173:26 | o | -| A.cpp:173:26:173:26 | o [c] | A.cpp:173:26:173:26 | o [c] | -| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | -| A.cpp:181:32:181:35 | next [head] | A.cpp:184:7:184:23 | ... = ... [head] | -| A.cpp:181:32:181:35 | next [next, head] | A.cpp:184:7:184:23 | ... = ... [next, head] | -| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | this [post update] [head] | -| A.cpp:184:7:184:23 | ... = ... [head] | A.cpp:184:7:184:10 | this [post update] [next, head] | -| A.cpp:184:7:184:23 | ... = ... [next, head] | A.cpp:184:7:184:10 | this [post update] [next, next, head] | -| B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | -| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | b1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | -| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | -| B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | B.cpp:9:10:9:11 | b2 [box1, elem1] | -| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | -| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | -| B.cpp:9:10:9:11 | b2 [box1, elem1] | B.cpp:9:14:9:17 | box1 [elem1] | -| B.cpp:9:14:9:17 | box1 [elem1] | B.cpp:9:20:9:24 | elem1 | -| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | -| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | b1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | -| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | -| B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | B.cpp:19:10:19:11 | b2 [box1, elem2] | -| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | -| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | -| B.cpp:19:10:19:11 | b2 [box1, elem2] | B.cpp:19:14:19:17 | box1 [elem2] | -| B.cpp:19:14:19:17 | box1 [elem2] | B.cpp:19:20:19:24 | elem2 | -| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | -| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | -| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | this [post update] [elem1] | -| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | this [post update] [elem2] | -| B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:46:7:46:21 | ... = ... [elem1] | -| B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:46:7:46:21 | ... = ... [elem2] | -| B.cpp:46:7:46:21 | ... = ... [elem1] | B.cpp:46:7:46:10 | this [post update] [box1, elem1] | -| B.cpp:46:7:46:21 | ... = ... [elem2] | B.cpp:46:7:46:10 | this [post update] [box1, elem2] | -| C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | c [s1] | -| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | c [s3] | -| C.cpp:19:5:19:5 | c [s1] | C.cpp:27:8:27:11 | this [s1] | -| C.cpp:19:5:19:5 | c [s3] | C.cpp:27:8:27:11 | this [s3] | -| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:18:12:18:18 | call to C [s1] | -| C.cpp:22:12:22:21 | new | C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | -| C.cpp:24:5:24:8 | this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | -| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | this [post update] [s3] | -| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | -| C.cpp:27:8:27:11 | this [s1] | C.cpp:29:10:29:11 | this [s1] | -| C.cpp:27:8:27:11 | this [s3] | C.cpp:31:10:31:11 | this [s3] | -| C.cpp:29:10:29:11 | this [s1] | C.cpp:29:10:29:11 | s1 | -| C.cpp:31:10:31:11 | this [s3] | C.cpp:31:10:31:11 | s3 | -| D.cpp:10:11:10:17 | this [elem] | D.cpp:10:30:10:33 | this [elem] | -| D.cpp:10:30:10:33 | this [elem] | D.cpp:10:30:10:33 | elem | -| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | -| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | this [post update] [elem] | -| D.cpp:17:11:17:17 | this [box, elem] | D.cpp:17:30:17:32 | this [box, elem] | -| D.cpp:17:30:17:32 | this [box, elem] | D.cpp:17:30:17:32 | box [elem] | -| D.cpp:21:30:21:31 | b2 [box, elem] | D.cpp:22:10:22:11 | b2 [box, elem] | -| D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:17:11:17:17 | this [box, elem] | -| D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:22:14:22:20 | call to getBox1 [elem] | -| D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:10:11:10:17 | this [elem] | -| D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:22:25:22:31 | call to getElem | -| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | -| D.cpp:30:5:30:5 | b [post update] [box, elem] | D.cpp:31:14:31:14 | b [box, elem] | -| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | box [post update] [elem] | -| D.cpp:30:8:30:10 | box [post update] [elem] | D.cpp:30:5:30:5 | b [post update] [box, elem] | -| D.cpp:31:14:31:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | -| D.cpp:37:5:37:5 | b [post update] [box, elem] | D.cpp:38:14:38:14 | b [box, elem] | -| D.cpp:37:8:37:10 | ref arg box [elem] | D.cpp:37:5:37:5 | b [post update] [box, elem] | -| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | -| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | ref arg box [elem] | -| D.cpp:38:14:38:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | -| D.cpp:44:5:44:5 | ref arg b [box, elem] | D.cpp:45:14:45:14 | b [box, elem] | -| D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | -| D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | ref arg b [box, elem] | -| D.cpp:45:14:45:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | -| D.cpp:51:5:51:5 | ref arg b [box, elem] | D.cpp:52:14:52:14 | b [box, elem] | -| D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | D.cpp:51:5:51:5 | ref arg b [box, elem] | -| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | -| D.cpp:51:27:51:27 | e | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | -| D.cpp:52:14:52:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | -| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | -| D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | -| D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | D.cpp:59:5:59:7 | this [boxfield, box, elem] | -| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | box [post update] [elem] | -| D.cpp:58:15:58:17 | box [post update] [elem] | D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | -| D.cpp:59:5:59:7 | this [boxfield, box, elem] | D.cpp:63:8:63:10 | this [boxfield, box, elem] | -| D.cpp:63:8:63:10 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | this [boxfield, box, elem] | -| D.cpp:64:10:64:17 | boxfield [box, elem] | D.cpp:64:20:64:22 | box [elem] | -| D.cpp:64:10:64:17 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | boxfield [box, elem] | -| D.cpp:64:20:64:22 | box [elem] | D.cpp:64:25:64:28 | elem | -| E.cpp:19:27:19:27 | p [data, buffer] | E.cpp:21:10:21:10 | p [data, buffer] | -| E.cpp:21:10:21:10 | p [data, buffer] | E.cpp:21:13:21:16 | data [buffer] | -| E.cpp:21:13:21:16 | data [buffer] | E.cpp:21:18:21:23 | buffer | -| E.cpp:28:21:28:23 | ref arg raw | E.cpp:31:10:31:12 | raw | -| E.cpp:29:21:29:21 | b [post update] [buffer] | E.cpp:32:10:32:10 | b [buffer] | -| E.cpp:29:24:29:29 | ref arg buffer | E.cpp:29:21:29:21 | b [post update] [buffer] | -| E.cpp:30:21:30:21 | p [post update] [data, buffer] | E.cpp:33:19:33:19 | p [data, buffer] | -| E.cpp:30:23:30:26 | data [post update] [buffer] | E.cpp:30:21:30:21 | p [post update] [data, buffer] | -| E.cpp:30:28:30:33 | ref arg buffer | E.cpp:30:23:30:26 | data [post update] [buffer] | -| E.cpp:32:10:32:10 | b [buffer] | E.cpp:32:13:32:18 | buffer | -| E.cpp:33:18:33:19 | & ... [data, buffer] | E.cpp:19:27:19:27 | p [data, buffer] | -| E.cpp:33:19:33:19 | p [data, buffer] | E.cpp:33:18:33:19 | & ... [data, buffer] | -| aliasing.cpp:8:23:8:23 | s [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | -| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [m1] | -| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | -| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | s [post update] [m1] | -| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | -| aliasing.cpp:12:25:12:25 | s [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | -| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [m1] | -| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | -| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | s [post update] [m1] | -| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | -| aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | aliasing.cpp:29:8:29:9 | s1 [m1] | -| aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | aliasing.cpp:30:8:30:9 | s2 [m1] | -| aliasing.cpp:29:8:29:9 | s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | -| aliasing.cpp:30:8:30:9 | s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | -| aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | copy2 [m1] | -| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | -| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | -| aliasing.cpp:62:8:62:12 | copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | -| aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | w [s, m1] | -| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | s [post update] [m1] | -| aliasing.cpp:92:5:92:5 | s [post update] [m1] | aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | -| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | -| aliasing.cpp:93:8:93:8 | w [s, m1] | aliasing.cpp:93:10:93:10 | s [m1] | -| aliasing.cpp:93:10:93:10 | s [m1] | aliasing.cpp:93:12:93:13 | m1 | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:158:17:158:20 | ref arg data | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:164:17:164:20 | ref arg data | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:175:15:175:22 | ref arg & ... | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:187:15:187:22 | ref arg & ... | -| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:200:15:200:24 | ref arg & ... | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:158:17:158:20 | ref arg data | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:164:17:164:20 | ref arg data | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:175:15:175:22 | ref arg & ... | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:187:15:187:22 | ref arg & ... | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:200:15:200:24 | ref arg & ... | -| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa | -| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:106:4:106:5 | pa [inner post update] | -| aliasing.cpp:158:15:158:15 | s [post update] [data] | aliasing.cpp:159:9:159:9 | s [data] | -| aliasing.cpp:158:17:158:20 | ref arg data | aliasing.cpp:158:15:158:15 | s [post update] [data] | -| aliasing.cpp:159:9:159:9 | s [data] | aliasing.cpp:159:11:159:14 | data | -| aliasing.cpp:159:11:159:14 | data | aliasing.cpp:159:8:159:14 | * ... | -| aliasing.cpp:164:15:164:15 | s [post update] [data] | aliasing.cpp:165:8:165:8 | s [data] | -| aliasing.cpp:164:17:164:20 | ref arg data | aliasing.cpp:164:15:164:15 | s [post update] [data] | -| aliasing.cpp:165:8:165:8 | s [data] | aliasing.cpp:165:10:165:13 | data | -| aliasing.cpp:165:10:165:13 | data | aliasing.cpp:165:8:165:16 | access to array | -| aliasing.cpp:175:15:175:22 | ref arg & ... | aliasing.cpp:175:21:175:22 | m1 [inner post update] | -| aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | s2 [s, m1] | -| aliasing.cpp:175:19:175:19 | s [post update] [m1] | aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | -| aliasing.cpp:175:21:175:22 | m1 [inner post update] | aliasing.cpp:175:19:175:19 | s [post update] [m1] | -| aliasing.cpp:176:8:176:9 | s2 [s, m1] | aliasing.cpp:176:11:176:11 | s [m1] | -| aliasing.cpp:176:11:176:11 | s [m1] | aliasing.cpp:176:13:176:14 | m1 | -| aliasing.cpp:187:15:187:22 | ref arg & ... | aliasing.cpp:187:21:187:22 | m1 [inner post update] | -| aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | -| aliasing.cpp:187:19:187:19 | s [post update] [m1] | aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | -| aliasing.cpp:187:21:187:22 | m1 [inner post update] | aliasing.cpp:187:19:187:19 | s [post update] [m1] | -| aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | s [m1] | -| aliasing.cpp:189:13:189:13 | s [m1] | aliasing.cpp:189:15:189:16 | m1 | -| aliasing.cpp:200:15:200:24 | ref arg & ... | aliasing.cpp:200:23:200:24 | m1 [inner post update] | -| aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | ps2 [s, m1] | -| aliasing.cpp:200:21:200:21 | s [post update] [m1] | aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | -| aliasing.cpp:200:23:200:24 | m1 [inner post update] | aliasing.cpp:200:21:200:21 | s [post update] [m1] | -| aliasing.cpp:201:8:201:10 | ps2 [s, m1] | aliasing.cpp:201:13:201:13 | s [m1] | -| aliasing.cpp:201:13:201:13 | s [m1] | aliasing.cpp:201:15:201:16 | m1 | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | -| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | -| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | -| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | o [nested, arr, data] | -| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | -| arrays.cpp:36:3:36:17 | access to array [post update] [data] | arrays.cpp:36:12:36:14 | arr [inner post update] [data] | -| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | access to array [post update] [data] | -| arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | -| arrays.cpp:36:12:36:14 | arr [inner post update] [data] | arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | -| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | -| arrays.cpp:37:8:37:8 | o [nested, arr, data] | arrays.cpp:37:10:37:15 | nested [arr, data] | -| arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | -| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | -| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | -| arrays.cpp:37:8:37:22 | access to array [post update] [data] | arrays.cpp:37:17:37:19 | arr [inner post update] [data] | -| arrays.cpp:37:10:37:15 | nested [arr, data] | arrays.cpp:37:17:37:19 | arr [data] | -| arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | -| arrays.cpp:37:17:37:19 | arr [data] | arrays.cpp:37:8:37:22 | access to array [data] | -| arrays.cpp:37:17:37:19 | arr [inner post update] [data] | arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | -| arrays.cpp:37:24:37:27 | data | arrays.cpp:37:24:37:27 | ref arg data | -| arrays.cpp:37:24:37:27 | data | realistic.cpp:41:17:41:17 | o | -| arrays.cpp:37:24:37:27 | ref arg data | arrays.cpp:37:8:37:22 | access to array [post update] [data] | -| arrays.cpp:38:8:38:8 | o [nested, arr, data] | arrays.cpp:38:10:38:15 | nested [arr, data] | -| arrays.cpp:38:8:38:22 | access to array [data] | arrays.cpp:38:24:38:27 | data | -| arrays.cpp:38:10:38:15 | nested [arr, data] | arrays.cpp:38:17:38:19 | arr [data] | -| arrays.cpp:38:17:38:19 | arr [data] | arrays.cpp:38:8:38:22 | access to array [data] | -| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:43:8:43:8 | o [indirect, arr, data] | -| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | -| arrays.cpp:42:3:42:20 | access to array [post update] [data] | arrays.cpp:42:15:42:17 | arr [inner post update] [data] | -| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | access to array [post update] [data] | -| arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | -| arrays.cpp:42:15:42:17 | arr [inner post update] [data] | arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | -| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | -| arrays.cpp:43:8:43:8 | o [indirect, arr, data] | arrays.cpp:43:10:43:17 | indirect [arr, data] | -| arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | -| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | -| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | -| arrays.cpp:43:8:43:25 | access to array [post update] [data] | arrays.cpp:43:20:43:22 | arr [inner post update] [data] | -| arrays.cpp:43:10:43:17 | indirect [arr, data] | arrays.cpp:43:20:43:22 | arr [data] | -| arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | -| arrays.cpp:43:20:43:22 | arr [data] | arrays.cpp:43:8:43:25 | access to array [data] | -| arrays.cpp:43:20:43:22 | arr [inner post update] [data] | arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | -| arrays.cpp:43:27:43:30 | data | arrays.cpp:43:27:43:30 | ref arg data | -| arrays.cpp:43:27:43:30 | data | realistic.cpp:41:17:41:17 | o | -| arrays.cpp:43:27:43:30 | ref arg data | arrays.cpp:43:8:43:25 | access to array [post update] [data] | -| arrays.cpp:44:8:44:8 | o [indirect, arr, data] | arrays.cpp:44:10:44:17 | indirect [arr, data] | -| arrays.cpp:44:8:44:25 | access to array [data] | arrays.cpp:44:27:44:30 | data | -| arrays.cpp:44:10:44:17 | indirect [arr, data] | arrays.cpp:44:20:44:22 | arr [data] | -| arrays.cpp:44:20:44:22 | arr [data] | arrays.cpp:44:8:44:25 | access to array [data] | -| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | -| by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [a] | -| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | s [post update] [a] | -| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | -| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | this [post update] [a] | -| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | ref arg this [a] | -| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | ref arg this [a] | -| by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:12:32:12 | s [a] | -| by_reference.cpp:32:12:32:12 | s [a] | by_reference.cpp:32:15:32:15 | a | -| by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:12:36:15 | this [a] | -| by_reference.cpp:36:12:36:15 | this [a] | by_reference.cpp:36:18:36:18 | a | -| by_reference.cpp:39:9:39:21 | this [a] | by_reference.cpp:40:12:40:15 | this [a] | -| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:35:9:35:19 | this [a] | -| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | -| by_reference.cpp:43:9:43:27 | this [a] | by_reference.cpp:44:26:44:29 | this [a] | -| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:31:46:31:46 | s [a] | -| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | -| by_reference.cpp:50:3:50:3 | ref arg s [a] | by_reference.cpp:51:8:51:8 | s [a] | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:50:3:50:3 | ref arg s [a] | -| by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:35:9:35:19 | this [a] | -| by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | -| by_reference.cpp:56:3:56:3 | ref arg s [a] | by_reference.cpp:57:8:57:8 | s [a] | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:56:3:56:3 | ref arg s [a] | -| by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:39:9:39:21 | this [a] | -| by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | -| by_reference.cpp:62:3:62:3 | ref arg s [a] | by_reference.cpp:63:8:63:8 | s [a] | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:62:3:62:3 | ref arg s [a] | -| by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:43:9:43:27 | this [a] | -| by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | -| by_reference.cpp:68:17:68:18 | ref arg & ... [a] | by_reference.cpp:69:23:69:23 | s [a] | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | ref arg & ... [a] | -| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:31:46:31:46 | s [a] | -| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | -| by_reference.cpp:69:23:69:23 | s [a] | by_reference.cpp:69:22:69:23 | & ... [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | -| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | -| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | inner [post update] [a] | -| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | -| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | -| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | inner [post update] [a] | -| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | -| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:104:15:104:22 | ref arg & ... | -| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:108:15:108:24 | ref arg & ... | -| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:104:15:104:22 | ref arg & ... | -| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:108:15:108:24 | ref arg & ... | -| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa | -| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:92:4:92:5 | pa [inner post update] | -| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:124:21:124:21 | ref arg a | -| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:128:23:128:23 | ref arg a | -| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | pa | -| by_reference.cpp:102:21:102:39 | ref arg & ... [a] | by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | -| by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | -| by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | -| by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | -| by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | -| by_reference.cpp:104:15:104:22 | ref arg & ... | by_reference.cpp:104:22:104:22 | a [inner post update] | -| by_reference.cpp:104:16:104:20 | outer [post update] [a] | by_reference.cpp:112:8:112:12 | outer [a] | -| by_reference.cpp:104:22:104:22 | a [inner post update] | by_reference.cpp:104:16:104:20 | outer [post update] [a] | -| by_reference.cpp:106:21:106:41 | ref arg & ... [a] | by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | -| by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | -| by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | -| by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | -| by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | -| by_reference.cpp:108:15:108:24 | ref arg & ... | by_reference.cpp:108:24:108:24 | a [inner post update] | -| by_reference.cpp:108:16:108:21 | pouter [post update] [a] | by_reference.cpp:116:8:116:13 | pouter [a] | -| by_reference.cpp:108:24:108:24 | a [inner post update] | by_reference.cpp:108:16:108:21 | pouter [post update] [a] | -| by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | inner_nested [a] | -| by_reference.cpp:110:14:110:25 | inner_nested [a] | by_reference.cpp:110:27:110:27 | a | -| by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | by_reference.cpp:111:14:111:22 | inner_ptr [a] | -| by_reference.cpp:111:14:111:22 | inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | -| by_reference.cpp:112:8:112:12 | outer [a] | by_reference.cpp:112:14:112:14 | a | -| by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | inner_nested [a] | -| by_reference.cpp:114:16:114:27 | inner_nested [a] | by_reference.cpp:114:29:114:29 | a | -| by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | by_reference.cpp:115:16:115:24 | inner_ptr [a] | -| by_reference.cpp:115:16:115:24 | inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | -| by_reference.cpp:116:8:116:13 | pouter [a] | by_reference.cpp:116:16:116:16 | a | -| by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | -| by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | -| by_reference.cpp:123:21:123:36 | ref arg * ... [a] | by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | -| by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | -| by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | -| by_reference.cpp:124:15:124:19 | outer [post update] [a] | by_reference.cpp:132:8:132:12 | outer [a] | -| by_reference.cpp:124:21:124:21 | ref arg a | by_reference.cpp:124:15:124:19 | outer [post update] [a] | -| by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | -| by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | -| by_reference.cpp:127:21:127:38 | ref arg * ... [a] | by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | -| by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | -| by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | -| by_reference.cpp:128:15:128:20 | pouter [post update] [a] | by_reference.cpp:136:8:136:13 | pouter [a] | -| by_reference.cpp:128:23:128:23 | ref arg a | by_reference.cpp:128:15:128:20 | pouter [post update] [a] | -| by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | inner_nested [a] | -| by_reference.cpp:130:14:130:25 | inner_nested [a] | by_reference.cpp:130:27:130:27 | a | -| by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | by_reference.cpp:131:14:131:22 | inner_ptr [a] | -| by_reference.cpp:131:14:131:22 | inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | -| by_reference.cpp:132:8:132:12 | outer [a] | by_reference.cpp:132:14:132:14 | a | -| by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | inner_nested [a] | -| by_reference.cpp:134:16:134:27 | inner_nested [a] | by_reference.cpp:134:29:134:29 | a | -| by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | by_reference.cpp:135:16:135:24 | inner_ptr [a] | -| by_reference.cpp:135:16:135:24 | inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | -| by_reference.cpp:136:8:136:13 | pouter [a] | by_reference.cpp:136:16:136:16 | a | -| clearning.cpp:53:4:53:4 | s [post update] [x] | clearning.cpp:55:8:55:8 | s [x] | -| clearning.cpp:53:6:53:6 | x [inner post update] | clearning.cpp:53:4:53:4 | s [post update] [x] | -| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:6:53:6 | x [inner post update] | -| clearning.cpp:55:8:55:8 | s [x] | clearning.cpp:55:10:55:10 | x | -| clearning.cpp:124:2:124:2 | s [post update] [val] | clearning.cpp:126:7:126:7 | s [val] | -| clearning.cpp:124:2:124:25 | ... = ... | clearning.cpp:124:2:124:2 | s [post update] [val] | -| clearning.cpp:124:10:124:19 | call to user_input | clearning.cpp:124:2:124:25 | ... = ... | -| clearning.cpp:126:7:126:7 | s [val] | clearning.cpp:126:9:126:11 | val | -| clearning.cpp:131:2:131:2 | s [post update] [val] | clearning.cpp:133:7:133:7 | s [val] | -| clearning.cpp:131:2:131:25 | ... = ... | clearning.cpp:131:2:131:2 | s [post update] [val] | -| clearning.cpp:131:10:131:19 | call to user_input | clearning.cpp:131:2:131:25 | ... = ... | -| clearning.cpp:133:7:133:7 | s [val] | clearning.cpp:133:9:133:11 | val | -| clearning.cpp:138:2:138:2 | s [post update] [val] | clearning.cpp:140:7:140:7 | s [val] | -| clearning.cpp:138:2:138:25 | ... = ... | clearning.cpp:138:2:138:2 | s [post update] [val] | -| clearning.cpp:138:10:138:19 | call to user_input | clearning.cpp:138:2:138:25 | ... = ... | -| clearning.cpp:140:7:140:7 | s [val] | clearning.cpp:140:9:140:11 | val | -| clearning.cpp:151:3:151:3 | s [post update] [val] | clearning.cpp:152:8:152:8 | s [val] | -| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | s [post update] [val] | -| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | -| clearning.cpp:152:8:152:8 | s [val] | clearning.cpp:152:10:152:12 | val | -| clearning.cpp:157:3:157:3 | s [post update] [val] | clearning.cpp:159:8:159:8 | s [val] | -| clearning.cpp:157:3:157:22 | ... = ... | clearning.cpp:157:3:157:3 | s [post update] [val] | -| clearning.cpp:157:11:157:20 | call to user_input | clearning.cpp:157:3:157:22 | ... = ... | -| clearning.cpp:159:8:159:8 | s [val] | clearning.cpp:159:10:159:12 | val | -| clearning.cpp:164:3:164:3 | s [post update] [val] | clearning.cpp:166:8:166:8 | s [val] | -| clearning.cpp:164:3:164:22 | ... = ... | clearning.cpp:164:3:164:3 | s [post update] [val] | -| clearning.cpp:164:11:164:20 | call to user_input | clearning.cpp:164:3:164:22 | ... = ... | -| clearning.cpp:166:8:166:8 | s [val] | clearning.cpp:166:10:166:12 | val | -| clearning.cpp:171:3:171:3 | s [post update] [val] | clearning.cpp:173:8:173:8 | s [val] | -| clearning.cpp:171:3:171:22 | ... = ... | clearning.cpp:171:3:171:3 | s [post update] [val] | -| clearning.cpp:171:11:171:20 | call to user_input | clearning.cpp:171:3:171:22 | ... = ... | -| clearning.cpp:173:8:173:8 | s [val] | clearning.cpp:173:10:173:12 | val | -| clearning.cpp:178:3:178:3 | s [post update] [val] | clearning.cpp:180:8:180:8 | s [val] | -| clearning.cpp:178:3:178:22 | ... = ... | clearning.cpp:178:3:178:3 | s [post update] [val] | -| clearning.cpp:178:11:178:20 | call to user_input | clearning.cpp:178:3:178:22 | ... = ... | -| clearning.cpp:180:8:180:8 | s [val] | clearning.cpp:180:10:180:12 | val | -| complex.cpp:9:7:9:7 | this [a_] | complex.cpp:9:20:9:21 | this [a_] | -| complex.cpp:9:20:9:21 | this [a_] | complex.cpp:9:20:9:21 | a_ | -| complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | this [b_] | -| complex.cpp:10:20:10:21 | this [b_] | complex.cpp:10:20:10:21 | b_ | -| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | -| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | this [post update] [a_] | -| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | -| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | this [post update] [b_] | -| complex.cpp:40:17:40:17 | b [inner, f, a_] | complex.cpp:42:8:42:8 | b [inner, f, a_] | -| complex.cpp:40:17:40:17 | b [inner, f, b_] | complex.cpp:43:8:43:8 | b [inner, f, b_] | -| complex.cpp:42:8:42:8 | b [inner, f, a_] | complex.cpp:42:10:42:14 | inner [f, a_] | -| complex.cpp:42:10:42:14 | inner [f, a_] | complex.cpp:42:16:42:16 | f [a_] | -| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:9:7:9:7 | this [a_] | -| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:42:18:42:18 | call to a | -| complex.cpp:43:8:43:8 | b [inner, f, b_] | complex.cpp:43:10:43:14 | inner [f, b_] | -| complex.cpp:43:10:43:14 | inner [f, b_] | complex.cpp:43:16:43:16 | f [b_] | -| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:10:7:10:7 | this [b_] | -| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:43:18:43:18 | call to b | -| complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | b1 [inner, f, a_] | -| complex.cpp:53:6:53:10 | inner [post update] [f, a_] | complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | -| complex.cpp:53:12:53:12 | ref arg f [a_] | complex.cpp:53:6:53:10 | inner [post update] [f, a_] | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | ref arg f [a_] | -| complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | b2 [inner, f, b_] | -| complex.cpp:54:6:54:10 | inner [post update] [f, b_] | complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | -| complex.cpp:54:12:54:12 | ref arg f [b_] | complex.cpp:54:6:54:10 | inner [post update] [f, b_] | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | ref arg f [b_] | -| complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | b3 [inner, f, a_] | -| complex.cpp:55:6:55:10 | inner [post update] [f, a_] | complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | -| complex.cpp:55:12:55:12 | ref arg f [a_] | complex.cpp:55:6:55:10 | inner [post update] [f, a_] | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | ref arg f [a_] | -| complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | b3 [inner, f, b_] | -| complex.cpp:56:6:56:10 | inner [post update] [f, b_] | complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | -| complex.cpp:56:12:56:12 | ref arg f [b_] | complex.cpp:56:6:56:10 | inner [post update] [f, b_] | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | ref arg f [b_] | -| complex.cpp:59:7:59:8 | b1 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | -| complex.cpp:62:7:62:8 | b2 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | -| complex.cpp:65:7:65:8 | b3 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | -| complex.cpp:65:7:65:8 | b3 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | -| conflated.cpp:19:19:19:21 | ref arg raw | conflated.cpp:20:8:20:10 | raw | -| conflated.cpp:29:3:29:4 | pa [post update] [x] | conflated.cpp:30:8:30:9 | pa [x] | -| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | pa [post update] [x] | -| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | -| conflated.cpp:30:8:30:9 | pa [x] | conflated.cpp:30:12:30:12 | x | -| conflated.cpp:36:3:36:4 | pa [post update] [x] | conflated.cpp:37:8:37:9 | pa [x] | -| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | pa [post update] [x] | -| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | -| conflated.cpp:37:8:37:9 | pa [x] | conflated.cpp:37:12:37:12 | x | -| conflated.cpp:54:3:54:4 | ll [post update] [next, y] | conflated.cpp:55:8:55:9 | ll [next, y] | -| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | next [post update] [y] | -| conflated.cpp:54:7:54:10 | next [post update] [y] | conflated.cpp:54:3:54:4 | ll [post update] [next, y] | -| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | -| conflated.cpp:55:8:55:9 | ll [next, y] | conflated.cpp:55:12:55:15 | next [y] | -| conflated.cpp:55:12:55:15 | next [y] | conflated.cpp:55:18:55:18 | y | -| conflated.cpp:60:3:60:4 | ll [post update] [next, y] | conflated.cpp:61:8:61:9 | ll [next, y] | -| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | next [post update] [y] | -| conflated.cpp:60:7:60:10 | next [post update] [y] | conflated.cpp:60:3:60:4 | ll [post update] [next, y] | -| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | -| conflated.cpp:61:8:61:9 | ll [next, y] | conflated.cpp:61:12:61:15 | next [y] | -| conflated.cpp:61:12:61:15 | next [y] | conflated.cpp:61:18:61:18 | y | -| constructors.cpp:18:9:18:9 | this [a_] | constructors.cpp:18:22:18:23 | this [a_] | -| constructors.cpp:18:22:18:23 | this [a_] | constructors.cpp:18:22:18:23 | a_ | -| constructors.cpp:19:9:19:9 | this [b_] | constructors.cpp:19:22:19:23 | this [b_] | -| constructors.cpp:19:22:19:23 | this [b_] | constructors.cpp:19:22:19:23 | b_ | -| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | -| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | -| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | -| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | -| constructors.cpp:26:15:26:15 | f [a_] | constructors.cpp:28:10:28:10 | f [a_] | -| constructors.cpp:26:15:26:15 | f [b_] | constructors.cpp:29:10:29:10 | f [b_] | -| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:18:9:18:9 | this [a_] | -| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:28:12:28:12 | call to a | -| constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:19:9:19:9 | this [b_] | -| constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:29:12:29:12 | call to b | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:34:11:34:26 | call to Foo [a_] | -| constructors.cpp:34:11:34:26 | call to Foo [a_] | constructors.cpp:40:9:40:9 | f [a_] | -| constructors.cpp:35:11:35:26 | call to Foo [b_] | constructors.cpp:43:9:43:9 | g [b_] | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:35:11:35:26 | call to Foo [b_] | -| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | -| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [a_] | -| constructors.cpp:36:11:36:37 | call to Foo [a_] | constructors.cpp:46:9:46:9 | h [a_] | -| constructors.cpp:36:11:36:37 | call to Foo [b_] | constructors.cpp:46:9:46:9 | h [b_] | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [b_] | -| constructors.cpp:40:9:40:9 | f [a_] | constructors.cpp:26:15:26:15 | f [a_] | -| constructors.cpp:43:9:43:9 | g [b_] | constructors.cpp:26:15:26:15 | f [b_] | -| constructors.cpp:46:9:46:9 | h [a_] | constructors.cpp:26:15:26:15 | f [a_] | -| constructors.cpp:46:9:46:9 | h [b_] | constructors.cpp:26:15:26:15 | f [b_] | -| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | -| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | this [post update] [a] | -| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | -| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [a] | -| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | -| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | -| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [a] | -| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | -| qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | qualifiers.cpp:23:10:23:14 | outer [inner, a] | -| qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | -| qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | -| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | -| qualifiers.cpp:23:10:23:14 | outer [inner, a] | qualifiers.cpp:23:16:23:20 | inner [a] | -| qualifiers.cpp:23:16:23:20 | inner [a] | qualifiers.cpp:23:23:23:23 | a | -| qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | qualifiers.cpp:28:10:28:14 | outer [inner, a] | -| qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | -| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | -| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | -| qualifiers.cpp:28:10:28:14 | outer [inner, a] | qualifiers.cpp:28:16:28:20 | inner [a] | -| qualifiers.cpp:28:16:28:20 | inner [a] | qualifiers.cpp:28:23:28:23 | a | -| qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | qualifiers.cpp:33:10:33:14 | outer [inner, a] | -| qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | -| qualifiers.cpp:33:10:33:14 | outer [inner, a] | qualifiers.cpp:33:16:33:20 | inner [a] | -| qualifiers.cpp:33:16:33:20 | inner [a] | qualifiers.cpp:33:23:33:23 | a | -| qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | -| qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | qualifiers.cpp:38:10:38:14 | outer [inner, a] | -| qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | -| qualifiers.cpp:38:10:38:14 | outer [inner, a] | qualifiers.cpp:38:16:38:20 | inner [a] | -| qualifiers.cpp:38:16:38:20 | inner [a] | qualifiers.cpp:38:23:38:23 | a | -| qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | -| qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | -| qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | qualifiers.cpp:43:10:43:14 | outer [inner, a] | -| qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | -| qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | -| qualifiers.cpp:43:10:43:14 | outer [inner, a] | qualifiers.cpp:43:16:43:20 | inner [a] | -| qualifiers.cpp:43:16:43:20 | inner [a] | qualifiers.cpp:43:23:43:23 | a | -| qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | -| qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | qualifiers.cpp:48:10:48:14 | outer [inner, a] | -| qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | -| qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | -| qualifiers.cpp:48:10:48:14 | outer [inner, a] | qualifiers.cpp:48:16:48:20 | inner [a] | -| qualifiers.cpp:48:16:48:20 | inner [a] | qualifiers.cpp:48:23:48:23 | a | -| realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | -| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | -| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | -| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | -| realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | -| realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | -| realistic.cpp:53:55:53:64 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | -| realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | -| realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | -| realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | -| realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | -| realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | -| realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | -| realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | -| realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | userInput [bufferLen] | -| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | -| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | -| realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | -| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:41:17:41:17 | o | -| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:61:47:61:55 | ref arg bufferLen | -| realistic.cpp:61:47:61:55 | ref arg bufferLen | realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | -| simple.cpp:18:9:18:9 | this [a_] | simple.cpp:18:22:18:23 | this [a_] | -| simple.cpp:18:22:18:23 | this [a_] | simple.cpp:18:22:18:23 | a_ | -| simple.cpp:19:9:19:9 | this [b_] | simple.cpp:19:22:19:23 | this [b_] | -| simple.cpp:19:22:19:23 | this [b_] | simple.cpp:19:22:19:23 | b_ | -| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | -| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | this [post update] [a_] | -| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | -| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | this [post update] [b_] | -| simple.cpp:26:15:26:15 | f [a_] | simple.cpp:28:10:28:10 | f [a_] | -| simple.cpp:26:15:26:15 | f [b_] | simple.cpp:29:10:29:10 | f [b_] | -| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:18:9:18:9 | this [a_] | -| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:28:12:28:12 | call to a | -| simple.cpp:29:10:29:10 | f [b_] | simple.cpp:19:9:19:9 | this [b_] | -| simple.cpp:29:10:29:10 | f [b_] | simple.cpp:29:12:29:12 | call to b | -| simple.cpp:39:5:39:5 | ref arg f [a_] | simple.cpp:45:9:45:9 | f [a_] | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | ref arg f [a_] | -| simple.cpp:40:5:40:5 | ref arg g [b_] | simple.cpp:48:9:48:9 | g [b_] | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | ref arg g [b_] | -| simple.cpp:41:5:41:5 | ref arg h [a_] | simple.cpp:51:9:51:9 | h [a_] | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | ref arg h [a_] | -| simple.cpp:42:5:42:5 | ref arg h [b_] | simple.cpp:51:9:51:9 | h [b_] | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | ref arg h [b_] | -| simple.cpp:45:9:45:9 | f [a_] | simple.cpp:26:15:26:15 | f [a_] | -| simple.cpp:48:9:48:9 | g [b_] | simple.cpp:26:15:26:15 | f [b_] | -| simple.cpp:51:9:51:9 | h [a_] | simple.cpp:26:15:26:15 | f [a_] | -| simple.cpp:51:9:51:9 | h [b_] | simple.cpp:26:15:26:15 | f [b_] | -| simple.cpp:65:5:65:5 | a [post update] [i] | simple.cpp:67:10:67:11 | a2 [i] | -| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | a [post update] [i] | -| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | -| simple.cpp:67:10:67:11 | a2 [i] | simple.cpp:67:13:67:13 | i | -| simple.cpp:78:9:78:15 | this [f2, f1] | simple.cpp:79:16:79:17 | this [f2, f1] | -| simple.cpp:79:16:79:17 | f2 [f1] | simple.cpp:79:19:79:20 | f1 | -| simple.cpp:79:16:79:17 | this [f2, f1] | simple.cpp:79:16:79:17 | f2 [f1] | -| simple.cpp:83:9:83:10 | f2 [post update] [f1] | simple.cpp:83:9:83:10 | this [post update] [f2, f1] | -| simple.cpp:83:9:83:10 | this [post update] [f2, f1] | simple.cpp:84:14:84:20 | this [f2, f1] | -| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | f2 [post update] [f1] | -| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | -| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:78:9:78:15 | this [f2, f1] | -| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | -| simple.cpp:92:5:92:5 | a [post update] [i] | simple.cpp:94:10:94:11 | a2 [i] | -| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | a [post update] [i] | -| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | -| simple.cpp:94:10:94:11 | a2 [i] | simple.cpp:94:13:94:13 | i | -| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | -| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | -| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | -| struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | -| struct_init.c:15:12:15:12 | a | struct_init.c:15:12:15:12 | ref arg a | -| struct_init.c:15:12:15:12 | ref arg a | struct_init.c:15:8:15:9 | ab [post update] [a] | -| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:22:8:22:9 | ab [a] | -| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:24:11:24:12 | ab [a] | -| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:28:6:28:7 | ab [a] | -| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:17:20:36 | {...} [a] | -| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | -| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | -| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:24:11:24:12 | ab [a] | -| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:28:6:28:7 | ab [a] | -| struct_init.c:22:11:22:11 | a | realistic.cpp:41:17:41:17 | o | -| struct_init.c:22:11:22:11 | a | struct_init.c:22:11:22:11 | ref arg a | -| struct_init.c:22:11:22:11 | ref arg a | struct_init.c:22:8:22:9 | ab [post update] [a] | -| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:24:10:24:12 | ref arg & ... [a] | -| struct_init.c:24:10:24:12 | ref arg & ... [a] | struct_init.c:28:6:28:7 | ab [a] | -| struct_init.c:24:11:24:12 | ab [a] | struct_init.c:24:10:24:12 | & ... [a] | -| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:31:8:31:12 | outer [nestedAB, a] | -| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | -| struct_init.c:26:23:29:3 | {...} [pointerAB, a] | struct_init.c:33:8:33:12 | outer [pointerAB, a] | -| struct_init.c:27:5:27:23 | {...} [a] | struct_init.c:26:23:29:3 | {...} [nestedAB, a] | -| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:5:27:23 | {...} [a] | -| struct_init.c:28:5:28:7 | & ... [a] | struct_init.c:26:23:29:3 | {...} [pointerAB, a] | -| struct_init.c:28:6:28:7 | ab [a] | struct_init.c:28:5:28:7 | & ... [a] | -| struct_init.c:31:8:31:12 | outer [nestedAB, a] | struct_init.c:31:14:31:21 | nestedAB [a] | -| struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | -| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | -| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | -| struct_init.c:31:14:31:21 | nestedAB [post update] [a] | struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | -| struct_init.c:31:23:31:23 | a | realistic.cpp:41:17:41:17 | o | -| struct_init.c:31:23:31:23 | a | struct_init.c:31:23:31:23 | ref arg a | -| struct_init.c:31:23:31:23 | ref arg a | struct_init.c:31:14:31:21 | nestedAB [post update] [a] | -| struct_init.c:33:8:33:12 | outer [pointerAB, a] | struct_init.c:33:14:33:22 | pointerAB [a] | -| struct_init.c:33:14:33:22 | pointerAB [a] | struct_init.c:33:25:33:25 | a | -| struct_init.c:36:10:36:24 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | -| struct_init.c:36:11:36:15 | outer [nestedAB, a] | struct_init.c:36:17:36:24 | nestedAB [a] | -| struct_init.c:36:17:36:24 | nestedAB [a] | struct_init.c:36:10:36:24 | & ... [a] | -| struct_init.c:40:17:40:36 | {...} [a] | struct_init.c:43:6:43:7 | ab [a] | -| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:17:40:36 | {...} [a] | -| struct_init.c:41:23:44:3 | {...} [pointerAB, a] | struct_init.c:46:10:46:14 | outer [pointerAB, a] | -| struct_init.c:43:5:43:7 | & ... [a] | struct_init.c:41:23:44:3 | {...} [pointerAB, a] | -| struct_init.c:43:6:43:7 | ab [a] | struct_init.c:43:5:43:7 | & ... [a] | -| struct_init.c:46:10:46:14 | outer [pointerAB, a] | struct_init.c:46:16:46:24 | pointerAB [a] | -| struct_init.c:46:16:46:24 | pointerAB [a] | struct_init.c:14:24:14:25 | ab [a] | +| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | provenance | | +| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | this [post update] [c] | provenance | | +| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | provenance | | +| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | this [post update] [c] | provenance | | +| A.cpp:28:8:28:10 | this [c] | A.cpp:28:23:28:26 | this [c] | provenance | | +| A.cpp:28:23:28:26 | this [c] | A.cpp:28:29:28:29 | c | provenance | | +| A.cpp:29:23:29:23 | c | A.cpp:31:20:31:20 | c | provenance | | +| A.cpp:31:14:31:21 | call to B [c] | A.cpp:31:14:31:21 | new [c] | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | provenance | | +| A.cpp:41:5:41:6 | ref arg ct | A.cpp:43:11:43:12 | ct | provenance | | +| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | ref arg ct | provenance | | +| A.cpp:43:11:43:12 | ct | A.cpp:43:10:43:12 | & ... | provenance | | +| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | provenance | | +| A.cpp:48:12:48:18 | call to make [c] | A.cpp:49:10:49:10 | b [c] | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | provenance | | +| A.cpp:48:20:48:20 | c | A.cpp:48:12:48:18 | call to make [c] | provenance | | +| A.cpp:49:10:49:10 | b [c] | A.cpp:49:13:49:13 | c | provenance | | +| A.cpp:55:5:55:5 | ref arg b [c] | A.cpp:56:10:56:10 | b [c] | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:55:12:55:19 | new | A.cpp:55:5:55:5 | ref arg b [c] | provenance | | +| A.cpp:56:10:56:10 | b [c] | A.cpp:28:8:28:10 | this [c] | provenance | | +| A.cpp:56:10:56:10 | b [c] | A.cpp:56:13:56:15 | call to get | provenance | | +| A.cpp:57:11:57:24 | call to B [c] | A.cpp:57:11:57:24 | new [c] | provenance | | +| A.cpp:57:11:57:24 | new [c] | A.cpp:28:8:28:10 | this [c] | provenance | | +| A.cpp:57:11:57:24 | new [c] | A.cpp:57:28:57:30 | call to get | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | provenance | | +| A.cpp:57:17:57:23 | new | A.cpp:57:11:57:24 | call to B [c] | provenance | | +| A.cpp:64:10:64:15 | call to setOnB [c] | A.cpp:66:10:66:11 | b2 [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:64:10:64:15 | call to setOnB [c] | provenance | | +| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:66:10:66:11 | b2 [c] | A.cpp:66:14:66:14 | c | provenance | | +| A.cpp:73:10:73:19 | call to setOnBWrap [c] | A.cpp:75:10:75:11 | b2 [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:73:10:73:19 | call to setOnBWrap [c] | provenance | | +| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | provenance | | +| A.cpp:75:10:75:11 | b2 [c] | A.cpp:75:14:75:14 | c | provenance | | +| A.cpp:78:27:78:27 | c | A.cpp:81:21:81:21 | c | provenance | | +| A.cpp:81:10:81:15 | call to setOnB [c] | A.cpp:82:12:82:24 | ... ? ... : ... [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:81:10:81:15 | call to setOnB [c] | provenance | | +| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | provenance | | +| A.cpp:85:26:85:26 | c | A.cpp:90:15:90:15 | c | provenance | | +| A.cpp:90:7:90:8 | ref arg b2 [c] | A.cpp:91:14:91:15 | b2 [c] | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:90:15:90:15 | c | A.cpp:90:7:90:8 | ref arg b2 [c] | provenance | | +| A.cpp:98:12:98:18 | new | A.cpp:100:5:100:13 | ... = ... | provenance | | +| A.cpp:100:5:100:6 | c1 [post update] [a] | A.cpp:101:8:101:9 | c1 [a] | provenance | | +| A.cpp:100:5:100:13 | ... = ... | A.cpp:100:5:100:6 | c1 [post update] [a] | provenance | | +| A.cpp:101:8:101:9 | c1 [a] | A.cpp:103:14:103:14 | c [a] | provenance | | +| A.cpp:103:14:103:14 | c [a] | A.cpp:107:12:107:13 | c1 [a] | provenance | | +| A.cpp:103:14:103:14 | c [a] | A.cpp:120:12:120:13 | c1 [a] | provenance | | +| A.cpp:107:12:107:13 | c1 [a] | A.cpp:107:16:107:16 | a | provenance | | +| A.cpp:120:12:120:13 | c1 [a] | A.cpp:120:16:120:16 | a | provenance | | +| A.cpp:124:14:124:14 | b [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | | +| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [c] | provenance | | +| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | | +| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | provenance | | +| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | ref arg b [c] | provenance | | +| A.cpp:131:8:131:8 | ref arg b [c] | A.cpp:132:10:132:10 | b [c] | provenance | | +| A.cpp:132:10:132:10 | b [c] | A.cpp:132:13:132:13 | c | provenance | | +| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | provenance | | +| A.cpp:140:13:140:13 | b [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | | +| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [c] | provenance | | +| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:143:7:143:31 | ... = ... [c] | provenance | | +| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | | +| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | b [post update] [c] | provenance | | +| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | provenance | | +| A.cpp:143:7:143:10 | this [post update] [b, c] | A.cpp:151:12:151:24 | call to D [b, c] | provenance | | +| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | provenance | | +| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | provenance | | +| A.cpp:143:7:143:31 | ... = ... [c] | A.cpp:143:7:143:10 | this [post update] [b, c] | provenance | | +| A.cpp:143:25:143:31 | new | A.cpp:143:7:143:31 | ... = ... | provenance | | +| A.cpp:150:12:150:18 | new | A.cpp:151:18:151:18 | b | provenance | | +| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:152:10:152:10 | d [b, c] | provenance | | +| A.cpp:151:12:151:24 | call to D [b, c] | A.cpp:153:10:153:10 | d [b, c] | provenance | | +| A.cpp:151:12:151:24 | call to D [b] | A.cpp:152:10:152:10 | d [b] | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | provenance | | +| A.cpp:151:18:151:18 | b | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:151:18:151:18 | ref arg b [c] | A.cpp:154:10:154:10 | b [c] | provenance | | +| A.cpp:152:10:152:10 | d [b, c] | A.cpp:152:13:152:13 | b [c] | provenance | | +| A.cpp:152:10:152:10 | d [b] | A.cpp:152:13:152:13 | b | provenance | | +| A.cpp:152:10:152:10 | d [post update] [b, c] | A.cpp:153:10:153:10 | d [b, c] | provenance | | +| A.cpp:152:13:152:13 | b [c] | A.cpp:152:13:152:13 | ref arg b [c] | provenance | | +| A.cpp:152:13:152:13 | b [c] | A.cpp:173:26:173:26 | o [c] | provenance | | +| A.cpp:152:13:152:13 | ref arg b [c] | A.cpp:152:10:152:10 | d [post update] [b, c] | provenance | | +| A.cpp:153:10:153:10 | d [b, c] | A.cpp:153:13:153:13 | b [c] | provenance | | +| A.cpp:153:13:153:13 | b [c] | A.cpp:153:16:153:16 | c | provenance | | +| A.cpp:154:10:154:10 | b [c] | A.cpp:154:13:154:13 | c | provenance | | +| A.cpp:159:12:159:18 | new | A.cpp:160:29:160:29 | b | provenance | | +| A.cpp:160:18:160:60 | call to MyList [head] | A.cpp:161:38:161:39 | l1 [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:160:18:160:60 | call to MyList [head] | provenance | | +| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | provenance | | +| A.cpp:161:18:161:40 | call to MyList [next, head] | A.cpp:162:38:162:39 | l2 [next, head] | provenance | | +| A.cpp:161:38:161:39 | l1 [head] | A.cpp:161:18:161:40 | call to MyList [next, head] | provenance | | +| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:165:10:165:11 | l3 [next, next, head] | provenance | | +| A.cpp:162:18:162:40 | call to MyList [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | provenance | | +| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] | provenance | | +| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | provenance | | +| A.cpp:165:10:165:11 | l3 [next, next, head] | A.cpp:165:14:165:17 | next [next, head] | provenance | | +| A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | A.cpp:167:44:167:44 | l [next, next, head] | provenance | | +| A.cpp:165:14:165:17 | next [next, head] | A.cpp:165:20:165:23 | next [head] | provenance | | +| A.cpp:165:14:165:17 | next [post update] [next, head] | A.cpp:165:10:165:11 | l3 [post update] [next, next, head] | provenance | | +| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | provenance | | +| A.cpp:165:20:165:23 | next [head] | A.cpp:165:26:165:29 | head | provenance | | +| A.cpp:165:20:165:23 | next [post update] [head] | A.cpp:165:14:165:17 | next [post update] [next, head] | provenance | | +| A.cpp:165:26:165:29 | head | A.cpp:165:26:165:29 | ref arg head | provenance | | +| A.cpp:165:26:165:29 | head | A.cpp:173:26:173:26 | o | provenance | | +| A.cpp:165:26:165:29 | ref arg head | A.cpp:165:20:165:23 | next [post update] [head] | provenance | | +| A.cpp:167:44:167:44 | l [next, head] | A.cpp:167:47:167:50 | next [head] | provenance | | +| A.cpp:167:44:167:44 | l [next, next, head] | A.cpp:167:47:167:50 | next [next, head] | provenance | | +| A.cpp:167:47:167:50 | next [head] | A.cpp:169:12:169:12 | l [head] | provenance | | +| A.cpp:167:47:167:50 | next [next, head] | A.cpp:167:44:167:44 | l [next, head] | provenance | | +| A.cpp:169:12:169:12 | l [head] | A.cpp:169:15:169:18 | head | provenance | | +| A.cpp:173:26:173:26 | o | A.cpp:173:26:173:26 | o | provenance | | +| A.cpp:173:26:173:26 | o [c] | A.cpp:173:26:173:26 | o [c] | provenance | | +| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | provenance | | +| A.cpp:181:32:181:35 | next [head] | A.cpp:184:7:184:23 | ... = ... [head] | provenance | | +| A.cpp:181:32:181:35 | next [next, head] | A.cpp:184:7:184:23 | ... = ... [next, head] | provenance | | +| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | this [post update] [head] | provenance | | +| A.cpp:184:7:184:23 | ... = ... [head] | A.cpp:184:7:184:10 | this [post update] [next, head] | provenance | | +| A.cpp:184:7:184:23 | ... = ... [next, head] | A.cpp:184:7:184:10 | this [post update] [next, next, head] | provenance | | +| B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | provenance | | +| B.cpp:7:16:7:35 | call to Box1 [elem1] | B.cpp:8:25:8:26 | b1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:7:16:7:35 | call to Box1 [elem1] | provenance | | +| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | provenance | | +| B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | B.cpp:9:10:9:11 | b2 [box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | provenance | | +| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | provenance | | +| B.cpp:9:10:9:11 | b2 [box1, elem1] | B.cpp:9:14:9:17 | box1 [elem1] | provenance | | +| B.cpp:9:14:9:17 | box1 [elem1] | B.cpp:9:20:9:24 | elem1 | provenance | | +| B.cpp:15:15:15:27 | new | B.cpp:16:37:16:37 | e | provenance | | +| B.cpp:16:16:16:38 | call to Box1 [elem2] | B.cpp:17:25:17:26 | b1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:16:16:16:38 | call to Box1 [elem2] | provenance | | +| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | provenance | | +| B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | B.cpp:19:10:19:11 | b2 [box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | provenance | | +| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | provenance | | +| B.cpp:19:10:19:11 | b2 [box1, elem2] | B.cpp:19:14:19:17 | box1 [elem2] | provenance | | +| B.cpp:19:14:19:17 | box1 [elem2] | B.cpp:19:20:19:24 | elem2 | provenance | | +| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | provenance | | +| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | provenance | | +| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | this [post update] [elem1] | provenance | | +| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | this [post update] [elem2] | provenance | | +| B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:46:7:46:21 | ... = ... [elem1] | provenance | | +| B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:46:7:46:21 | ... = ... [elem2] | provenance | | +| B.cpp:46:7:46:21 | ... = ... [elem1] | B.cpp:46:7:46:10 | this [post update] [box1, elem1] | provenance | | +| B.cpp:46:7:46:21 | ... = ... [elem2] | B.cpp:46:7:46:10 | this [post update] [box1, elem2] | provenance | | +| C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | c [s1] | provenance | | +| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | c [s3] | provenance | | +| C.cpp:19:5:19:5 | c [s1] | C.cpp:27:8:27:11 | this [s1] | provenance | | +| C.cpp:19:5:19:5 | c [s3] | C.cpp:27:8:27:11 | this [s3] | provenance | | +| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | +| C.cpp:22:12:22:21 | new | C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | provenance | | +| C.cpp:24:5:24:8 | this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | | +| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | this [post update] [s3] | provenance | | +| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | provenance | | +| C.cpp:27:8:27:11 | this [s1] | C.cpp:29:10:29:11 | this [s1] | provenance | | +| C.cpp:27:8:27:11 | this [s3] | C.cpp:31:10:31:11 | this [s3] | provenance | | +| C.cpp:29:10:29:11 | this [s1] | C.cpp:29:10:29:11 | s1 | provenance | | +| C.cpp:31:10:31:11 | this [s3] | C.cpp:31:10:31:11 | s3 | provenance | | +| D.cpp:10:11:10:17 | this [elem] | D.cpp:10:30:10:33 | this [elem] | provenance | | +| D.cpp:10:30:10:33 | this [elem] | D.cpp:10:30:10:33 | elem | provenance | | +| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | provenance | | +| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | this [post update] [elem] | provenance | | +| D.cpp:17:11:17:17 | this [box, elem] | D.cpp:17:30:17:32 | this [box, elem] | provenance | | +| D.cpp:17:30:17:32 | this [box, elem] | D.cpp:17:30:17:32 | box [elem] | provenance | | +| D.cpp:21:30:21:31 | b2 [box, elem] | D.cpp:22:10:22:11 | b2 [box, elem] | provenance | | +| D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:17:11:17:17 | this [box, elem] | provenance | | +| D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:22:14:22:20 | call to getBox1 [elem] | provenance | | +| D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:10:11:10:17 | this [elem] | provenance | | +| D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:22:25:22:31 | call to getElem | provenance | | +| D.cpp:28:15:28:24 | new | D.cpp:30:5:30:20 | ... = ... | provenance | | +| D.cpp:30:5:30:5 | b [post update] [box, elem] | D.cpp:31:14:31:14 | b [box, elem] | provenance | | +| D.cpp:30:5:30:20 | ... = ... | D.cpp:30:8:30:10 | box [post update] [elem] | provenance | | +| D.cpp:30:8:30:10 | box [post update] [elem] | D.cpp:30:5:30:5 | b [post update] [box, elem] | provenance | | +| D.cpp:31:14:31:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | +| D.cpp:35:15:35:24 | new | D.cpp:37:21:37:21 | e | provenance | | +| D.cpp:37:5:37:5 | b [post update] [box, elem] | D.cpp:38:14:38:14 | b [box, elem] | provenance | | +| D.cpp:37:8:37:10 | ref arg box [elem] | D.cpp:37:5:37:5 | b [post update] [box, elem] | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | provenance | | +| D.cpp:37:21:37:21 | e | D.cpp:37:8:37:10 | ref arg box [elem] | provenance | | +| D.cpp:38:14:38:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | +| D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | provenance | | +| D.cpp:44:5:44:5 | ref arg b [box, elem] | D.cpp:45:14:45:14 | b [box, elem] | provenance | | +| D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | provenance | | +| D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | ref arg b [box, elem] | provenance | | +| D.cpp:45:14:45:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | +| D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | provenance | | +| D.cpp:51:5:51:5 | ref arg b [box, elem] | D.cpp:52:14:52:14 | b [box, elem] | provenance | | +| D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | D.cpp:51:5:51:5 | ref arg b [box, elem] | provenance | | +| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | provenance | | +| D.cpp:51:27:51:27 | e | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | provenance | | +| D.cpp:52:14:52:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | +| D.cpp:56:15:56:24 | new | D.cpp:58:5:58:27 | ... = ... | provenance | | +| D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | provenance | | +| D.cpp:58:5:58:12 | this [post update] [boxfield, box, elem] | D.cpp:59:5:59:7 | this [boxfield, box, elem] | provenance | | +| D.cpp:58:5:58:27 | ... = ... | D.cpp:58:15:58:17 | box [post update] [elem] | provenance | | +| D.cpp:58:15:58:17 | box [post update] [elem] | D.cpp:58:5:58:12 | boxfield [post update] [box, elem] | provenance | | +| D.cpp:59:5:59:7 | this [boxfield, box, elem] | D.cpp:63:8:63:10 | this [boxfield, box, elem] | provenance | | +| D.cpp:63:8:63:10 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | this [boxfield, box, elem] | provenance | | +| D.cpp:64:10:64:17 | boxfield [box, elem] | D.cpp:64:20:64:22 | box [elem] | provenance | | +| D.cpp:64:10:64:17 | this [boxfield, box, elem] | D.cpp:64:10:64:17 | boxfield [box, elem] | provenance | | +| D.cpp:64:20:64:22 | box [elem] | D.cpp:64:25:64:28 | elem | provenance | | +| E.cpp:19:27:19:27 | p [data, buffer] | E.cpp:21:10:21:10 | p [data, buffer] | provenance | | +| E.cpp:21:10:21:10 | p [data, buffer] | E.cpp:21:13:21:16 | data [buffer] | provenance | | +| E.cpp:21:13:21:16 | data [buffer] | E.cpp:21:18:21:23 | buffer | provenance | | +| E.cpp:28:21:28:23 | ref arg raw | E.cpp:31:10:31:12 | raw | provenance | | +| E.cpp:29:21:29:21 | b [post update] [buffer] | E.cpp:32:10:32:10 | b [buffer] | provenance | | +| E.cpp:29:24:29:29 | ref arg buffer | E.cpp:29:21:29:21 | b [post update] [buffer] | provenance | | +| E.cpp:30:21:30:21 | p [post update] [data, buffer] | E.cpp:33:19:33:19 | p [data, buffer] | provenance | | +| E.cpp:30:23:30:26 | data [post update] [buffer] | E.cpp:30:21:30:21 | p [post update] [data, buffer] | provenance | | +| E.cpp:30:28:30:33 | ref arg buffer | E.cpp:30:23:30:26 | data [post update] [buffer] | provenance | | +| E.cpp:32:10:32:10 | b [buffer] | E.cpp:32:13:32:18 | buffer | provenance | | +| E.cpp:33:18:33:19 | & ... [data, buffer] | E.cpp:19:27:19:27 | p [data, buffer] | provenance | | +| E.cpp:33:19:33:19 | p [data, buffer] | E.cpp:33:18:33:19 | & ... [data, buffer] | provenance | | +| aliasing.cpp:8:23:8:23 | s [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | | +| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [m1] | provenance | | +| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | | +| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | s [post update] [m1] | provenance | | +| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | provenance | | +| aliasing.cpp:12:25:12:25 | s [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | | +| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [m1] | provenance | | +| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | | +| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | s [post update] [m1] | provenance | | +| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | provenance | | +| aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | aliasing.cpp:29:8:29:9 | s1 [m1] | provenance | | +| aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | aliasing.cpp:30:8:30:9 | s2 [m1] | provenance | | +| aliasing.cpp:29:8:29:9 | s1 [m1] | aliasing.cpp:29:11:29:12 | m1 | provenance | | +| aliasing.cpp:30:8:30:9 | s2 [m1] | aliasing.cpp:30:11:30:12 | m1 | provenance | | +| aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | aliasing.cpp:62:8:62:12 | copy2 [m1] | provenance | | +| aliasing.cpp:60:3:60:22 | ... = ... | aliasing.cpp:60:3:60:4 | s2 [post update] [m1] | provenance | | +| aliasing.cpp:60:11:60:20 | call to user_input | aliasing.cpp:60:3:60:22 | ... = ... | provenance | | +| aliasing.cpp:62:8:62:12 | copy2 [m1] | aliasing.cpp:62:14:62:15 | m1 | provenance | | +| aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | aliasing.cpp:93:8:93:8 | w [s, m1] | provenance | | +| aliasing.cpp:92:3:92:23 | ... = ... | aliasing.cpp:92:5:92:5 | s [post update] [m1] | provenance | | +| aliasing.cpp:92:5:92:5 | s [post update] [m1] | aliasing.cpp:92:3:92:3 | w [post update] [s, m1] | provenance | | +| aliasing.cpp:92:12:92:21 | call to user_input | aliasing.cpp:92:3:92:23 | ... = ... | provenance | | +| aliasing.cpp:93:8:93:8 | w [s, m1] | aliasing.cpp:93:10:93:10 | s [m1] | provenance | | +| aliasing.cpp:93:10:93:10 | s [m1] | aliasing.cpp:93:12:93:13 | m1 | provenance | | +| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:158:17:158:20 | ref arg data | provenance | | +| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:164:17:164:20 | ref arg data | provenance | | +| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | | +| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | | +| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:158:17:158:20 | ref arg data | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:164:17:164:20 | ref arg data | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | | +| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | | +| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa | provenance | | +| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:106:4:106:5 | pa [inner post update] | provenance | | +| aliasing.cpp:158:15:158:15 | s [post update] [data] | aliasing.cpp:159:9:159:9 | s [data] | provenance | | +| aliasing.cpp:158:17:158:20 | ref arg data | aliasing.cpp:158:15:158:15 | s [post update] [data] | provenance | | +| aliasing.cpp:159:9:159:9 | s [data] | aliasing.cpp:159:11:159:14 | data | provenance | | +| aliasing.cpp:159:11:159:14 | data | aliasing.cpp:159:8:159:14 | * ... | provenance | | +| aliasing.cpp:164:15:164:15 | s [post update] [data] | aliasing.cpp:165:8:165:8 | s [data] | provenance | | +| aliasing.cpp:164:17:164:20 | ref arg data | aliasing.cpp:164:15:164:15 | s [post update] [data] | provenance | | +| aliasing.cpp:165:8:165:8 | s [data] | aliasing.cpp:165:10:165:13 | data | provenance | | +| aliasing.cpp:165:10:165:13 | data | aliasing.cpp:165:8:165:16 | access to array | provenance | | +| aliasing.cpp:175:15:175:22 | ref arg & ... | aliasing.cpp:175:21:175:22 | m1 [inner post update] | provenance | | +| aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | aliasing.cpp:176:8:176:9 | s2 [s, m1] | provenance | | +| aliasing.cpp:175:19:175:19 | s [post update] [m1] | aliasing.cpp:175:16:175:17 | s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:175:21:175:22 | m1 [inner post update] | aliasing.cpp:175:19:175:19 | s [post update] [m1] | provenance | | +| aliasing.cpp:176:8:176:9 | s2 [s, m1] | aliasing.cpp:176:11:176:11 | s [m1] | provenance | | +| aliasing.cpp:176:11:176:11 | s [m1] | aliasing.cpp:176:13:176:14 | m1 | provenance | | +| aliasing.cpp:187:15:187:22 | ref arg & ... | aliasing.cpp:187:21:187:22 | m1 [inner post update] | provenance | | +| aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | provenance | | +| aliasing.cpp:187:19:187:19 | s [post update] [m1] | aliasing.cpp:187:16:187:17 | s2 [post update] [s, m1] | provenance | | +| aliasing.cpp:187:21:187:22 | m1 [inner post update] | aliasing.cpp:187:19:187:19 | s [post update] [m1] | provenance | | +| aliasing.cpp:189:8:189:11 | s2_2 [s, m1] | aliasing.cpp:189:13:189:13 | s [m1] | provenance | | +| aliasing.cpp:189:13:189:13 | s [m1] | aliasing.cpp:189:15:189:16 | m1 | provenance | | +| aliasing.cpp:200:15:200:24 | ref arg & ... | aliasing.cpp:200:23:200:24 | m1 [inner post update] | provenance | | +| aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | aliasing.cpp:201:8:201:10 | ps2 [s, m1] | provenance | | +| aliasing.cpp:200:21:200:21 | s [post update] [m1] | aliasing.cpp:200:16:200:18 | ps2 [post update] [s, m1] | provenance | | +| aliasing.cpp:200:23:200:24 | m1 [inner post update] | aliasing.cpp:200:21:200:21 | s [post update] [m1] | provenance | | +| aliasing.cpp:201:8:201:10 | ps2 [s, m1] | aliasing.cpp:201:13:201:13 | s [m1] | provenance | | +| aliasing.cpp:201:13:201:13 | s [m1] | aliasing.cpp:201:15:201:16 | m1 | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:7:8:7:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:8:8:8:13 | access to array | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:9:8:9:11 | * ... | provenance | | +| arrays.cpp:6:12:6:21 | call to user_input | arrays.cpp:10:8:10:15 | * ... | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:16:8:16:13 | access to array | provenance | | +| arrays.cpp:15:14:15:23 | call to user_input | arrays.cpp:17:8:17:13 | access to array | provenance | | +| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:37:8:37:8 | o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | provenance | | +| arrays.cpp:36:3:36:17 | access to array [post update] [data] | arrays.cpp:36:12:36:14 | arr [inner post update] [data] | provenance | | +| arrays.cpp:36:3:36:37 | ... = ... | arrays.cpp:36:3:36:17 | access to array [post update] [data] | provenance | | +| arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | arrays.cpp:36:3:36:3 | o [post update] [nested, arr, data] | provenance | | +| arrays.cpp:36:12:36:14 | arr [inner post update] [data] | arrays.cpp:36:5:36:10 | nested [post update] [arr, data] | provenance | | +| arrays.cpp:36:26:36:35 | call to user_input | arrays.cpp:36:3:36:37 | ... = ... | provenance | | +| arrays.cpp:37:8:37:8 | o [nested, arr, data] | arrays.cpp:37:10:37:15 | nested [arr, data] | provenance | | +| arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | arrays.cpp:38:8:38:8 | o [nested, arr, data] | provenance | | +| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | provenance | | +| arrays.cpp:37:8:37:22 | access to array [data] | arrays.cpp:37:24:37:27 | data | provenance | | +| arrays.cpp:37:8:37:22 | access to array [post update] [data] | arrays.cpp:37:17:37:19 | arr [inner post update] [data] | provenance | | +| arrays.cpp:37:10:37:15 | nested [arr, data] | arrays.cpp:37:17:37:19 | arr [data] | provenance | | +| arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | arrays.cpp:37:8:37:8 | o [post update] [nested, arr, data] | provenance | | +| arrays.cpp:37:17:37:19 | arr [data] | arrays.cpp:37:8:37:22 | access to array [data] | provenance | | +| arrays.cpp:37:17:37:19 | arr [inner post update] [data] | arrays.cpp:37:10:37:15 | nested [post update] [arr, data] | provenance | | +| arrays.cpp:37:24:37:27 | data | arrays.cpp:37:24:37:27 | ref arg data | provenance | | +| arrays.cpp:37:24:37:27 | data | realistic.cpp:41:17:41:17 | o | provenance | | +| arrays.cpp:37:24:37:27 | ref arg data | arrays.cpp:37:8:37:22 | access to array [post update] [data] | provenance | | +| arrays.cpp:38:8:38:8 | o [nested, arr, data] | arrays.cpp:38:10:38:15 | nested [arr, data] | provenance | | +| arrays.cpp:38:8:38:22 | access to array [data] | arrays.cpp:38:24:38:27 | data | provenance | | +| arrays.cpp:38:10:38:15 | nested [arr, data] | arrays.cpp:38:17:38:19 | arr [data] | provenance | | +| arrays.cpp:38:17:38:19 | arr [data] | arrays.cpp:38:8:38:22 | access to array [data] | provenance | | +| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:43:8:43:8 | o [indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | provenance | | +| arrays.cpp:42:3:42:20 | access to array [post update] [data] | arrays.cpp:42:15:42:17 | arr [inner post update] [data] | provenance | | +| arrays.cpp:42:3:42:40 | ... = ... | arrays.cpp:42:3:42:20 | access to array [post update] [data] | provenance | | +| arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | arrays.cpp:42:3:42:3 | o [post update] [indirect, arr, data] | provenance | | +| arrays.cpp:42:15:42:17 | arr [inner post update] [data] | arrays.cpp:42:5:42:12 | indirect [post update] [arr, data] | provenance | | +| arrays.cpp:42:29:42:38 | call to user_input | arrays.cpp:42:3:42:40 | ... = ... | provenance | | +| arrays.cpp:43:8:43:8 | o [indirect, arr, data] | arrays.cpp:43:10:43:17 | indirect [arr, data] | provenance | | +| arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | arrays.cpp:44:8:44:8 | o [indirect, arr, data] | provenance | | +| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | provenance | | +| arrays.cpp:43:8:43:25 | access to array [data] | arrays.cpp:43:27:43:30 | data | provenance | | +| arrays.cpp:43:8:43:25 | access to array [post update] [data] | arrays.cpp:43:20:43:22 | arr [inner post update] [data] | provenance | | +| arrays.cpp:43:10:43:17 | indirect [arr, data] | arrays.cpp:43:20:43:22 | arr [data] | provenance | | +| arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | arrays.cpp:43:8:43:8 | o [post update] [indirect, arr, data] | provenance | | +| arrays.cpp:43:20:43:22 | arr [data] | arrays.cpp:43:8:43:25 | access to array [data] | provenance | | +| arrays.cpp:43:20:43:22 | arr [inner post update] [data] | arrays.cpp:43:10:43:17 | indirect [post update] [arr, data] | provenance | | +| arrays.cpp:43:27:43:30 | data | arrays.cpp:43:27:43:30 | ref arg data | provenance | | +| arrays.cpp:43:27:43:30 | data | realistic.cpp:41:17:41:17 | o | provenance | | +| arrays.cpp:43:27:43:30 | ref arg data | arrays.cpp:43:8:43:25 | access to array [post update] [data] | provenance | | +| arrays.cpp:44:8:44:8 | o [indirect, arr, data] | arrays.cpp:44:10:44:17 | indirect [arr, data] | provenance | | +| arrays.cpp:44:8:44:25 | access to array [data] | arrays.cpp:44:27:44:30 | data | provenance | | +| arrays.cpp:44:10:44:17 | indirect [arr, data] | arrays.cpp:44:20:44:22 | arr [data] | provenance | | +| arrays.cpp:44:20:44:22 | arr [data] | arrays.cpp:44:8:44:25 | access to array [data] | provenance | | +| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | provenance | | +| by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [a] | provenance | | +| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | s [post update] [a] | provenance | | +| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | provenance | | +| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | this [post update] [a] | provenance | | +| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | provenance | | +| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | provenance | | +| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | ref arg this [a] | provenance | | +| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | provenance | | +| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | provenance | | +| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | ref arg this [a] | provenance | | +| by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:12:32:12 | s [a] | provenance | | +| by_reference.cpp:32:12:32:12 | s [a] | by_reference.cpp:32:15:32:15 | a | provenance | | +| by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:12:36:15 | this [a] | provenance | | +| by_reference.cpp:36:12:36:15 | this [a] | by_reference.cpp:36:18:36:18 | a | provenance | | +| by_reference.cpp:39:9:39:21 | this [a] | by_reference.cpp:40:12:40:15 | this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:35:9:35:19 | this [a] | provenance | | +| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | provenance | | +| by_reference.cpp:43:9:43:27 | this [a] | by_reference.cpp:44:26:44:29 | this [a] | provenance | | +| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:31:46:31:46 | s [a] | provenance | | +| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | provenance | | +| by_reference.cpp:50:3:50:3 | ref arg s [a] | by_reference.cpp:51:8:51:8 | s [a] | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | provenance | | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:50:3:50:3 | ref arg s [a] | provenance | | +| by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:35:9:35:19 | this [a] | provenance | | +| by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:51:10:51:20 | call to getDirectly | provenance | | +| by_reference.cpp:56:3:56:3 | ref arg s [a] | by_reference.cpp:57:8:57:8 | s [a] | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | provenance | | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:56:3:56:3 | ref arg s [a] | provenance | | +| by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:39:9:39:21 | this [a] | provenance | | +| by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:57:10:57:22 | call to getIndirectly | provenance | | +| by_reference.cpp:62:3:62:3 | ref arg s [a] | by_reference.cpp:63:8:63:8 | s [a] | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | provenance | | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:62:3:62:3 | ref arg s [a] | provenance | | +| by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:43:9:43:27 | this [a] | provenance | | +| by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | provenance | | +| by_reference.cpp:68:17:68:18 | ref arg & ... [a] | by_reference.cpp:69:23:69:23 | s [a] | provenance | | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | provenance | | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | ref arg & ... [a] | provenance | | +| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:31:46:31:46 | s [a] | provenance | | +| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | provenance | | +| by_reference.cpp:69:23:69:23 | s [a] | by_reference.cpp:69:22:69:23 | & ... [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | | +| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | inner [post update] [a] | provenance | | +| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | provenance | | +| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | | +| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | | +| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | inner [post update] [a] | provenance | | +| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | provenance | | +| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | | +| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | | +| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | | +| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | | +| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa | provenance | | +| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:92:4:92:5 | pa [inner post update] | provenance | | +| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:124:21:124:21 | ref arg a | provenance | | +| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:128:23:128:23 | ref arg a | provenance | | +| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | pa | provenance | | +| by_reference.cpp:102:21:102:39 | ref arg & ... [a] | by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | provenance | | +| by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | provenance | | +| by_reference.cpp:102:28:102:39 | inner_nested [inner post update] [a] | by_reference.cpp:102:22:102:26 | outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | provenance | | +| by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | by_reference.cpp:103:21:103:25 | outer [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:104:15:104:22 | ref arg & ... | by_reference.cpp:104:22:104:22 | a [inner post update] | provenance | | +| by_reference.cpp:104:16:104:20 | outer [post update] [a] | by_reference.cpp:112:8:112:12 | outer [a] | provenance | | +| by_reference.cpp:104:22:104:22 | a [inner post update] | by_reference.cpp:104:16:104:20 | outer [post update] [a] | provenance | | +| by_reference.cpp:106:21:106:41 | ref arg & ... [a] | by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | provenance | | +| by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | provenance | | +| by_reference.cpp:106:30:106:41 | inner_nested [inner post update] [a] | by_reference.cpp:106:22:106:27 | pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | provenance | | +| by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | by_reference.cpp:107:21:107:26 | pouter [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:108:15:108:24 | ref arg & ... | by_reference.cpp:108:24:108:24 | a [inner post update] | provenance | | +| by_reference.cpp:108:16:108:21 | pouter [post update] [a] | by_reference.cpp:116:8:116:13 | pouter [a] | provenance | | +| by_reference.cpp:108:24:108:24 | a [inner post update] | by_reference.cpp:108:16:108:21 | pouter [post update] [a] | provenance | | +| by_reference.cpp:110:8:110:12 | outer [inner_nested, a] | by_reference.cpp:110:14:110:25 | inner_nested [a] | provenance | | +| by_reference.cpp:110:14:110:25 | inner_nested [a] | by_reference.cpp:110:27:110:27 | a | provenance | | +| by_reference.cpp:111:8:111:12 | outer [inner_ptr, a] | by_reference.cpp:111:14:111:22 | inner_ptr [a] | provenance | | +| by_reference.cpp:111:14:111:22 | inner_ptr [a] | by_reference.cpp:111:25:111:25 | a | provenance | | +| by_reference.cpp:112:8:112:12 | outer [a] | by_reference.cpp:112:14:112:14 | a | provenance | | +| by_reference.cpp:114:8:114:13 | pouter [inner_nested, a] | by_reference.cpp:114:16:114:27 | inner_nested [a] | provenance | | +| by_reference.cpp:114:16:114:27 | inner_nested [a] | by_reference.cpp:114:29:114:29 | a | provenance | | +| by_reference.cpp:115:8:115:13 | pouter [inner_ptr, a] | by_reference.cpp:115:16:115:24 | inner_ptr [a] | provenance | | +| by_reference.cpp:115:16:115:24 | inner_ptr [a] | by_reference.cpp:115:27:115:27 | a | provenance | | +| by_reference.cpp:116:8:116:13 | pouter [a] | by_reference.cpp:116:16:116:16 | a | provenance | | +| by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | provenance | | +| by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | by_reference.cpp:122:21:122:25 | outer [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:123:21:123:36 | ref arg * ... [a] | by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | provenance | | +| by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | provenance | | +| by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] [a] | by_reference.cpp:123:22:123:26 | outer [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:124:15:124:19 | outer [post update] [a] | by_reference.cpp:132:8:132:12 | outer [a] | provenance | | +| by_reference.cpp:124:21:124:21 | ref arg a | by_reference.cpp:124:15:124:19 | outer [post update] [a] | provenance | | +| by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | provenance | | +| by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | by_reference.cpp:126:21:126:26 | pouter [post update] [inner_nested, a] | provenance | | +| by_reference.cpp:127:21:127:38 | ref arg * ... [a] | by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | provenance | | +| by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | provenance | | +| by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] [a] | by_reference.cpp:127:22:127:27 | pouter [post update] [inner_ptr, a] | provenance | | +| by_reference.cpp:128:15:128:20 | pouter [post update] [a] | by_reference.cpp:136:8:136:13 | pouter [a] | provenance | | +| by_reference.cpp:128:23:128:23 | ref arg a | by_reference.cpp:128:15:128:20 | pouter [post update] [a] | provenance | | +| by_reference.cpp:130:8:130:12 | outer [inner_nested, a] | by_reference.cpp:130:14:130:25 | inner_nested [a] | provenance | | +| by_reference.cpp:130:14:130:25 | inner_nested [a] | by_reference.cpp:130:27:130:27 | a | provenance | | +| by_reference.cpp:131:8:131:12 | outer [inner_ptr, a] | by_reference.cpp:131:14:131:22 | inner_ptr [a] | provenance | | +| by_reference.cpp:131:14:131:22 | inner_ptr [a] | by_reference.cpp:131:25:131:25 | a | provenance | | +| by_reference.cpp:132:8:132:12 | outer [a] | by_reference.cpp:132:14:132:14 | a | provenance | | +| by_reference.cpp:134:8:134:13 | pouter [inner_nested, a] | by_reference.cpp:134:16:134:27 | inner_nested [a] | provenance | | +| by_reference.cpp:134:16:134:27 | inner_nested [a] | by_reference.cpp:134:29:134:29 | a | provenance | | +| by_reference.cpp:135:8:135:13 | pouter [inner_ptr, a] | by_reference.cpp:135:16:135:24 | inner_ptr [a] | provenance | | +| by_reference.cpp:135:16:135:24 | inner_ptr [a] | by_reference.cpp:135:27:135:27 | a | provenance | | +| by_reference.cpp:136:8:136:13 | pouter [a] | by_reference.cpp:136:16:136:16 | a | provenance | | +| clearning.cpp:53:4:53:4 | s [post update] [x] | clearning.cpp:55:8:55:8 | s [x] | provenance | | +| clearning.cpp:53:6:53:6 | x [inner post update] | clearning.cpp:53:4:53:4 | s [post update] [x] | provenance | | +| clearning.cpp:53:10:53:19 | call to user_input | clearning.cpp:53:6:53:6 | x [inner post update] | provenance | | +| clearning.cpp:55:8:55:8 | s [x] | clearning.cpp:55:10:55:10 | x | provenance | | +| clearning.cpp:124:2:124:2 | s [post update] [val] | clearning.cpp:126:7:126:7 | s [val] | provenance | | +| clearning.cpp:124:2:124:25 | ... = ... | clearning.cpp:124:2:124:2 | s [post update] [val] | provenance | | +| clearning.cpp:124:10:124:19 | call to user_input | clearning.cpp:124:2:124:25 | ... = ... | provenance | | +| clearning.cpp:126:7:126:7 | s [val] | clearning.cpp:126:9:126:11 | val | provenance | | +| clearning.cpp:131:2:131:2 | s [post update] [val] | clearning.cpp:133:7:133:7 | s [val] | provenance | | +| clearning.cpp:131:2:131:25 | ... = ... | clearning.cpp:131:2:131:2 | s [post update] [val] | provenance | | +| clearning.cpp:131:10:131:19 | call to user_input | clearning.cpp:131:2:131:25 | ... = ... | provenance | | +| clearning.cpp:133:7:133:7 | s [val] | clearning.cpp:133:9:133:11 | val | provenance | | +| clearning.cpp:138:2:138:2 | s [post update] [val] | clearning.cpp:140:7:140:7 | s [val] | provenance | | +| clearning.cpp:138:2:138:25 | ... = ... | clearning.cpp:138:2:138:2 | s [post update] [val] | provenance | | +| clearning.cpp:138:10:138:19 | call to user_input | clearning.cpp:138:2:138:25 | ... = ... | provenance | | +| clearning.cpp:140:7:140:7 | s [val] | clearning.cpp:140:9:140:11 | val | provenance | | +| clearning.cpp:151:3:151:3 | s [post update] [val] | clearning.cpp:152:8:152:8 | s [val] | provenance | | +| clearning.cpp:151:3:151:22 | ... = ... | clearning.cpp:151:3:151:3 | s [post update] [val] | provenance | | +| clearning.cpp:151:11:151:20 | call to user_input | clearning.cpp:151:3:151:22 | ... = ... | provenance | | +| clearning.cpp:152:8:152:8 | s [val] | clearning.cpp:152:10:152:12 | val | provenance | | +| clearning.cpp:157:3:157:3 | s [post update] [val] | clearning.cpp:159:8:159:8 | s [val] | provenance | | +| clearning.cpp:157:3:157:22 | ... = ... | clearning.cpp:157:3:157:3 | s [post update] [val] | provenance | | +| clearning.cpp:157:11:157:20 | call to user_input | clearning.cpp:157:3:157:22 | ... = ... | provenance | | +| clearning.cpp:159:8:159:8 | s [val] | clearning.cpp:159:10:159:12 | val | provenance | | +| clearning.cpp:164:3:164:3 | s [post update] [val] | clearning.cpp:166:8:166:8 | s [val] | provenance | | +| clearning.cpp:164:3:164:22 | ... = ... | clearning.cpp:164:3:164:3 | s [post update] [val] | provenance | | +| clearning.cpp:164:11:164:20 | call to user_input | clearning.cpp:164:3:164:22 | ... = ... | provenance | | +| clearning.cpp:166:8:166:8 | s [val] | clearning.cpp:166:10:166:12 | val | provenance | | +| clearning.cpp:171:3:171:3 | s [post update] [val] | clearning.cpp:173:8:173:8 | s [val] | provenance | | +| clearning.cpp:171:3:171:22 | ... = ... | clearning.cpp:171:3:171:3 | s [post update] [val] | provenance | | +| clearning.cpp:171:11:171:20 | call to user_input | clearning.cpp:171:3:171:22 | ... = ... | provenance | | +| clearning.cpp:173:8:173:8 | s [val] | clearning.cpp:173:10:173:12 | val | provenance | | +| clearning.cpp:178:3:178:3 | s [post update] [val] | clearning.cpp:180:8:180:8 | s [val] | provenance | | +| clearning.cpp:178:3:178:22 | ... = ... | clearning.cpp:178:3:178:3 | s [post update] [val] | provenance | | +| clearning.cpp:178:11:178:20 | call to user_input | clearning.cpp:178:3:178:22 | ... = ... | provenance | | +| clearning.cpp:180:8:180:8 | s [val] | clearning.cpp:180:10:180:12 | val | provenance | | +| complex.cpp:9:7:9:7 | this [a_] | complex.cpp:9:20:9:21 | this [a_] | provenance | | +| complex.cpp:9:20:9:21 | this [a_] | complex.cpp:9:20:9:21 | a_ | provenance | | +| complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | this [b_] | provenance | | +| complex.cpp:10:20:10:21 | this [b_] | complex.cpp:10:20:10:21 | b_ | provenance | | +| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | provenance | | +| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | this [post update] [a_] | provenance | | +| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | provenance | | +| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | this [post update] [b_] | provenance | | +| complex.cpp:40:17:40:17 | b [inner, f, a_] | complex.cpp:42:8:42:8 | b [inner, f, a_] | provenance | | +| complex.cpp:40:17:40:17 | b [inner, f, b_] | complex.cpp:43:8:43:8 | b [inner, f, b_] | provenance | | +| complex.cpp:42:8:42:8 | b [inner, f, a_] | complex.cpp:42:10:42:14 | inner [f, a_] | provenance | | +| complex.cpp:42:10:42:14 | inner [f, a_] | complex.cpp:42:16:42:16 | f [a_] | provenance | | +| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:9:7:9:7 | this [a_] | provenance | | +| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:42:18:42:18 | call to a | provenance | | +| complex.cpp:43:8:43:8 | b [inner, f, b_] | complex.cpp:43:10:43:14 | inner [f, b_] | provenance | | +| complex.cpp:43:10:43:14 | inner [f, b_] | complex.cpp:43:16:43:16 | f [b_] | provenance | | +| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:10:7:10:7 | this [b_] | provenance | | +| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:43:18:43:18 | call to b | provenance | | +| complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | complex.cpp:59:7:59:8 | b1 [inner, f, a_] | provenance | | +| complex.cpp:53:6:53:10 | inner [post update] [f, a_] | complex.cpp:53:3:53:4 | b1 [post update] [inner, f, a_] | provenance | | +| complex.cpp:53:12:53:12 | ref arg f [a_] | complex.cpp:53:6:53:10 | inner [post update] [f, a_] | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:53:12:53:12 | ref arg f [a_] | provenance | | +| complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | complex.cpp:62:7:62:8 | b2 [inner, f, b_] | provenance | | +| complex.cpp:54:6:54:10 | inner [post update] [f, b_] | complex.cpp:54:3:54:4 | b2 [post update] [inner, f, b_] | provenance | | +| complex.cpp:54:12:54:12 | ref arg f [b_] | complex.cpp:54:6:54:10 | inner [post update] [f, b_] | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:54:12:54:12 | ref arg f [b_] | provenance | | +| complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | complex.cpp:65:7:65:8 | b3 [inner, f, a_] | provenance | | +| complex.cpp:55:6:55:10 | inner [post update] [f, a_] | complex.cpp:55:3:55:4 | b3 [post update] [inner, f, a_] | provenance | | +| complex.cpp:55:12:55:12 | ref arg f [a_] | complex.cpp:55:6:55:10 | inner [post update] [f, a_] | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | provenance | | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:55:12:55:12 | ref arg f [a_] | provenance | | +| complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | complex.cpp:65:7:65:8 | b3 [inner, f, b_] | provenance | | +| complex.cpp:56:6:56:10 | inner [post update] [f, b_] | complex.cpp:56:3:56:4 | b3 [post update] [inner, f, b_] | provenance | | +| complex.cpp:56:12:56:12 | ref arg f [b_] | complex.cpp:56:6:56:10 | inner [post update] [f, b_] | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | provenance | | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:56:12:56:12 | ref arg f [b_] | provenance | | +| complex.cpp:59:7:59:8 | b1 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | provenance | | +| complex.cpp:62:7:62:8 | b2 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | provenance | | +| complex.cpp:65:7:65:8 | b3 [inner, f, a_] | complex.cpp:40:17:40:17 | b [inner, f, a_] | provenance | | +| complex.cpp:65:7:65:8 | b3 [inner, f, b_] | complex.cpp:40:17:40:17 | b [inner, f, b_] | provenance | | +| conflated.cpp:19:19:19:21 | ref arg raw | conflated.cpp:20:8:20:10 | raw | provenance | | +| conflated.cpp:29:3:29:4 | pa [post update] [x] | conflated.cpp:30:8:30:9 | pa [x] | provenance | | +| conflated.cpp:29:3:29:22 | ... = ... | conflated.cpp:29:3:29:4 | pa [post update] [x] | provenance | | +| conflated.cpp:29:11:29:20 | call to user_input | conflated.cpp:29:3:29:22 | ... = ... | provenance | | +| conflated.cpp:30:8:30:9 | pa [x] | conflated.cpp:30:12:30:12 | x | provenance | | +| conflated.cpp:36:3:36:4 | pa [post update] [x] | conflated.cpp:37:8:37:9 | pa [x] | provenance | | +| conflated.cpp:36:3:36:22 | ... = ... | conflated.cpp:36:3:36:4 | pa [post update] [x] | provenance | | +| conflated.cpp:36:11:36:20 | call to user_input | conflated.cpp:36:3:36:22 | ... = ... | provenance | | +| conflated.cpp:37:8:37:9 | pa [x] | conflated.cpp:37:12:37:12 | x | provenance | | +| conflated.cpp:54:3:54:4 | ll [post update] [next, y] | conflated.cpp:55:8:55:9 | ll [next, y] | provenance | | +| conflated.cpp:54:3:54:28 | ... = ... | conflated.cpp:54:7:54:10 | next [post update] [y] | provenance | | +| conflated.cpp:54:7:54:10 | next [post update] [y] | conflated.cpp:54:3:54:4 | ll [post update] [next, y] | provenance | | +| conflated.cpp:54:17:54:26 | call to user_input | conflated.cpp:54:3:54:28 | ... = ... | provenance | | +| conflated.cpp:55:8:55:9 | ll [next, y] | conflated.cpp:55:12:55:15 | next [y] | provenance | | +| conflated.cpp:55:12:55:15 | next [y] | conflated.cpp:55:18:55:18 | y | provenance | | +| conflated.cpp:60:3:60:4 | ll [post update] [next, y] | conflated.cpp:61:8:61:9 | ll [next, y] | provenance | | +| conflated.cpp:60:3:60:28 | ... = ... | conflated.cpp:60:7:60:10 | next [post update] [y] | provenance | | +| conflated.cpp:60:7:60:10 | next [post update] [y] | conflated.cpp:60:3:60:4 | ll [post update] [next, y] | provenance | | +| conflated.cpp:60:17:60:26 | call to user_input | conflated.cpp:60:3:60:28 | ... = ... | provenance | | +| conflated.cpp:61:8:61:9 | ll [next, y] | conflated.cpp:61:12:61:15 | next [y] | provenance | | +| conflated.cpp:61:12:61:15 | next [y] | conflated.cpp:61:18:61:18 | y | provenance | | +| constructors.cpp:18:9:18:9 | this [a_] | constructors.cpp:18:22:18:23 | this [a_] | provenance | | +| constructors.cpp:18:22:18:23 | this [a_] | constructors.cpp:18:22:18:23 | a_ | provenance | | +| constructors.cpp:19:9:19:9 | this [b_] | constructors.cpp:19:22:19:23 | this [b_] | provenance | | +| constructors.cpp:19:22:19:23 | this [b_] | constructors.cpp:19:22:19:23 | b_ | provenance | | +| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | provenance | | +| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | provenance | | +| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | provenance | | +| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | provenance | | +| constructors.cpp:26:15:26:15 | f [a_] | constructors.cpp:28:10:28:10 | f [a_] | provenance | | +| constructors.cpp:26:15:26:15 | f [b_] | constructors.cpp:29:10:29:10 | f [b_] | provenance | | +| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:18:9:18:9 | this [a_] | provenance | | +| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:28:12:28:12 | call to a | provenance | | +| constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:19:9:19:9 | this [b_] | provenance | | +| constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:29:12:29:12 | call to b | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:34:11:34:26 | call to Foo [a_] | provenance | | +| constructors.cpp:34:11:34:26 | call to Foo [a_] | constructors.cpp:40:9:40:9 | f [a_] | provenance | | +| constructors.cpp:35:11:35:26 | call to Foo [b_] | constructors.cpp:43:9:43:9 | g [b_] | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:35:11:35:26 | call to Foo [b_] | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | provenance | | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [a_] | provenance | | +| constructors.cpp:36:11:36:37 | call to Foo [a_] | constructors.cpp:46:9:46:9 | h [a_] | provenance | | +| constructors.cpp:36:11:36:37 | call to Foo [b_] | constructors.cpp:46:9:46:9 | h [b_] | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | provenance | | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:36:11:36:37 | call to Foo [b_] | provenance | | +| constructors.cpp:40:9:40:9 | f [a_] | constructors.cpp:26:15:26:15 | f [a_] | provenance | | +| constructors.cpp:43:9:43:9 | g [b_] | constructors.cpp:26:15:26:15 | f [b_] | provenance | | +| constructors.cpp:46:9:46:9 | h [a_] | constructors.cpp:26:15:26:15 | f [a_] | provenance | | +| constructors.cpp:46:9:46:9 | h [b_] | constructors.cpp:26:15:26:15 | f [b_] | provenance | | +| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | provenance | | +| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | this [post update] [a] | provenance | | +| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | provenance | | +| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [a] | provenance | | +| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | provenance | | +| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | provenance | | +| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [a] | provenance | | +| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | provenance | | +| qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | qualifiers.cpp:23:10:23:14 | outer [inner, a] | provenance | | +| qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | provenance | | +| qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | provenance | | +| qualifiers.cpp:23:10:23:14 | outer [inner, a] | qualifiers.cpp:23:16:23:20 | inner [a] | provenance | | +| qualifiers.cpp:23:16:23:20 | inner [a] | qualifiers.cpp:23:23:23:23 | a | provenance | | +| qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | qualifiers.cpp:28:10:28:14 | outer [inner, a] | provenance | | +| qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | provenance | | +| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | provenance | | +| qualifiers.cpp:28:10:28:14 | outer [inner, a] | qualifiers.cpp:28:16:28:20 | inner [a] | provenance | | +| qualifiers.cpp:28:16:28:20 | inner [a] | qualifiers.cpp:28:23:28:23 | a | provenance | | +| qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | qualifiers.cpp:33:10:33:14 | outer [inner, a] | provenance | | +| qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | provenance | | +| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | provenance | | +| qualifiers.cpp:33:10:33:14 | outer [inner, a] | qualifiers.cpp:33:16:33:20 | inner [a] | provenance | | +| qualifiers.cpp:33:16:33:20 | inner [a] | qualifiers.cpp:33:23:33:23 | a | provenance | | +| qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | provenance | | +| qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | qualifiers.cpp:38:10:38:14 | outer [inner, a] | provenance | | +| qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | provenance | | +| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | provenance | | +| qualifiers.cpp:38:10:38:14 | outer [inner, a] | qualifiers.cpp:38:16:38:20 | inner [a] | provenance | | +| qualifiers.cpp:38:16:38:20 | inner [a] | qualifiers.cpp:38:23:38:23 | a | provenance | | +| qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | provenance | | +| qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | provenance | | +| qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | qualifiers.cpp:43:10:43:14 | outer [inner, a] | provenance | | +| qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | provenance | | +| qualifiers.cpp:43:10:43:14 | outer [inner, a] | qualifiers.cpp:43:16:43:20 | inner [a] | provenance | | +| qualifiers.cpp:43:16:43:20 | inner [a] | qualifiers.cpp:43:23:43:23 | a | provenance | | +| qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | provenance | | +| qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | qualifiers.cpp:48:10:48:14 | outer [inner, a] | provenance | | +| qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | provenance | | +| qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | provenance | | +| qualifiers.cpp:48:10:48:14 | outer [inner, a] | qualifiers.cpp:48:16:48:20 | inner [a] | provenance | | +| qualifiers.cpp:48:16:48:20 | inner [a] | qualifiers.cpp:48:23:48:23 | a | provenance | | +| realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | provenance | | +| realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:9:53:66 | ... = ... | realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | provenance | | +| realistic.cpp:53:13:53:15 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:53:9:53:11 | foo [post update] [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | realistic.cpp:53:9:53:18 | access to array [post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:53:25:53:33 | userInput [post update] [bufferLen] | realistic.cpp:53:20:53:22 | baz [post update] [userInput, bufferLen] | provenance | | +| realistic.cpp:53:55:53:64 | call to user_input | realistic.cpp:53:9:53:66 | ... = ... | provenance | | +| realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | provenance | | +| realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:25:61:27 | bar [baz, userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:25:61:27 | bar [inner post update] [baz, userInput, bufferLen] | realistic.cpp:61:21:61:23 | foo [post update] [bar, baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | realistic.cpp:61:21:61:30 | access to array [post update] [baz, userInput, bufferLen] | provenance | | +| realistic.cpp:61:32:61:34 | baz [userInput, bufferLen] | realistic.cpp:61:37:61:45 | userInput [bufferLen] | provenance | | +| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | provenance | | +| realistic.cpp:61:37:61:45 | userInput [bufferLen] | realistic.cpp:61:47:61:55 | bufferLen | provenance | | +| realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | realistic.cpp:61:32:61:34 | baz [post update] [userInput, bufferLen] | provenance | | +| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:41:17:41:17 | o | provenance | | +| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:61:47:61:55 | ref arg bufferLen | provenance | | +| realistic.cpp:61:47:61:55 | ref arg bufferLen | realistic.cpp:61:37:61:45 | userInput [post update] [bufferLen] | provenance | | +| simple.cpp:18:9:18:9 | this [a_] | simple.cpp:18:22:18:23 | this [a_] | provenance | | +| simple.cpp:18:22:18:23 | this [a_] | simple.cpp:18:22:18:23 | a_ | provenance | | +| simple.cpp:19:9:19:9 | this [b_] | simple.cpp:19:22:19:23 | this [b_] | provenance | | +| simple.cpp:19:22:19:23 | this [b_] | simple.cpp:19:22:19:23 | b_ | provenance | | +| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | provenance | | +| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | this [post update] [a_] | provenance | | +| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | provenance | | +| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | this [post update] [b_] | provenance | | +| simple.cpp:26:15:26:15 | f [a_] | simple.cpp:28:10:28:10 | f [a_] | provenance | | +| simple.cpp:26:15:26:15 | f [b_] | simple.cpp:29:10:29:10 | f [b_] | provenance | | +| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:18:9:18:9 | this [a_] | provenance | | +| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:28:12:28:12 | call to a | provenance | | +| simple.cpp:29:10:29:10 | f [b_] | simple.cpp:19:9:19:9 | this [b_] | provenance | | +| simple.cpp:29:10:29:10 | f [b_] | simple.cpp:29:12:29:12 | call to b | provenance | | +| simple.cpp:39:5:39:5 | ref arg f [a_] | simple.cpp:45:9:45:9 | f [a_] | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:39:5:39:5 | ref arg f [a_] | provenance | | +| simple.cpp:40:5:40:5 | ref arg g [b_] | simple.cpp:48:9:48:9 | g [b_] | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:40:5:40:5 | ref arg g [b_] | provenance | | +| simple.cpp:41:5:41:5 | ref arg h [a_] | simple.cpp:51:9:51:9 | h [a_] | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | provenance | | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:41:5:41:5 | ref arg h [a_] | provenance | | +| simple.cpp:42:5:42:5 | ref arg h [b_] | simple.cpp:51:9:51:9 | h [b_] | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | provenance | | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:42:5:42:5 | ref arg h [b_] | provenance | | +| simple.cpp:45:9:45:9 | f [a_] | simple.cpp:26:15:26:15 | f [a_] | provenance | | +| simple.cpp:48:9:48:9 | g [b_] | simple.cpp:26:15:26:15 | f [b_] | provenance | | +| simple.cpp:51:9:51:9 | h [a_] | simple.cpp:26:15:26:15 | f [a_] | provenance | | +| simple.cpp:51:9:51:9 | h [b_] | simple.cpp:26:15:26:15 | f [b_] | provenance | | +| simple.cpp:65:5:65:5 | a [post update] [i] | simple.cpp:67:10:67:11 | a2 [i] | provenance | | +| simple.cpp:65:5:65:22 | ... = ... | simple.cpp:65:5:65:5 | a [post update] [i] | provenance | | +| simple.cpp:65:11:65:20 | call to user_input | simple.cpp:65:5:65:22 | ... = ... | provenance | | +| simple.cpp:67:10:67:11 | a2 [i] | simple.cpp:67:13:67:13 | i | provenance | | +| simple.cpp:78:9:78:15 | this [f2, f1] | simple.cpp:79:16:79:17 | this [f2, f1] | provenance | | +| simple.cpp:79:16:79:17 | f2 [f1] | simple.cpp:79:19:79:20 | f1 | provenance | | +| simple.cpp:79:16:79:17 | this [f2, f1] | simple.cpp:79:16:79:17 | f2 [f1] | provenance | | +| simple.cpp:83:9:83:10 | f2 [post update] [f1] | simple.cpp:83:9:83:10 | this [post update] [f2, f1] | provenance | | +| simple.cpp:83:9:83:10 | this [post update] [f2, f1] | simple.cpp:84:14:84:20 | this [f2, f1] | provenance | | +| simple.cpp:83:9:83:28 | ... = ... | simple.cpp:83:9:83:10 | f2 [post update] [f1] | provenance | | +| simple.cpp:83:17:83:26 | call to user_input | simple.cpp:83:9:83:28 | ... = ... | provenance | | +| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:78:9:78:15 | this [f2, f1] | provenance | | +| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:84:14:84:20 | call to getf2f1 | provenance | | +| simple.cpp:92:5:92:5 | a [post update] [i] | simple.cpp:94:10:94:11 | a2 [i] | provenance | | +| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | a [post update] [i] | provenance | | +| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | provenance | | +| simple.cpp:94:10:94:11 | a2 [i] | simple.cpp:94:13:94:13 | i | provenance | | +| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | provenance | | +| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | +| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | | +| struct_init.c:15:8:15:9 | ab [post update] [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | provenance | | +| struct_init.c:15:12:15:12 | a | struct_init.c:15:12:15:12 | ref arg a | provenance | | +| struct_init.c:15:12:15:12 | ref arg a | struct_init.c:15:8:15:9 | ab [post update] [a] | provenance | | +| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:22:8:22:9 | ab [a] | provenance | | +| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:24:11:24:12 | ab [a] | provenance | | +| struct_init.c:20:17:20:36 | {...} [a] | struct_init.c:28:6:28:7 | ab [a] | provenance | | +| struct_init.c:20:20:20:29 | call to user_input | struct_init.c:20:17:20:36 | {...} [a] | provenance | | +| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | provenance | | +| struct_init.c:22:8:22:9 | ab [a] | struct_init.c:22:11:22:11 | a | provenance | | +| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:24:11:24:12 | ab [a] | provenance | | +| struct_init.c:22:8:22:9 | ab [post update] [a] | struct_init.c:28:6:28:7 | ab [a] | provenance | | +| struct_init.c:22:11:22:11 | a | realistic.cpp:41:17:41:17 | o | provenance | | +| struct_init.c:22:11:22:11 | a | struct_init.c:22:11:22:11 | ref arg a | provenance | | +| struct_init.c:22:11:22:11 | ref arg a | struct_init.c:22:8:22:9 | ab [post update] [a] | provenance | | +| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:24:10:24:12 | & ... [a] | struct_init.c:24:10:24:12 | ref arg & ... [a] | provenance | | +| struct_init.c:24:10:24:12 | ref arg & ... [a] | struct_init.c:28:6:28:7 | ab [a] | provenance | | +| struct_init.c:24:11:24:12 | ab [a] | struct_init.c:24:10:24:12 | & ... [a] | provenance | | +| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:31:8:31:12 | outer [nestedAB, a] | provenance | | +| struct_init.c:26:23:29:3 | {...} [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | provenance | | +| struct_init.c:26:23:29:3 | {...} [pointerAB, a] | struct_init.c:33:8:33:12 | outer [pointerAB, a] | provenance | | +| struct_init.c:27:5:27:23 | {...} [a] | struct_init.c:26:23:29:3 | {...} [nestedAB, a] | provenance | | +| struct_init.c:27:7:27:16 | call to user_input | struct_init.c:27:5:27:23 | {...} [a] | provenance | | +| struct_init.c:28:5:28:7 | & ... [a] | struct_init.c:26:23:29:3 | {...} [pointerAB, a] | provenance | | +| struct_init.c:28:6:28:7 | ab [a] | struct_init.c:28:5:28:7 | & ... [a] | provenance | | +| struct_init.c:31:8:31:12 | outer [nestedAB, a] | struct_init.c:31:14:31:21 | nestedAB [a] | provenance | | +| struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | struct_init.c:36:11:36:15 | outer [nestedAB, a] | provenance | | +| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | provenance | | +| struct_init.c:31:14:31:21 | nestedAB [a] | struct_init.c:31:23:31:23 | a | provenance | | +| struct_init.c:31:14:31:21 | nestedAB [post update] [a] | struct_init.c:31:8:31:12 | outer [post update] [nestedAB, a] | provenance | | +| struct_init.c:31:23:31:23 | a | realistic.cpp:41:17:41:17 | o | provenance | | +| struct_init.c:31:23:31:23 | a | struct_init.c:31:23:31:23 | ref arg a | provenance | | +| struct_init.c:31:23:31:23 | ref arg a | struct_init.c:31:14:31:21 | nestedAB [post update] [a] | provenance | | +| struct_init.c:33:8:33:12 | outer [pointerAB, a] | struct_init.c:33:14:33:22 | pointerAB [a] | provenance | | +| struct_init.c:33:14:33:22 | pointerAB [a] | struct_init.c:33:25:33:25 | a | provenance | | +| struct_init.c:36:10:36:24 | & ... [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | +| struct_init.c:36:11:36:15 | outer [nestedAB, a] | struct_init.c:36:17:36:24 | nestedAB [a] | provenance | | +| struct_init.c:36:17:36:24 | nestedAB [a] | struct_init.c:36:10:36:24 | & ... [a] | provenance | | +| struct_init.c:40:17:40:36 | {...} [a] | struct_init.c:43:6:43:7 | ab [a] | provenance | | +| struct_init.c:40:20:40:29 | call to user_input | struct_init.c:40:17:40:36 | {...} [a] | provenance | | +| struct_init.c:41:23:44:3 | {...} [pointerAB, a] | struct_init.c:46:10:46:14 | outer [pointerAB, a] | provenance | | +| struct_init.c:43:5:43:7 | & ... [a] | struct_init.c:41:23:44:3 | {...} [pointerAB, a] | provenance | | +| struct_init.c:43:6:43:7 | ab [a] | struct_init.c:43:5:43:7 | & ... [a] | provenance | | +| struct_init.c:46:10:46:14 | outer [pointerAB, a] | struct_init.c:46:16:46:24 | pointerAB [a] | provenance | | +| struct_init.c:46:16:46:24 | pointerAB [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | nodes | A.cpp:23:10:23:10 | c | semmle.label | c | | A.cpp:25:7:25:10 | this [post update] [c] | semmle.label | this [post update] [c] | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index c14fbc66926..a7cd4689ff9 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -9382,14 +9382,30 @@ ir.cpp: # 1054| getRightOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1054| Type = [IntType] int # 1054| ValueCategory = prvalue(load) +# 1059| [CopyAssignmentOperator] vector& vector::operator=(vector const&) +# 1059| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & # 1059| [CopyAssignmentOperator] vector& vector::operator=(vector const&) # 1059| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const vector & -# 1059| [MoveAssignmentOperator] vector& vector::operator=(vector&&) +# 1059| [CopyConstructor] void vector::vector(vector const&) # 1059| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] vector && +#-----| Type = [LValueReferenceType] const vector & +# 1059| [CopyConstructor] void vector::vector(vector const&) +# 1059| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const vector & +# 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) +# 1060| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const iterator & +# 1060| [MoveAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator&&) +# 1060| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] iterator && # 1060| [CopyAssignmentOperator] vector::iterator& vector::iterator::operator=(vector::iterator const public&) # 1060| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) @@ -9398,14 +9414,22 @@ ir.cpp: # 1060| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] iterator && +# 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() +# 1062| : # 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() # 1062| : # 1062| [MemberFunction] vector::iterator& vector::iterator::operator++() # 1062| : +# 1063| [ConstMemberFunction] ClassWithDestructor& vector::iterator::operator*() const +# 1063| : # 1063| [ConstMemberFunction] T& vector::iterator::operator*() const # 1063| : # 1063| [ConstMemberFunction] int& vector::iterator::operator*() const # 1063| : +# 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const +# 1065| : +# 1065| getParameter(0): [Parameter] right +# 1065| Type = [NestedStruct] iterator # 1065| [ConstMemberFunction] bool vector::iterator::operator!=(vector::iterator) const # 1065| : # 1065| getParameter(0): [Parameter] right @@ -9414,1208 +9438,1301 @@ ir.cpp: # 1065| : # 1065| getParameter(0): [Parameter] right # 1065| Type = [NestedStruct] iterator -# 1068| [ConstMemberFunction] vector::iterator vector::begin() const +# 1068| [Constructor] void vector::vector(ClassWithDestructor) # 1068| : -# 1068| [ConstMemberFunction] vector::iterator vector::begin() const +# 1068| getParameter(0): [Parameter] (unnamed parameter 0) +# 1068| Type = [Class] ClassWithDestructor +# 1068| [Constructor] void vector::vector(T) # 1068| : -# 1069| [ConstMemberFunction] vector::iterator vector::end() const +# 1068| getParameter(0): [Parameter] (unnamed parameter 0) +# 1068| Type = [TemplateParameter] T +# 1068| [Constructor] void vector::vector(int) +# 1068| : +# 1068| getParameter(0): [Parameter] (unnamed parameter 0) +# 1068| Type = [IntType] int +# 1069| [Destructor] void vector::~vector() # 1069| : -# 1069| [ConstMemberFunction] vector::iterator vector::end() const -# 1069| : -# 1073| [Operator,TemplateFunction,TopLevelFunction] bool operator==(iterator, iterator) -# 1073| : -# 1073| getParameter(0): [Parameter] left -# 1073| Type = [TemplateParameter] iterator -# 1073| getParameter(1): [Parameter] right -# 1073| Type = [TemplateParameter] iterator -# 1075| [Operator,TemplateFunction,TopLevelFunction] bool operator!=(iterator, iterator) +# 1070| [ConstMemberFunction] vector::iterator vector::begin() const +# 1070| : +# 1070| [ConstMemberFunction] vector::iterator vector::begin() const +# 1070| : +# 1070| [ConstMemberFunction] vector::iterator vector::begin() const +# 1070| : +# 1071| [ConstMemberFunction] vector::iterator vector::end() const +# 1071| : +# 1071| [ConstMemberFunction] vector::iterator vector::end() const +# 1071| : +# 1071| [ConstMemberFunction] vector::iterator vector::end() const +# 1071| : +# 1075| [Operator,TemplateFunction,TopLevelFunction] bool operator==(iterator, iterator) # 1075| : # 1075| getParameter(0): [Parameter] left # 1075| Type = [TemplateParameter] iterator # 1075| getParameter(1): [Parameter] right # 1075| Type = [TemplateParameter] iterator -# 1077| [TopLevelFunction] void RangeBasedFor(vector const&) +# 1077| [Operator,TemplateFunction,TopLevelFunction] bool operator!=(iterator, iterator) # 1077| : -# 1077| getParameter(0): [Parameter] v -# 1077| Type = [LValueReferenceType] const vector & -# 1077| getEntryPoint(): [BlockStmt] { ... } -# 1078| getStmt(0): [RangeBasedForStmt] for(...:...) ... -# 1078| getChild(0): [DeclStmt] declaration -# 1078| getBeginEndDeclaration(): [DeclStmt] declaration -# 1078| getCondition(): [FunctionCall] call to operator!= -# 1078| Type = [BoolType] bool -# 1078| ValueCategory = prvalue -# 1078| getQualifier(): [VariableAccess] (__begin) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = lvalue -# 1078| getArgument(0): [VariableAccess] (__end) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = prvalue(load) +# 1077| getParameter(0): [Parameter] left +# 1077| Type = [TemplateParameter] iterator +# 1077| getParameter(1): [Parameter] right +# 1077| Type = [TemplateParameter] iterator +# 1079| [TopLevelFunction] void RangeBasedFor(vector const&) +# 1079| : +# 1079| getParameter(0): [Parameter] v +# 1079| Type = [LValueReferenceType] const vector & +# 1079| getEntryPoint(): [BlockStmt] { ... } +# 1080| getStmt(0): [RangeBasedForStmt] for(...:...) ... +# 1080| getChild(1): [DeclStmt] declaration +# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 1080| Type = [LValueReferenceType] const vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1080| getExpr(): [VariableAccess] v +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue(load) +# 1080| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue +# 1080| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1080| Type = [SpecifiedType] const vector +# 1080| ValueCategory = lvalue +# 1080| getBeginEndDeclaration(): [DeclStmt] declaration +# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 1080| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 1080| getExpr(): [FunctionCall] call to begin +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__range) +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1080| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 1080| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 1080| getExpr(): [FunctionCall] call to end +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__range) +# 1080| Type = [LValueReferenceType] const vector & +# 1080| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1080| getCondition(): [FunctionCall] call to operator!= +# 1080| Type = [BoolType] bool +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__begin) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +# 1080| getArgument(0): [VariableAccess] (__end) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const iterator #-----| ValueCategory = lvalue -# 1078| getUpdate(): [FunctionCall] call to operator++ -# 1078| Type = [LValueReferenceType] iterator & -# 1078| ValueCategory = prvalue -# 1078| getQualifier(): [VariableAccess] (__begin) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = lvalue -# 1078| getChild(4): [DeclStmt] declaration -# 1078| getStmt(): [BlockStmt] { ... } -# 1079| getStmt(0): [IfStmt] if (...) ... -# 1079| getCondition(): [GTExpr] ... > ... -# 1079| Type = [BoolType] bool -# 1079| ValueCategory = prvalue -# 1079| getGreaterOperand(): [VariableAccess] e -# 1079| Type = [IntType] int -# 1079| ValueCategory = prvalue(load) -# 1079| getLesserOperand(): [Literal] 0 -# 1079| Type = [IntType] int -# 1079| Value = [Literal] 0 -# 1079| ValueCategory = prvalue -# 1079| getThen(): [BlockStmt] { ... } -# 1080| getStmt(0): [ContinueStmt] continue; -# 1078| getStmt(1): [LabelStmt] label ...: -# 1078| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1078| Type = [NestedStruct] iterator -# 1078| ValueCategory = lvalue -# 1084| getStmt(1): [RangeBasedForStmt] for(...:...) ... -# 1084| getChild(0): [DeclStmt] declaration -# 1084| getBeginEndDeclaration(): [DeclStmt] declaration -# 1084| getCondition(): [FunctionCall] call to operator!= -# 1084| Type = [BoolType] bool -# 1084| ValueCategory = prvalue -# 1084| getQualifier(): [VariableAccess] (__begin) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = lvalue -# 1084| getArgument(0): [VariableAccess] (__end) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = prvalue(load) +# 1080| getUpdate(): [FunctionCall] call to operator++ +# 1080| Type = [LValueReferenceType] iterator & +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__begin) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +# 1080| getChild(5): [DeclStmt] declaration +# 1080| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e +# 1080| Type = [IntType] int +# 1080| getVariable().getInitializer(): [Initializer] initializer for e +# 1080| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 1080| Type = [LValueReferenceType] int & +# 1080| ValueCategory = prvalue +# 1080| getQualifier(): [VariableAccess] (__begin) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 1080| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1080| Type = [IntType] int +# 1080| ValueCategory = prvalue(load) +# 1080| getStmt(): [BlockStmt] { ... } +# 1081| getStmt(0): [IfStmt] if (...) ... +# 1081| getCondition(): [GTExpr] ... > ... +# 1081| Type = [BoolType] bool +# 1081| ValueCategory = prvalue +# 1081| getGreaterOperand(): [VariableAccess] e +# 1081| Type = [IntType] int +# 1081| ValueCategory = prvalue(load) +# 1081| getLesserOperand(): [Literal] 0 +# 1081| Type = [IntType] int +# 1081| Value = [Literal] 0 +# 1081| ValueCategory = prvalue +# 1081| getThen(): [BlockStmt] { ... } +# 1082| getStmt(0): [ContinueStmt] continue; +# 1080| getStmt(1): [LabelStmt] label ...: +# 1080| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1080| Type = [NestedStruct] iterator +# 1080| ValueCategory = lvalue +# 1086| getStmt(1): [RangeBasedForStmt] for(...:...) ... +# 1086| getChild(1): [DeclStmt] declaration +# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 1086| Type = [LValueReferenceType] const vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 1086| getExpr(): [VariableAccess] v +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue(load) +# 1086| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue +# 1086| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1086| Type = [SpecifiedType] const vector +# 1086| ValueCategory = lvalue +# 1086| getBeginEndDeclaration(): [DeclStmt] declaration +# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 1086| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 1086| getExpr(): [FunctionCall] call to begin +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__range) +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1086| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 1086| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 1086| getExpr(): [FunctionCall] call to end +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__range) +# 1086| Type = [LValueReferenceType] const vector & +# 1086| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +# 1086| getCondition(): [FunctionCall] call to operator!= +# 1086| Type = [BoolType] bool +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__begin) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +# 1086| getArgument(0): [VariableAccess] (__end) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = prvalue(load) #-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const iterator #-----| ValueCategory = lvalue -# 1084| getUpdate(): [FunctionCall] call to operator++ -# 1084| Type = [LValueReferenceType] iterator & -# 1084| ValueCategory = prvalue -# 1084| getQualifier(): [VariableAccess] (__begin) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = lvalue -# 1084| getChild(4): [DeclStmt] declaration -# 1084| getStmt(): [BlockStmt] { ... } -# 1085| getStmt(0): [IfStmt] if (...) ... -# 1085| getCondition(): [LTExpr] ... < ... -# 1085| Type = [BoolType] bool -# 1085| ValueCategory = prvalue -# 1085| getLesserOperand(): [VariableAccess] e -# 1085| Type = [LValueReferenceType] const int & -# 1085| ValueCategory = prvalue(load) -# 1085| getGreaterOperand(): [Literal] 5 -# 1085| Type = [IntType] int -# 1085| Value = [Literal] 5 -# 1085| ValueCategory = prvalue -# 1085| getLesserOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1085| Type = [IntType] int -# 1085| ValueCategory = prvalue(load) -# 1085| getThen(): [BlockStmt] { ... } -# 1086| getStmt(0): [BreakStmt] break; -# 1084| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1084| Type = [NestedStruct] iterator -# 1084| ValueCategory = lvalue -# 1088| getStmt(2): [LabelStmt] label ...: -# 1089| getStmt(3): [ReturnStmt] return ... -# 1108| [TopLevelFunction] int AsmStmt(int) -# 1108| : -# 1108| getParameter(0): [Parameter] x -# 1108| Type = [IntType] int -# 1108| getEntryPoint(): [BlockStmt] { ... } -# 1109| getStmt(0): [AsmStmt] asm statement -# 1110| getStmt(1): [ReturnStmt] return ... -# 1110| getExpr(): [VariableAccess] x -# 1110| Type = [IntType] int -# 1110| ValueCategory = prvalue(load) -# 1113| [TopLevelFunction] void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1113| : -# 1113| getParameter(0): [Parameter] a -# 1113| Type = [LValueReferenceType] unsigned int & -# 1113| getParameter(1): [Parameter] b -# 1113| Type = [IntType] unsigned int -# 1113| getParameter(2): [Parameter] c -# 1113| Type = [LValueReferenceType] unsigned int & -# 1113| getParameter(3): [Parameter] d -# 1113| Type = [IntType] unsigned int -# 1114| getEntryPoint(): [BlockStmt] { ... } -# 1115| getStmt(0): [AsmStmt] asm statement -# 1118| getChild(0): [VariableAccess] a -# 1118| Type = [LValueReferenceType] unsigned int & -# 1118| ValueCategory = prvalue(load) -# 1118| getChild(1): [VariableAccess] b -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = lvalue -# 1118| getChild(2): [VariableAccess] c -# 1118| Type = [LValueReferenceType] unsigned int & -# 1118| ValueCategory = prvalue(load) -# 1118| getChild(3): [VariableAccess] d -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = prvalue(load) -# 1118| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = lvalue -# 1118| getChild(2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1118| Type = [IntType] unsigned int -# 1118| ValueCategory = prvalue(load) -# 1120| getStmt(1): [ReturnStmt] return ... -# 1122| [TopLevelFunction] void ExternDeclarations() -# 1122| : -# 1123| getEntryPoint(): [BlockStmt] { ... } -# 1124| getStmt(0): [DeclStmt] declaration -# 1124| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1124| Type = [IntType] int -# 1125| getStmt(1): [DeclStmt] declaration -# 1125| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1125| Type = [IntType] int -# 1126| getStmt(2): [DeclStmt] declaration -# 1126| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1086| getUpdate(): [FunctionCall] call to operator++ +# 1086| Type = [LValueReferenceType] iterator & +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__begin) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +# 1086| getChild(5): [DeclStmt] declaration +# 1086| getDeclarationEntry(0): [VariableDeclarationEntry] definition of e +# 1086| Type = [LValueReferenceType] const int & +# 1086| getVariable().getInitializer(): [Initializer] initializer for e +# 1086| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 1086| Type = [LValueReferenceType] int & +# 1086| ValueCategory = prvalue +# 1086| getQualifier(): [VariableAccess] (__begin) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 1086| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1086| Type = [LValueReferenceType] const int & +# 1086| ValueCategory = prvalue +# 1086| getExpr(): [CStyleCast] (const int)... +# 1086| Conversion = [GlvalueConversion] glvalue conversion +# 1086| Type = [SpecifiedType] const int +# 1086| ValueCategory = lvalue +# 1086| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1086| Type = [IntType] int +# 1086| ValueCategory = lvalue +# 1086| getStmt(): [BlockStmt] { ... } +# 1087| getStmt(0): [IfStmt] if (...) ... +# 1087| getCondition(): [LTExpr] ... < ... +# 1087| Type = [BoolType] bool +# 1087| ValueCategory = prvalue +# 1087| getLesserOperand(): [VariableAccess] e +# 1087| Type = [LValueReferenceType] const int & +# 1087| ValueCategory = prvalue(load) +# 1087| getGreaterOperand(): [Literal] 5 +# 1087| Type = [IntType] int +# 1087| Value = [Literal] 5 +# 1087| ValueCategory = prvalue +# 1087| getLesserOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1087| Type = [IntType] int +# 1087| ValueCategory = prvalue(load) +# 1087| getThen(): [BlockStmt] { ... } +# 1088| getStmt(0): [BreakStmt] break; +# 1086| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1086| Type = [NestedStruct] iterator +# 1086| ValueCategory = lvalue +# 1090| getStmt(2): [LabelStmt] label ...: +# 1091| getStmt(3): [ReturnStmt] return ... +# 1110| [TopLevelFunction] int AsmStmt(int) +# 1110| : +# 1110| getParameter(0): [Parameter] x +# 1110| Type = [IntType] int +# 1110| getEntryPoint(): [BlockStmt] { ... } +# 1111| getStmt(0): [AsmStmt] asm statement +# 1112| getStmt(1): [ReturnStmt] return ... +# 1112| getExpr(): [VariableAccess] x +# 1112| Type = [IntType] int +# 1112| ValueCategory = prvalue(load) +# 1115| [TopLevelFunction] void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1115| : +# 1115| getParameter(0): [Parameter] a +# 1115| Type = [LValueReferenceType] unsigned int & +# 1115| getParameter(1): [Parameter] b +# 1115| Type = [IntType] unsigned int +# 1115| getParameter(2): [Parameter] c +# 1115| Type = [LValueReferenceType] unsigned int & +# 1115| getParameter(3): [Parameter] d +# 1115| Type = [IntType] unsigned int +# 1116| getEntryPoint(): [BlockStmt] { ... } +# 1117| getStmt(0): [AsmStmt] asm statement +# 1120| getChild(0): [VariableAccess] a +# 1120| Type = [LValueReferenceType] unsigned int & +# 1120| ValueCategory = prvalue(load) +# 1120| getChild(1): [VariableAccess] b +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = lvalue +# 1120| getChild(2): [VariableAccess] c +# 1120| Type = [LValueReferenceType] unsigned int & +# 1120| ValueCategory = prvalue(load) +# 1120| getChild(3): [VariableAccess] d +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = prvalue(load) +# 1120| getChild(0).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = lvalue +# 1120| getChild(2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1120| Type = [IntType] unsigned int +# 1120| ValueCategory = prvalue(load) +# 1122| getStmt(1): [ReturnStmt] return ... +# 1124| [TopLevelFunction] void ExternDeclarations() +# 1124| : +# 1125| getEntryPoint(): [BlockStmt] { ... } +# 1126| getStmt(0): [DeclStmt] declaration +# 1126| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g # 1126| Type = [IntType] int -# 1126| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of f -# 1126| Type = [IntType] int -# 1127| getStmt(3): [DeclStmt] declaration -# 1127| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z +# 1127| getStmt(1): [DeclStmt] declaration +# 1127| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1127| Type = [IntType] int -# 1127| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of w -# 1127| Type = [IntType] int -# 1127| getDeclarationEntry(2): [VariableDeclarationEntry] definition of h -# 1127| Type = [IntType] int -# 1128| getStmt(4): [DeclStmt] declaration -# 1128| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of d -# 1128| Type = [CTypedefType,LocalTypedefType] d -# 1129| getStmt(5): [ReturnStmt] return ... -# 1126| [TopLevelFunction] int f(float) -# 1126| : -# 1126| getParameter(0): [Parameter] (unnamed parameter 0) -# 1126| Type = [FloatType] float -# 1127| [TopLevelFunction] int z(float) -# 1127| : -# 1127| getParameter(0): [Parameter] (unnamed parameter 0) -# 1127| Type = [FloatType] float -# 1127| [TopLevelFunction] int w(float) -# 1127| : -# 1127| getParameter(0): [Parameter] (unnamed parameter 0) -# 1127| Type = [FloatType] float -# 1137| [TopLevelFunction] void ExternDeclarationsInMacro() -# 1137| : -# 1138| getEntryPoint(): [BlockStmt] { ... } -# 1139| getStmt(0): [DeclStmt] declaration -# 1139| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1139| Type = [IntType] int -# 1139| getStmt(1): [ForStmt] for(...;...;...) ... -# 1139| getInitialization(): [DeclStmt] declaration -# 1139| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1139| Type = [IntType] int -# 1139| getVariable().getInitializer(): [Initializer] initializer for i -# 1139| getExpr(): [Literal] 0 -# 1139| Type = [IntType] int -# 1139| Value = [Literal] 0 -# 1139| ValueCategory = prvalue -# 1139| getCondition(): [LTExpr] ... < ... -# 1139| Type = [BoolType] bool -# 1139| ValueCategory = prvalue -# 1139| getLesserOperand(): [VariableAccess] i -# 1139| Type = [IntType] int -# 1139| ValueCategory = prvalue(load) -# 1139| getGreaterOperand(): [Literal] 10 -# 1139| Type = [IntType] int -# 1139| Value = [Literal] 10 -# 1139| ValueCategory = prvalue -# 1139| getUpdate(): [PrefixIncrExpr] ++ ... -# 1139| Type = [IntType] int -# 1139| ValueCategory = lvalue -# 1139| getOperand(): [VariableAccess] i -# 1139| Type = [IntType] int -# 1139| ValueCategory = lvalue -# 1139| getStmt(): [BlockStmt] { ... } -# 1139| getStmt(0): [DeclStmt] declaration -# 1139| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g -# 1139| Type = [IntType] int -# 1139| getStmt(2): [EmptyStmt] ; -# 1140| getStmt(3): [ReturnStmt] return ... -# 1142| [TopLevelFunction] void TryCatchNoCatchAny(bool) -# 1142| : -# 1142| getParameter(0): [Parameter] b -# 1142| Type = [BoolType] bool -# 1142| getEntryPoint(): [BlockStmt] { ... } -# 1143| getStmt(0): [TryStmt] try { ... } -# 1143| getStmt(): [BlockStmt] { ... } -# 1144| getStmt(0): [DeclStmt] declaration -# 1144| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1144| Type = [IntType] int -# 1144| getVariable().getInitializer(): [Initializer] initializer for x -# 1144| getExpr(): [Literal] 5 -# 1144| Type = [IntType] int -# 1144| Value = [Literal] 5 -# 1144| ValueCategory = prvalue -# 1145| getStmt(1): [IfStmt] if (...) ... -# 1145| getCondition(): [VariableAccess] b -# 1145| Type = [BoolType] bool -# 1145| ValueCategory = prvalue(load) -# 1145| getThen(): [BlockStmt] { ... } -# 1146| getStmt(0): [ExprStmt] ExprStmt -# 1146| getExpr(): [ThrowExpr] throw ... -# 1146| Type = [PointerType] const char * +# 1128| getStmt(2): [DeclStmt] declaration +# 1128| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1128| Type = [IntType] int +# 1128| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of f +# 1128| Type = [IntType] int +# 1129| getStmt(3): [DeclStmt] declaration +# 1129| getDeclarationEntry(0): [FunctionDeclarationEntry] declaration of z +# 1129| Type = [IntType] int +# 1129| getDeclarationEntry(1): [FunctionDeclarationEntry] declaration of w +# 1129| Type = [IntType] int +# 1129| getDeclarationEntry(2): [VariableDeclarationEntry] definition of h +# 1129| Type = [IntType] int +# 1130| getStmt(4): [DeclStmt] declaration +# 1130| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of d +# 1130| Type = [CTypedefType,LocalTypedefType] d +# 1131| getStmt(5): [ReturnStmt] return ... +# 1128| [TopLevelFunction] int f(float) +# 1128| : +# 1128| getParameter(0): [Parameter] (unnamed parameter 0) +# 1128| Type = [FloatType] float +# 1129| [TopLevelFunction] int z(float) +# 1129| : +# 1129| getParameter(0): [Parameter] (unnamed parameter 0) +# 1129| Type = [FloatType] float +# 1129| [TopLevelFunction] int w(float) +# 1129| : +# 1129| getParameter(0): [Parameter] (unnamed parameter 0) +# 1129| Type = [FloatType] float +# 1139| [TopLevelFunction] void ExternDeclarationsInMacro() +# 1139| : +# 1140| getEntryPoint(): [BlockStmt] { ... } +# 1141| getStmt(0): [DeclStmt] declaration +# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1141| Type = [IntType] int +# 1141| getStmt(1): [ForStmt] for(...;...;...) ... +# 1141| getInitialization(): [DeclStmt] declaration +# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1141| Type = [IntType] int +# 1141| getVariable().getInitializer(): [Initializer] initializer for i +# 1141| getExpr(): [Literal] 0 +# 1141| Type = [IntType] int +# 1141| Value = [Literal] 0 +# 1141| ValueCategory = prvalue +# 1141| getCondition(): [LTExpr] ... < ... +# 1141| Type = [BoolType] bool +# 1141| ValueCategory = prvalue +# 1141| getLesserOperand(): [VariableAccess] i +# 1141| Type = [IntType] int +# 1141| ValueCategory = prvalue(load) +# 1141| getGreaterOperand(): [Literal] 10 +# 1141| Type = [IntType] int +# 1141| Value = [Literal] 10 +# 1141| ValueCategory = prvalue +# 1141| getUpdate(): [PrefixIncrExpr] ++ ... +# 1141| Type = [IntType] int +# 1141| ValueCategory = lvalue +# 1141| getOperand(): [VariableAccess] i +# 1141| Type = [IntType] int +# 1141| ValueCategory = lvalue +# 1141| getStmt(): [BlockStmt] { ... } +# 1141| getStmt(0): [DeclStmt] declaration +# 1141| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of g +# 1141| Type = [IntType] int +# 1141| getStmt(2): [EmptyStmt] ; +# 1142| getStmt(3): [ReturnStmt] return ... +# 1144| [TopLevelFunction] void TryCatchNoCatchAny(bool) +# 1144| : +# 1144| getParameter(0): [Parameter] b +# 1144| Type = [BoolType] bool +# 1144| getEntryPoint(): [BlockStmt] { ... } +# 1145| getStmt(0): [TryStmt] try { ... } +# 1145| getStmt(): [BlockStmt] { ... } +# 1146| getStmt(0): [DeclStmt] declaration +# 1146| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1146| Type = [IntType] int +# 1146| getVariable().getInitializer(): [Initializer] initializer for x +# 1146| getExpr(): [Literal] 5 +# 1146| Type = [IntType] int +# 1146| Value = [Literal] 5 # 1146| ValueCategory = prvalue -# 1146| getExpr(): string literal -# 1146| Type = [ArrayType] const char[15] -# 1146| Value = [StringLiteral] "string literal" -# 1146| ValueCategory = lvalue -# 1146| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1146| Type = [PointerType] const char * -# 1146| ValueCategory = prvalue -# 1148| getElse(): [IfStmt] if (...) ... -# 1148| getCondition(): [LTExpr] ... < ... -# 1148| Type = [BoolType] bool -# 1148| ValueCategory = prvalue -# 1148| getLesserOperand(): [VariableAccess] x -# 1148| Type = [IntType] int -# 1148| ValueCategory = prvalue(load) -# 1148| getGreaterOperand(): [Literal] 2 -# 1148| Type = [IntType] int -# 1148| Value = [Literal] 2 +# 1147| getStmt(1): [IfStmt] if (...) ... +# 1147| getCondition(): [VariableAccess] b +# 1147| Type = [BoolType] bool +# 1147| ValueCategory = prvalue(load) +# 1147| getThen(): [BlockStmt] { ... } +# 1148| getStmt(0): [ExprStmt] ExprStmt +# 1148| getExpr(): [ThrowExpr] throw ... +# 1148| Type = [PointerType] const char * # 1148| ValueCategory = prvalue -# 1148| getThen(): [BlockStmt] { ... } -# 1149| getStmt(0): [ExprStmt] ExprStmt -# 1149| getExpr(): [AssignExpr] ... = ... -# 1149| Type = [IntType] int -# 1149| ValueCategory = lvalue -# 1149| getLValue(): [VariableAccess] x -# 1149| Type = [IntType] int -# 1149| ValueCategory = lvalue -# 1149| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1149| Type = [IntType] int -# 1149| ValueCategory = prvalue -# 1149| getCondition(): [VariableAccess] b -# 1149| Type = [BoolType] bool -# 1149| ValueCategory = prvalue(load) -# 1149| getThen(): [Literal] 7 -# 1149| Type = [IntType] int -# 1149| Value = [Literal] 7 -# 1149| ValueCategory = prvalue -# 1149| getElse(): [ThrowExpr] throw ... -# 1149| Type = [Struct] String -# 1149| ValueCategory = prvalue -# 1149| getExpr(): [ConstructorCall] call to String -# 1149| Type = [VoidType] void -# 1149| ValueCategory = prvalue -# 1149| getArgument(0): String object -# 1149| Type = [ArrayType] const char[14] -# 1149| Value = [StringLiteral] "String object" -# 1149| ValueCategory = lvalue -# 1149| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1149| Type = [PointerType] const char * -# 1149| ValueCategory = prvalue -# 1151| getStmt(2): [ExprStmt] ExprStmt -# 1151| getExpr(): [AssignExpr] ... = ... -# 1151| Type = [IntType] int -# 1151| ValueCategory = lvalue -# 1151| getLValue(): [VariableAccess] x -# 1151| Type = [IntType] int -# 1151| ValueCategory = lvalue -# 1151| getRValue(): [Literal] 7 -# 1151| Type = [IntType] int -# 1151| Value = [Literal] 7 -# 1151| ValueCategory = prvalue -# 1153| getChild(1): [Handler] -# 1153| getBlock(): [CatchBlock] { ... } -# 1154| getStmt(0): [ExprStmt] ExprStmt -# 1154| getExpr(): [ThrowExpr] throw ... -# 1154| Type = [Struct] String -# 1154| ValueCategory = prvalue -# 1154| getExpr(): [ConstructorCall] call to String -# 1154| Type = [VoidType] void -# 1154| ValueCategory = prvalue -# 1154| getArgument(0): [VariableAccess] s -# 1154| Type = [PointerType] const char * -# 1154| ValueCategory = prvalue(load) -# 1156| getChild(2): [Handler] -# 1156| getBlock(): [CatchBlock] { ... } -# 1158| getStmt(1): [ReturnStmt] return ... -# 1162| [TopLevelFunction] void VectorTypes(int) -# 1162| : -# 1162| getParameter(0): [Parameter] i -# 1162| Type = [IntType] int -# 1162| getEntryPoint(): [BlockStmt] { ... } -# 1163| getStmt(0): [DeclStmt] declaration -# 1163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4 -# 1163| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1163| getVariable().getInitializer(): [Initializer] initializer for vi4 -# 1163| getExpr(): [VectorAggregateLiteral] {...} -# 1163| Type = [GNUVectorType] __attribute((vector_size(16UL))) int -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(0): [Literal] 0 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 0 -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(1): [Literal] 1 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 1 -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(2): [Literal] 2 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 2 -# 1163| ValueCategory = prvalue -# 1163| getAnElementExpr(3): [Literal] 3 -# 1163| Type = [IntType] int -# 1163| Value = [Literal] 3 -# 1163| ValueCategory = prvalue -# 1164| getStmt(1): [DeclStmt] declaration -# 1164| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1164| Type = [IntType] int -# 1164| getVariable().getInitializer(): [Initializer] initializer for x -# 1164| getExpr(): [ArrayExpr] access to array -# 1164| Type = [IntType] int -# 1164| ValueCategory = prvalue(load) -# 1164| getArrayBase(): [VariableAccess] vi4 -# 1164| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1164| ValueCategory = lvalue -# 1164| getArrayOffset(): [VariableAccess] i -# 1164| Type = [IntType] int -# 1164| ValueCategory = prvalue(load) -# 1165| getStmt(2): [ExprStmt] ExprStmt -# 1165| getExpr(): [AssignExpr] ... = ... -# 1165| Type = [IntType] int -# 1165| ValueCategory = lvalue -# 1165| getLValue(): [ArrayExpr] access to array -# 1165| Type = [IntType] int -# 1165| ValueCategory = lvalue -# 1165| getArrayBase(): [VariableAccess] vi4 -# 1165| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1165| ValueCategory = lvalue -# 1165| getArrayOffset(): [VariableAccess] i -# 1165| Type = [IntType] int -# 1165| ValueCategory = prvalue(load) -# 1165| getRValue(): [VariableAccess] x -# 1165| Type = [IntType] int -# 1165| ValueCategory = prvalue(load) -# 1166| getStmt(3): [DeclStmt] declaration -# 1166| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4_shuffle -# 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1166| getVariable().getInitializer(): [Initializer] initializer for vi4_shuffle -# 1166| getExpr(): [BuiltInOperationBuiltInShuffleVector] __builtin_shufflevector -# 1166| Type = [GNUVectorType] __attribute((vector_size(16))) int -# 1166| ValueCategory = prvalue -# 1166| getChild(0): [VariableAccess] vi4 +# 1148| getExpr(): string literal +# 1148| Type = [ArrayType] const char[15] +# 1148| Value = [StringLiteral] "string literal" +# 1148| ValueCategory = lvalue +# 1148| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1148| Type = [PointerType] const char * +# 1148| ValueCategory = prvalue +# 1150| getElse(): [IfStmt] if (...) ... +# 1150| getCondition(): [LTExpr] ... < ... +# 1150| Type = [BoolType] bool +# 1150| ValueCategory = prvalue +# 1150| getLesserOperand(): [VariableAccess] x +# 1150| Type = [IntType] int +# 1150| ValueCategory = prvalue(load) +# 1150| getGreaterOperand(): [Literal] 2 +# 1150| Type = [IntType] int +# 1150| Value = [Literal] 2 +# 1150| ValueCategory = prvalue +# 1150| getThen(): [BlockStmt] { ... } +# 1151| getStmt(0): [ExprStmt] ExprStmt +# 1151| getExpr(): [AssignExpr] ... = ... +# 1151| Type = [IntType] int +# 1151| ValueCategory = lvalue +# 1151| getLValue(): [VariableAccess] x +# 1151| Type = [IntType] int +# 1151| ValueCategory = lvalue +# 1151| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1151| Type = [IntType] int +# 1151| ValueCategory = prvalue +# 1151| getCondition(): [VariableAccess] b +# 1151| Type = [BoolType] bool +# 1151| ValueCategory = prvalue(load) +# 1151| getThen(): [Literal] 7 +# 1151| Type = [IntType] int +# 1151| Value = [Literal] 7 +# 1151| ValueCategory = prvalue +# 1151| getElse(): [ThrowExpr] throw ... +# 1151| Type = [Struct] String +# 1151| ValueCategory = prvalue +# 1151| getExpr(): [ConstructorCall] call to String +# 1151| Type = [VoidType] void +# 1151| ValueCategory = prvalue +# 1151| getArgument(0): String object +# 1151| Type = [ArrayType] const char[14] +# 1151| Value = [StringLiteral] "String object" +# 1151| ValueCategory = lvalue +# 1151| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1151| Type = [PointerType] const char * +# 1151| ValueCategory = prvalue +# 1153| getStmt(2): [ExprStmt] ExprStmt +# 1153| getExpr(): [AssignExpr] ... = ... +# 1153| Type = [IntType] int +# 1153| ValueCategory = lvalue +# 1153| getLValue(): [VariableAccess] x +# 1153| Type = [IntType] int +# 1153| ValueCategory = lvalue +# 1153| getRValue(): [Literal] 7 +# 1153| Type = [IntType] int +# 1153| Value = [Literal] 7 +# 1153| ValueCategory = prvalue +# 1155| getChild(1): [Handler] +# 1155| getBlock(): [CatchBlock] { ... } +# 1156| getStmt(0): [ExprStmt] ExprStmt +# 1156| getExpr(): [ThrowExpr] throw ... +# 1156| Type = [Struct] String +# 1156| ValueCategory = prvalue +# 1156| getExpr(): [ConstructorCall] call to String +# 1156| Type = [VoidType] void +# 1156| ValueCategory = prvalue +# 1156| getArgument(0): [VariableAccess] s +# 1156| Type = [PointerType] const char * +# 1156| ValueCategory = prvalue(load) +# 1158| getChild(2): [Handler] +# 1158| getBlock(): [CatchBlock] { ... } +# 1160| getStmt(1): [ReturnStmt] return ... +# 1164| [TopLevelFunction] void VectorTypes(int) +# 1164| : +# 1164| getParameter(0): [Parameter] i +# 1164| Type = [IntType] int +# 1164| getEntryPoint(): [BlockStmt] { ... } +# 1165| getStmt(0): [DeclStmt] declaration +# 1165| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4 +# 1165| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1165| getVariable().getInitializer(): [Initializer] initializer for vi4 +# 1165| getExpr(): [VectorAggregateLiteral] {...} +# 1165| Type = [GNUVectorType] __attribute((vector_size(16UL))) int +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(0): [Literal] 0 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 0 +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(1): [Literal] 1 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 1 +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(2): [Literal] 2 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 2 +# 1165| ValueCategory = prvalue +# 1165| getAnElementExpr(3): [Literal] 3 +# 1165| Type = [IntType] int +# 1165| Value = [Literal] 3 +# 1165| ValueCategory = prvalue +# 1166| getStmt(1): [DeclStmt] declaration +# 1166| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1166| Type = [IntType] int +# 1166| getVariable().getInitializer(): [Initializer] initializer for x +# 1166| getExpr(): [ArrayExpr] access to array +# 1166| Type = [IntType] int +# 1166| ValueCategory = prvalue(load) +# 1166| getArrayBase(): [VariableAccess] vi4 # 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1166| ValueCategory = lvalue +# 1166| getArrayOffset(): [VariableAccess] i +# 1166| Type = [IntType] int # 1166| ValueCategory = prvalue(load) -# 1166| getChild(1): [VariableAccess] vi4 -# 1166| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1166| ValueCategory = prvalue(load) -# 1166| getChild(2): [AddExpr] ... + ... -# 1166| Type = [IntType] int -# 1166| Value = [AddExpr] 3 -# 1166| ValueCategory = prvalue -# 1166| getLeftOperand(): [Literal] 3 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 3 -# 1166| ValueCategory = prvalue -# 1166| getRightOperand(): [Literal] 0 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 0 -# 1166| ValueCategory = prvalue -# 1166| getChild(3): [Literal] 2 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 2 -# 1166| ValueCategory = prvalue -# 1166| getChild(4): [Literal] 1 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 1 -# 1166| ValueCategory = prvalue -# 1166| getChild(5): [Literal] 0 -# 1166| Type = [IntType] int -# 1166| Value = [Literal] 0 -# 1166| ValueCategory = prvalue -# 1167| getStmt(4): [ExprStmt] ExprStmt +# 1167| getStmt(2): [ExprStmt] ExprStmt # 1167| getExpr(): [AssignExpr] ... = ... -# 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1167| Type = [IntType] int # 1167| ValueCategory = lvalue -# 1167| getLValue(): [VariableAccess] vi4 -# 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1167| getLValue(): [ArrayExpr] access to array +# 1167| Type = [IntType] int # 1167| ValueCategory = lvalue -# 1167| getRValue(): [AddExpr] ... + ... -# 1167| Type = [GNUVectorType] __attribute((vector_size(16UL))) int -# 1167| ValueCategory = prvalue -# 1167| getLeftOperand(): [VariableAccess] vi4 +# 1167| getArrayBase(): [VariableAccess] vi4 # 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1167| ValueCategory = lvalue +# 1167| getArrayOffset(): [VariableAccess] i +# 1167| Type = [IntType] int # 1167| ValueCategory = prvalue(load) -# 1167| getRightOperand(): [VariableAccess] vi4_shuffle -# 1167| Type = [SpecifiedType] __attribute((vector_size(16UL))) int -# 1167| ValueCategory = prvalue(load) -# 1168| getStmt(5): [ReturnStmt] return ... -# 1170| [TopLevelFunction] void* memcpy(void*, void*, int) -# 1170| : -# 1170| getParameter(0): [Parameter] dst -# 1170| Type = [VoidPointerType] void * -# 1170| getParameter(1): [Parameter] src -# 1170| Type = [VoidPointerType] void * -# 1170| getParameter(2): [Parameter] size -# 1170| Type = [IntType] int -# 1172| [TopLevelFunction] int ModeledCallTarget(int) +# 1167| getRValue(): [VariableAccess] x +# 1167| Type = [IntType] int +# 1167| ValueCategory = prvalue(load) +# 1168| getStmt(3): [DeclStmt] declaration +# 1168| getDeclarationEntry(0): [VariableDeclarationEntry] definition of vi4_shuffle +# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1168| getVariable().getInitializer(): [Initializer] initializer for vi4_shuffle +# 1168| getExpr(): [BuiltInOperationBuiltInShuffleVector] __builtin_shufflevector +# 1168| Type = [GNUVectorType] __attribute((vector_size(16))) int +# 1168| ValueCategory = prvalue +# 1168| getChild(0): [VariableAccess] vi4 +# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1168| ValueCategory = prvalue(load) +# 1168| getChild(1): [VariableAccess] vi4 +# 1168| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1168| ValueCategory = prvalue(load) +# 1168| getChild(2): [AddExpr] ... + ... +# 1168| Type = [IntType] int +# 1168| Value = [AddExpr] 3 +# 1168| ValueCategory = prvalue +# 1168| getLeftOperand(): [Literal] 3 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 3 +# 1168| ValueCategory = prvalue +# 1168| getRightOperand(): [Literal] 0 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 0 +# 1168| ValueCategory = prvalue +# 1168| getChild(3): [Literal] 2 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 2 +# 1168| ValueCategory = prvalue +# 1168| getChild(4): [Literal] 1 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 1 +# 1168| ValueCategory = prvalue +# 1168| getChild(5): [Literal] 0 +# 1168| Type = [IntType] int +# 1168| Value = [Literal] 0 +# 1168| ValueCategory = prvalue +# 1169| getStmt(4): [ExprStmt] ExprStmt +# 1169| getExpr(): [AssignExpr] ... = ... +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = lvalue +# 1169| getLValue(): [VariableAccess] vi4 +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = lvalue +# 1169| getRValue(): [AddExpr] ... + ... +# 1169| Type = [GNUVectorType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = prvalue +# 1169| getLeftOperand(): [VariableAccess] vi4 +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = prvalue(load) +# 1169| getRightOperand(): [VariableAccess] vi4_shuffle +# 1169| Type = [SpecifiedType] __attribute((vector_size(16UL))) int +# 1169| ValueCategory = prvalue(load) +# 1170| getStmt(5): [ReturnStmt] return ... +# 1172| [TopLevelFunction] void* memcpy(void*, void*, int) # 1172| : -# 1172| getParameter(0): [Parameter] x +# 1172| getParameter(0): [Parameter] dst +# 1172| Type = [VoidPointerType] void * +# 1172| getParameter(1): [Parameter] src +# 1172| Type = [VoidPointerType] void * +# 1172| getParameter(2): [Parameter] size # 1172| Type = [IntType] int -# 1172| getEntryPoint(): [BlockStmt] { ... } -# 1173| getStmt(0): [DeclStmt] declaration -# 1173| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1173| Type = [IntType] int -# 1174| getStmt(1): [ExprStmt] ExprStmt -# 1174| getExpr(): [FunctionCall] call to memcpy -# 1174| Type = [VoidPointerType] void * -# 1174| ValueCategory = prvalue -# 1174| getArgument(0): [AddressOfExpr] & ... -# 1174| Type = [IntPointerType] int * -# 1174| ValueCategory = prvalue -# 1174| getOperand(): [VariableAccess] y -# 1174| Type = [IntType] int -# 1174| ValueCategory = lvalue -# 1174| getArgument(1): [AddressOfExpr] & ... -# 1174| Type = [IntPointerType] int * -# 1174| ValueCategory = prvalue -# 1174| getOperand(): [VariableAccess] x -# 1174| Type = [IntType] int -# 1174| ValueCategory = lvalue -# 1174| getArgument(2): [SizeofTypeOperator] sizeof(int) -# 1174| Type = [LongType] unsigned long -# 1174| Value = [SizeofTypeOperator] 4 -# 1174| ValueCategory = prvalue -# 1174| getArgument(0).getFullyConverted(): [CStyleCast] (void *)... -# 1174| Conversion = [PointerConversion] pointer conversion -# 1174| Type = [VoidPointerType] void * -# 1174| ValueCategory = prvalue -# 1174| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... -# 1174| Conversion = [PointerConversion] pointer conversion -# 1174| Type = [VoidPointerType] void * -# 1174| ValueCategory = prvalue -# 1174| getArgument(2).getFullyConverted(): [CStyleCast] (int)... -# 1174| Conversion = [IntegralConversion] integral conversion -# 1174| Type = [IntType] int -# 1174| Value = [CStyleCast] 4 -# 1174| ValueCategory = prvalue -# 1175| getStmt(2): [ReturnStmt] return ... -# 1175| getExpr(): [VariableAccess] y +# 1174| [TopLevelFunction] int ModeledCallTarget(int) +# 1174| : +# 1174| getParameter(0): [Parameter] x +# 1174| Type = [IntType] int +# 1174| getEntryPoint(): [BlockStmt] { ... } +# 1175| getStmt(0): [DeclStmt] declaration +# 1175| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 1175| Type = [IntType] int -# 1175| ValueCategory = prvalue(load) -# 1178| [TopLevelFunction] String ReturnObjectImpl() -# 1178| : -# 1178| getEntryPoint(): [BlockStmt] { ... } -# 1179| getStmt(0): [ReturnStmt] return ... -# 1179| getExpr(): [ConstructorCall] call to String -# 1179| Type = [VoidType] void -# 1179| ValueCategory = prvalue -# 1179| getArgument(0): foo -# 1179| Type = [ArrayType] const char[4] -# 1179| Value = [StringLiteral] "foo" -# 1179| ValueCategory = lvalue -# 1179| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1179| Type = [PointerType] const char * -# 1179| ValueCategory = prvalue -# 1182| [TopLevelFunction] void switch1Case(int) -# 1182| : -# 1182| getParameter(0): [Parameter] x -# 1182| Type = [IntType] int -# 1182| getEntryPoint(): [BlockStmt] { ... } -# 1183| getStmt(0): [DeclStmt] declaration -# 1183| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1183| Type = [IntType] int -# 1183| getVariable().getInitializer(): [Initializer] initializer for y -# 1183| getExpr(): [Literal] 0 -# 1183| Type = [IntType] int -# 1183| Value = [Literal] 0 -# 1183| ValueCategory = prvalue -# 1184| getStmt(1): [SwitchStmt] switch (...) ... -# 1184| getExpr(): [VariableAccess] x -# 1184| Type = [IntType] int -# 1184| ValueCategory = prvalue(load) -# 1184| getStmt(): [BlockStmt] { ... } -# 1185| getStmt(0): [SwitchCase] case ...: -# 1185| getExpr(): [Literal] 1 +# 1176| getStmt(1): [ExprStmt] ExprStmt +# 1176| getExpr(): [FunctionCall] call to memcpy +# 1176| Type = [VoidPointerType] void * +# 1176| ValueCategory = prvalue +# 1176| getArgument(0): [AddressOfExpr] & ... +# 1176| Type = [IntPointerType] int * +# 1176| ValueCategory = prvalue +# 1176| getOperand(): [VariableAccess] y +# 1176| Type = [IntType] int +# 1176| ValueCategory = lvalue +# 1176| getArgument(1): [AddressOfExpr] & ... +# 1176| Type = [IntPointerType] int * +# 1176| ValueCategory = prvalue +# 1176| getOperand(): [VariableAccess] x +# 1176| Type = [IntType] int +# 1176| ValueCategory = lvalue +# 1176| getArgument(2): [SizeofTypeOperator] sizeof(int) +# 1176| Type = [LongType] unsigned long +# 1176| Value = [SizeofTypeOperator] 4 +# 1176| ValueCategory = prvalue +# 1176| getArgument(0).getFullyConverted(): [CStyleCast] (void *)... +# 1176| Conversion = [PointerConversion] pointer conversion +# 1176| Type = [VoidPointerType] void * +# 1176| ValueCategory = prvalue +# 1176| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... +# 1176| Conversion = [PointerConversion] pointer conversion +# 1176| Type = [VoidPointerType] void * +# 1176| ValueCategory = prvalue +# 1176| getArgument(2).getFullyConverted(): [CStyleCast] (int)... +# 1176| Conversion = [IntegralConversion] integral conversion +# 1176| Type = [IntType] int +# 1176| Value = [CStyleCast] 4 +# 1176| ValueCategory = prvalue +# 1177| getStmt(2): [ReturnStmt] return ... +# 1177| getExpr(): [VariableAccess] y +# 1177| Type = [IntType] int +# 1177| ValueCategory = prvalue(load) +# 1180| [TopLevelFunction] String ReturnObjectImpl() +# 1180| : +# 1180| getEntryPoint(): [BlockStmt] { ... } +# 1181| getStmt(0): [ReturnStmt] return ... +# 1181| getExpr(): [ConstructorCall] call to String +# 1181| Type = [VoidType] void +# 1181| ValueCategory = prvalue +# 1181| getArgument(0): foo +# 1181| Type = [ArrayType] const char[4] +# 1181| Value = [StringLiteral] "foo" +# 1181| ValueCategory = lvalue +# 1181| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1181| Type = [PointerType] const char * +# 1181| ValueCategory = prvalue +# 1184| [TopLevelFunction] void switch1Case(int) +# 1184| : +# 1184| getParameter(0): [Parameter] x +# 1184| Type = [IntType] int +# 1184| getEntryPoint(): [BlockStmt] { ... } +# 1185| getStmt(0): [DeclStmt] declaration +# 1185| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1185| Type = [IntType] int +# 1185| getVariable().getInitializer(): [Initializer] initializer for y +# 1185| getExpr(): [Literal] 0 # 1185| Type = [IntType] int -# 1185| Value = [Literal] 1 +# 1185| Value = [Literal] 0 # 1185| ValueCategory = prvalue -# 1186| getStmt(1): [ExprStmt] ExprStmt -# 1186| getExpr(): [AssignExpr] ... = ... -# 1186| Type = [IntType] int -# 1186| ValueCategory = lvalue -# 1186| getLValue(): [VariableAccess] y -# 1186| Type = [IntType] int -# 1186| ValueCategory = lvalue -# 1186| getRValue(): [Literal] 2 -# 1186| Type = [IntType] int -# 1186| Value = [Literal] 2 -# 1186| ValueCategory = prvalue -# 1188| getStmt(2): [DeclStmt] declaration -# 1188| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1188| Type = [IntType] int -# 1188| getVariable().getInitializer(): [Initializer] initializer for z -# 1188| getExpr(): [VariableAccess] y +# 1186| getStmt(1): [SwitchStmt] switch (...) ... +# 1186| getExpr(): [VariableAccess] x +# 1186| Type = [IntType] int +# 1186| ValueCategory = prvalue(load) +# 1186| getStmt(): [BlockStmt] { ... } +# 1187| getStmt(0): [SwitchCase] case ...: +# 1187| getExpr(): [Literal] 1 +# 1187| Type = [IntType] int +# 1187| Value = [Literal] 1 +# 1187| ValueCategory = prvalue +# 1188| getStmt(1): [ExprStmt] ExprStmt +# 1188| getExpr(): [AssignExpr] ... = ... # 1188| Type = [IntType] int -# 1188| ValueCategory = prvalue(load) -# 1189| getStmt(3): [ReturnStmt] return ... -# 1191| [TopLevelFunction] void switch2Case_fallthrough(int) -# 1191| : -# 1191| getParameter(0): [Parameter] x -# 1191| Type = [IntType] int -# 1191| getEntryPoint(): [BlockStmt] { ... } -# 1192| getStmt(0): [DeclStmt] declaration -# 1192| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1192| Type = [IntType] int -# 1192| getVariable().getInitializer(): [Initializer] initializer for y -# 1192| getExpr(): [Literal] 0 -# 1192| Type = [IntType] int -# 1192| Value = [Literal] 0 -# 1192| ValueCategory = prvalue -# 1193| getStmt(1): [SwitchStmt] switch (...) ... -# 1193| getExpr(): [VariableAccess] x -# 1193| Type = [IntType] int -# 1193| ValueCategory = prvalue(load) -# 1193| getStmt(): [BlockStmt] { ... } -# 1194| getStmt(0): [SwitchCase] case ...: -# 1194| getExpr(): [Literal] 1 +# 1188| ValueCategory = lvalue +# 1188| getLValue(): [VariableAccess] y +# 1188| Type = [IntType] int +# 1188| ValueCategory = lvalue +# 1188| getRValue(): [Literal] 2 +# 1188| Type = [IntType] int +# 1188| Value = [Literal] 2 +# 1188| ValueCategory = prvalue +# 1190| getStmt(2): [DeclStmt] declaration +# 1190| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1190| Type = [IntType] int +# 1190| getVariable().getInitializer(): [Initializer] initializer for z +# 1190| getExpr(): [VariableAccess] y +# 1190| Type = [IntType] int +# 1190| ValueCategory = prvalue(load) +# 1191| getStmt(3): [ReturnStmt] return ... +# 1193| [TopLevelFunction] void switch2Case_fallthrough(int) +# 1193| : +# 1193| getParameter(0): [Parameter] x +# 1193| Type = [IntType] int +# 1193| getEntryPoint(): [BlockStmt] { ... } +# 1194| getStmt(0): [DeclStmt] declaration +# 1194| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1194| Type = [IntType] int +# 1194| getVariable().getInitializer(): [Initializer] initializer for y +# 1194| getExpr(): [Literal] 0 # 1194| Type = [IntType] int -# 1194| Value = [Literal] 1 +# 1194| Value = [Literal] 0 # 1194| ValueCategory = prvalue -# 1195| getStmt(1): [ExprStmt] ExprStmt -# 1195| getExpr(): [AssignExpr] ... = ... -# 1195| Type = [IntType] int -# 1195| ValueCategory = lvalue -# 1195| getLValue(): [VariableAccess] y -# 1195| Type = [IntType] int -# 1195| ValueCategory = lvalue -# 1195| getRValue(): [Literal] 2 -# 1195| Type = [IntType] int -# 1195| Value = [Literal] 2 -# 1195| ValueCategory = prvalue -# 1196| getStmt(2): [SwitchCase] case ...: -# 1196| getExpr(): [Literal] 2 +# 1195| getStmt(1): [SwitchStmt] switch (...) ... +# 1195| getExpr(): [VariableAccess] x +# 1195| Type = [IntType] int +# 1195| ValueCategory = prvalue(load) +# 1195| getStmt(): [BlockStmt] { ... } +# 1196| getStmt(0): [SwitchCase] case ...: +# 1196| getExpr(): [Literal] 1 # 1196| Type = [IntType] int -# 1196| Value = [Literal] 2 +# 1196| Value = [Literal] 1 # 1196| ValueCategory = prvalue -# 1197| getStmt(3): [ExprStmt] ExprStmt +# 1197| getStmt(1): [ExprStmt] ExprStmt # 1197| getExpr(): [AssignExpr] ... = ... # 1197| Type = [IntType] int # 1197| ValueCategory = lvalue # 1197| getLValue(): [VariableAccess] y # 1197| Type = [IntType] int # 1197| ValueCategory = lvalue -# 1197| getRValue(): [Literal] 3 +# 1197| getRValue(): [Literal] 2 # 1197| Type = [IntType] int -# 1197| Value = [Literal] 3 +# 1197| Value = [Literal] 2 # 1197| ValueCategory = prvalue -# 1199| getStmt(2): [DeclStmt] declaration -# 1199| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1199| Type = [IntType] int -# 1199| getVariable().getInitializer(): [Initializer] initializer for z -# 1199| getExpr(): [VariableAccess] y +# 1198| getStmt(2): [SwitchCase] case ...: +# 1198| getExpr(): [Literal] 2 +# 1198| Type = [IntType] int +# 1198| Value = [Literal] 2 +# 1198| ValueCategory = prvalue +# 1199| getStmt(3): [ExprStmt] ExprStmt +# 1199| getExpr(): [AssignExpr] ... = ... # 1199| Type = [IntType] int -# 1199| ValueCategory = prvalue(load) -# 1200| getStmt(3): [ReturnStmt] return ... -# 1202| [TopLevelFunction] void switch2Case(int) -# 1202| : -# 1202| getParameter(0): [Parameter] x -# 1202| Type = [IntType] int -# 1202| getEntryPoint(): [BlockStmt] { ... } -# 1203| getStmt(0): [DeclStmt] declaration -# 1203| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1203| Type = [IntType] int -# 1203| getVariable().getInitializer(): [Initializer] initializer for y -# 1203| getExpr(): [Literal] 0 -# 1203| Type = [IntType] int -# 1203| Value = [Literal] 0 -# 1203| ValueCategory = prvalue -# 1204| getStmt(1): [SwitchStmt] switch (...) ... -# 1204| getExpr(): [VariableAccess] x -# 1204| Type = [IntType] int -# 1204| ValueCategory = prvalue(load) -# 1204| getStmt(): [BlockStmt] { ... } -# 1205| getStmt(0): [SwitchCase] case ...: -# 1205| getExpr(): [Literal] 1 +# 1199| ValueCategory = lvalue +# 1199| getLValue(): [VariableAccess] y +# 1199| Type = [IntType] int +# 1199| ValueCategory = lvalue +# 1199| getRValue(): [Literal] 3 +# 1199| Type = [IntType] int +# 1199| Value = [Literal] 3 +# 1199| ValueCategory = prvalue +# 1201| getStmt(2): [DeclStmt] declaration +# 1201| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1201| Type = [IntType] int +# 1201| getVariable().getInitializer(): [Initializer] initializer for z +# 1201| getExpr(): [VariableAccess] y +# 1201| Type = [IntType] int +# 1201| ValueCategory = prvalue(load) +# 1202| getStmt(3): [ReturnStmt] return ... +# 1204| [TopLevelFunction] void switch2Case(int) +# 1204| : +# 1204| getParameter(0): [Parameter] x +# 1204| Type = [IntType] int +# 1204| getEntryPoint(): [BlockStmt] { ... } +# 1205| getStmt(0): [DeclStmt] declaration +# 1205| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1205| Type = [IntType] int +# 1205| getVariable().getInitializer(): [Initializer] initializer for y +# 1205| getExpr(): [Literal] 0 # 1205| Type = [IntType] int -# 1205| Value = [Literal] 1 +# 1205| Value = [Literal] 0 # 1205| ValueCategory = prvalue -# 1206| getStmt(1): [ExprStmt] ExprStmt -# 1206| getExpr(): [AssignExpr] ... = ... -# 1206| Type = [IntType] int -# 1206| ValueCategory = lvalue -# 1206| getLValue(): [VariableAccess] y -# 1206| Type = [IntType] int -# 1206| ValueCategory = lvalue -# 1206| getRValue(): [Literal] 2 -# 1206| Type = [IntType] int -# 1206| Value = [Literal] 2 -# 1206| ValueCategory = prvalue -# 1207| getStmt(2): [BreakStmt] break; -# 1208| getStmt(3): [SwitchCase] case ...: -# 1208| getExpr(): [Literal] 2 +# 1206| getStmt(1): [SwitchStmt] switch (...) ... +# 1206| getExpr(): [VariableAccess] x +# 1206| Type = [IntType] int +# 1206| ValueCategory = prvalue(load) +# 1206| getStmt(): [BlockStmt] { ... } +# 1207| getStmt(0): [SwitchCase] case ...: +# 1207| getExpr(): [Literal] 1 +# 1207| Type = [IntType] int +# 1207| Value = [Literal] 1 +# 1207| ValueCategory = prvalue +# 1208| getStmt(1): [ExprStmt] ExprStmt +# 1208| getExpr(): [AssignExpr] ... = ... # 1208| Type = [IntType] int -# 1208| Value = [Literal] 2 -# 1208| ValueCategory = prvalue -# 1209| getStmt(4): [ExprStmt] ExprStmt -# 1209| getExpr(): [AssignExpr] ... = ... -# 1209| Type = [IntType] int -# 1209| ValueCategory = lvalue -# 1209| getLValue(): [VariableAccess] y -# 1209| Type = [IntType] int -# 1209| ValueCategory = lvalue -# 1209| getRValue(): [Literal] 3 -# 1209| Type = [IntType] int -# 1209| Value = [Literal] 3 -# 1209| ValueCategory = prvalue -# 1210| getStmt(2): [LabelStmt] label ...: -# 1211| getStmt(3): [DeclStmt] declaration -# 1211| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1211| Type = [IntType] int -# 1211| getVariable().getInitializer(): [Initializer] initializer for z -# 1211| getExpr(): [VariableAccess] y +# 1208| ValueCategory = lvalue +# 1208| getLValue(): [VariableAccess] y +# 1208| Type = [IntType] int +# 1208| ValueCategory = lvalue +# 1208| getRValue(): [Literal] 2 +# 1208| Type = [IntType] int +# 1208| Value = [Literal] 2 +# 1208| ValueCategory = prvalue +# 1209| getStmt(2): [BreakStmt] break; +# 1210| getStmt(3): [SwitchCase] case ...: +# 1210| getExpr(): [Literal] 2 +# 1210| Type = [IntType] int +# 1210| Value = [Literal] 2 +# 1210| ValueCategory = prvalue +# 1211| getStmt(4): [ExprStmt] ExprStmt +# 1211| getExpr(): [AssignExpr] ... = ... # 1211| Type = [IntType] int -# 1211| ValueCategory = prvalue(load) -# 1212| getStmt(4): [ReturnStmt] return ... -# 1214| [TopLevelFunction] void switch2Case_default(int) -# 1214| : -# 1214| getParameter(0): [Parameter] x -# 1214| Type = [IntType] int -# 1214| getEntryPoint(): [BlockStmt] { ... } -# 1215| getStmt(0): [DeclStmt] declaration -# 1215| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1215| Type = [IntType] int -# 1215| getVariable().getInitializer(): [Initializer] initializer for y -# 1215| getExpr(): [Literal] 0 -# 1215| Type = [IntType] int -# 1215| Value = [Literal] 0 -# 1215| ValueCategory = prvalue -# 1216| getStmt(1): [SwitchStmt] switch (...) ... -# 1216| getExpr(): [VariableAccess] x -# 1216| Type = [IntType] int -# 1216| ValueCategory = prvalue(load) -# 1216| getStmt(): [BlockStmt] { ... } -# 1217| getStmt(0): [SwitchCase] case ...: -# 1217| getExpr(): [Literal] 1 +# 1211| ValueCategory = lvalue +# 1211| getLValue(): [VariableAccess] y +# 1211| Type = [IntType] int +# 1211| ValueCategory = lvalue +# 1211| getRValue(): [Literal] 3 +# 1211| Type = [IntType] int +# 1211| Value = [Literal] 3 +# 1211| ValueCategory = prvalue +# 1212| getStmt(2): [LabelStmt] label ...: +# 1213| getStmt(3): [DeclStmt] declaration +# 1213| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1213| Type = [IntType] int +# 1213| getVariable().getInitializer(): [Initializer] initializer for z +# 1213| getExpr(): [VariableAccess] y +# 1213| Type = [IntType] int +# 1213| ValueCategory = prvalue(load) +# 1214| getStmt(4): [ReturnStmt] return ... +# 1216| [TopLevelFunction] void switch2Case_default(int) +# 1216| : +# 1216| getParameter(0): [Parameter] x +# 1216| Type = [IntType] int +# 1216| getEntryPoint(): [BlockStmt] { ... } +# 1217| getStmt(0): [DeclStmt] declaration +# 1217| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1217| Type = [IntType] int +# 1217| getVariable().getInitializer(): [Initializer] initializer for y +# 1217| getExpr(): [Literal] 0 # 1217| Type = [IntType] int -# 1217| Value = [Literal] 1 +# 1217| Value = [Literal] 0 # 1217| ValueCategory = prvalue -# 1218| getStmt(1): [ExprStmt] ExprStmt -# 1218| getExpr(): [AssignExpr] ... = ... -# 1218| Type = [IntType] int -# 1218| ValueCategory = lvalue -# 1218| getLValue(): [VariableAccess] y -# 1218| Type = [IntType] int -# 1218| ValueCategory = lvalue -# 1218| getRValue(): [Literal] 2 -# 1218| Type = [IntType] int -# 1218| Value = [Literal] 2 -# 1218| ValueCategory = prvalue -# 1219| getStmt(2): [BreakStmt] break; -# 1221| getStmt(3): [SwitchCase] case ...: -# 1221| getExpr(): [Literal] 2 -# 1221| Type = [IntType] int -# 1221| Value = [Literal] 2 -# 1221| ValueCategory = prvalue -# 1222| getStmt(4): [ExprStmt] ExprStmt -# 1222| getExpr(): [AssignExpr] ... = ... -# 1222| Type = [IntType] int -# 1222| ValueCategory = lvalue -# 1222| getLValue(): [VariableAccess] y -# 1222| Type = [IntType] int -# 1222| ValueCategory = lvalue -# 1222| getRValue(): [Literal] 3 -# 1222| Type = [IntType] int -# 1222| Value = [Literal] 3 -# 1222| ValueCategory = prvalue -# 1223| getStmt(5): [BreakStmt] break; -# 1225| getStmt(6): [SwitchCase] default: -# 1226| getStmt(7): [ExprStmt] ExprStmt -# 1226| getExpr(): [AssignExpr] ... = ... -# 1226| Type = [IntType] int -# 1226| ValueCategory = lvalue -# 1226| getLValue(): [VariableAccess] y -# 1226| Type = [IntType] int -# 1226| ValueCategory = lvalue -# 1226| getRValue(): [Literal] 4 -# 1226| Type = [IntType] int -# 1226| Value = [Literal] 4 -# 1226| ValueCategory = prvalue -# 1227| getStmt(2): [LabelStmt] label ...: -# 1228| getStmt(3): [DeclStmt] declaration -# 1228| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1228| Type = [IntType] int -# 1228| getVariable().getInitializer(): [Initializer] initializer for z -# 1228| getExpr(): [VariableAccess] y +# 1218| getStmt(1): [SwitchStmt] switch (...) ... +# 1218| getExpr(): [VariableAccess] x +# 1218| Type = [IntType] int +# 1218| ValueCategory = prvalue(load) +# 1218| getStmt(): [BlockStmt] { ... } +# 1219| getStmt(0): [SwitchCase] case ...: +# 1219| getExpr(): [Literal] 1 +# 1219| Type = [IntType] int +# 1219| Value = [Literal] 1 +# 1219| ValueCategory = prvalue +# 1220| getStmt(1): [ExprStmt] ExprStmt +# 1220| getExpr(): [AssignExpr] ... = ... +# 1220| Type = [IntType] int +# 1220| ValueCategory = lvalue +# 1220| getLValue(): [VariableAccess] y +# 1220| Type = [IntType] int +# 1220| ValueCategory = lvalue +# 1220| getRValue(): [Literal] 2 +# 1220| Type = [IntType] int +# 1220| Value = [Literal] 2 +# 1220| ValueCategory = prvalue +# 1221| getStmt(2): [BreakStmt] break; +# 1223| getStmt(3): [SwitchCase] case ...: +# 1223| getExpr(): [Literal] 2 +# 1223| Type = [IntType] int +# 1223| Value = [Literal] 2 +# 1223| ValueCategory = prvalue +# 1224| getStmt(4): [ExprStmt] ExprStmt +# 1224| getExpr(): [AssignExpr] ... = ... +# 1224| Type = [IntType] int +# 1224| ValueCategory = lvalue +# 1224| getLValue(): [VariableAccess] y +# 1224| Type = [IntType] int +# 1224| ValueCategory = lvalue +# 1224| getRValue(): [Literal] 3 +# 1224| Type = [IntType] int +# 1224| Value = [Literal] 3 +# 1224| ValueCategory = prvalue +# 1225| getStmt(5): [BreakStmt] break; +# 1227| getStmt(6): [SwitchCase] default: +# 1228| getStmt(7): [ExprStmt] ExprStmt +# 1228| getExpr(): [AssignExpr] ... = ... # 1228| Type = [IntType] int -# 1228| ValueCategory = prvalue(load) -# 1229| getStmt(4): [ReturnStmt] return ... -# 1231| [TopLevelFunction] int staticLocalInit(int) -# 1231| : -# 1231| getParameter(0): [Parameter] x -# 1231| Type = [IntType] int -# 1231| getEntryPoint(): [BlockStmt] { ... } -# 1232| getStmt(0): [DeclStmt] declaration -# 1232| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1232| Type = [IntType] int -# 1232| getVariable().getInitializer(): [Initializer] initializer for a -# 1232| getExpr(): [Literal] 0 -# 1232| Type = [IntType] int -# 1232| Value = [Literal] 0 -# 1232| ValueCategory = prvalue -# 1233| getStmt(1): [DeclStmt] declaration -# 1233| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1233| Type = [IntType] int -# 1233| getVariable().getInitializer(): [Initializer] initializer for b -# 1233| getExpr(): [SizeofExprOperator] sizeof() -# 1233| Type = [LongType] unsigned long -# 1233| Value = [SizeofExprOperator] 4 -# 1233| ValueCategory = prvalue -# 1233| getExprOperand(): [VariableAccess] x -# 1233| Type = [IntType] int -# 1233| ValueCategory = lvalue -# 1233| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) -# 1233| Type = [IntType] int -# 1233| ValueCategory = lvalue -# 1233| getExpr().getFullyConverted(): [CStyleCast] (int)... -# 1233| Conversion = [IntegralConversion] integral conversion -# 1233| Type = [IntType] int -# 1233| Value = [CStyleCast] 4 -# 1233| ValueCategory = prvalue -# 1234| getStmt(2): [DeclStmt] declaration -# 1234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1228| ValueCategory = lvalue +# 1228| getLValue(): [VariableAccess] y +# 1228| Type = [IntType] int +# 1228| ValueCategory = lvalue +# 1228| getRValue(): [Literal] 4 +# 1228| Type = [IntType] int +# 1228| Value = [Literal] 4 +# 1228| ValueCategory = prvalue +# 1229| getStmt(2): [LabelStmt] label ...: +# 1230| getStmt(3): [DeclStmt] declaration +# 1230| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1230| Type = [IntType] int +# 1230| getVariable().getInitializer(): [Initializer] initializer for z +# 1230| getExpr(): [VariableAccess] y +# 1230| Type = [IntType] int +# 1230| ValueCategory = prvalue(load) +# 1231| getStmt(4): [ReturnStmt] return ... +# 1233| [TopLevelFunction] int staticLocalInit(int) +# 1233| : +# 1233| getParameter(0): [Parameter] x +# 1233| Type = [IntType] int +# 1233| getEntryPoint(): [BlockStmt] { ... } +# 1234| getStmt(0): [DeclStmt] declaration +# 1234| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a # 1234| Type = [IntType] int -# 1234| getVariable().getInitializer(): [Initializer] initializer for c -# 1234| getExpr(): [VariableAccess] x +# 1234| getVariable().getInitializer(): [Initializer] initializer for a +# 1234| getExpr(): [Literal] 0 # 1234| Type = [IntType] int -# 1234| ValueCategory = prvalue(load) -# 1235| getStmt(3): [DeclStmt] declaration -# 1235| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1234| Value = [Literal] 0 +# 1234| ValueCategory = prvalue +# 1235| getStmt(1): [DeclStmt] declaration +# 1235| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b # 1235| Type = [IntType] int -# 1237| getStmt(4): [ReturnStmt] return ... -# 1237| getExpr(): [AddExpr] ... + ... +# 1235| getVariable().getInitializer(): [Initializer] initializer for b +# 1235| getExpr(): [SizeofExprOperator] sizeof() +# 1235| Type = [LongType] unsigned long +# 1235| Value = [SizeofExprOperator] 4 +# 1235| ValueCategory = prvalue +# 1235| getExprOperand(): [VariableAccess] x +# 1235| Type = [IntType] int +# 1235| ValueCategory = lvalue +# 1235| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 1235| Type = [IntType] int +# 1235| ValueCategory = lvalue +# 1235| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 1235| Conversion = [IntegralConversion] integral conversion +# 1235| Type = [IntType] int +# 1235| Value = [CStyleCast] 4 +# 1235| ValueCategory = prvalue +# 1236| getStmt(2): [DeclStmt] declaration +# 1236| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1236| Type = [IntType] int +# 1236| getVariable().getInitializer(): [Initializer] initializer for c +# 1236| getExpr(): [VariableAccess] x +# 1236| Type = [IntType] int +# 1236| ValueCategory = prvalue(load) +# 1237| getStmt(3): [DeclStmt] declaration +# 1237| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue -# 1237| getLeftOperand(): [AddExpr] ... + ... -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue -# 1237| getLeftOperand(): [AddExpr] ... + ... -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue -# 1237| getLeftOperand(): [VariableAccess] a -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1237| getRightOperand(): [VariableAccess] b -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1237| getRightOperand(): [VariableAccess] c -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1237| getRightOperand(): [VariableAccess] d -# 1237| Type = [IntType] int -# 1237| ValueCategory = prvalue(load) -# 1240| [TopLevelFunction] void staticLocalWithConstructor(char const*) -# 1240| : -# 1240| getParameter(0): [Parameter] dynamic -# 1240| Type = [PointerType] const char * -# 1240| getEntryPoint(): [BlockStmt] { ... } -# 1241| getStmt(0): [DeclStmt] declaration -# 1241| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1241| Type = [Struct] String +# 1239| getStmt(4): [ReturnStmt] return ... +# 1239| getExpr(): [AddExpr] ... + ... +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue +# 1239| getLeftOperand(): [AddExpr] ... + ... +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue +# 1239| getLeftOperand(): [AddExpr] ... + ... +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue +# 1239| getLeftOperand(): [VariableAccess] a +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1239| getRightOperand(): [VariableAccess] b +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1239| getRightOperand(): [VariableAccess] c +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1239| getRightOperand(): [VariableAccess] d +# 1239| Type = [IntType] int +# 1239| ValueCategory = prvalue(load) +# 1242| [TopLevelFunction] void staticLocalWithConstructor(char const*) +# 1242| : +# 1242| getParameter(0): [Parameter] dynamic +# 1242| Type = [PointerType] const char * +# 1242| getEntryPoint(): [BlockStmt] { ... } +# 1243| getStmt(0): [DeclStmt] declaration +# 1243| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 1243| Type = [Struct] String #-----| getVariable().getInitializer(): [Initializer] initializer for a #-----| getExpr(): [ConstructorCall] call to String #-----| Type = [VoidType] void #-----| ValueCategory = prvalue -# 1242| getStmt(1): [DeclStmt] declaration -# 1242| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1242| Type = [Struct] String -# 1242| getVariable().getInitializer(): [Initializer] initializer for b -# 1242| getExpr(): [ConstructorCall] call to String -# 1242| Type = [VoidType] void -# 1242| ValueCategory = prvalue -# 1242| getArgument(0): static -# 1242| Type = [ArrayType] const char[7] -# 1242| Value = [StringLiteral] "static" -# 1242| ValueCategory = lvalue -# 1242| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1242| Type = [PointerType] const char * -# 1242| ValueCategory = prvalue -# 1243| getStmt(2): [DeclStmt] declaration -# 1243| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1243| Type = [Struct] String -# 1243| getVariable().getInitializer(): [Initializer] initializer for c -# 1243| getExpr(): [ConstructorCall] call to String -# 1243| Type = [VoidType] void -# 1243| ValueCategory = prvalue -# 1243| getArgument(0): [VariableAccess] dynamic -# 1243| Type = [PointerType] const char * -# 1243| ValueCategory = prvalue(load) -# 1244| getStmt(3): [ReturnStmt] return ... -# 1244| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getQualifier(): [VariableAccess] c -# 1244| Type = [Struct] String -# 1244| ValueCategory = lvalue -# 1244| getImplicitDestructorCall(1): [DestructorCall] call to ~String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getQualifier(): [VariableAccess] b -# 1244| Type = [Struct] String -# 1244| ValueCategory = lvalue -# 1244| getImplicitDestructorCall(2): [DestructorCall] call to ~String -# 1244| Type = [VoidType] void -# 1244| ValueCategory = prvalue -# 1244| getQualifier(): [VariableAccess] a -# 1244| Type = [Struct] String -# 1244| ValueCategory = lvalue -# 1248| [TopLevelFunction] char* strcpy(char*, char const*) -# 1248| : -# 1248| getParameter(0): [Parameter] destination -# 1248| Type = [CharPointerType] char * -# 1248| getParameter(1): [Parameter] source -# 1248| Type = [PointerType] const char * -# 1249| [TopLevelFunction] char* strcat(char*, char const*) -# 1249| : -# 1249| getParameter(0): [Parameter] destination -# 1249| Type = [CharPointerType] char * -# 1249| getParameter(1): [Parameter] source -# 1249| Type = [PointerType] const char * -# 1251| [TopLevelFunction] void test_strings(char*, char*) +# 1244| getStmt(1): [DeclStmt] declaration +# 1244| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1244| Type = [Struct] String +# 1244| getVariable().getInitializer(): [Initializer] initializer for b +# 1244| getExpr(): [ConstructorCall] call to String +# 1244| Type = [VoidType] void +# 1244| ValueCategory = prvalue +# 1244| getArgument(0): static +# 1244| Type = [ArrayType] const char[7] +# 1244| Value = [StringLiteral] "static" +# 1244| ValueCategory = lvalue +# 1244| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1244| Type = [PointerType] const char * +# 1244| ValueCategory = prvalue +# 1245| getStmt(2): [DeclStmt] declaration +# 1245| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1245| Type = [Struct] String +# 1245| getVariable().getInitializer(): [Initializer] initializer for c +# 1245| getExpr(): [ConstructorCall] call to String +# 1245| Type = [VoidType] void +# 1245| ValueCategory = prvalue +# 1245| getArgument(0): [VariableAccess] dynamic +# 1245| Type = [PointerType] const char * +# 1245| ValueCategory = prvalue(load) +# 1246| getStmt(3): [ReturnStmt] return ... +# 1246| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1246| Type = [VoidType] void +# 1246| ValueCategory = prvalue +# 1246| getQualifier(): [VariableAccess] c +# 1246| Type = [Struct] String +# 1246| ValueCategory = lvalue +# 1246| getImplicitDestructorCall(1): [DestructorCall] call to ~String +# 1246| Type = [VoidType] void +# 1246| ValueCategory = prvalue +# 1246| getQualifier(): [VariableAccess] b +# 1246| Type = [Struct] String +# 1246| ValueCategory = lvalue +# 1246| getImplicitDestructorCall(2): [DestructorCall] call to ~String +# 1246| Type = [VoidType] void +# 1246| ValueCategory = prvalue +# 1246| getQualifier(): [VariableAccess] a +# 1246| Type = [Struct] String +# 1246| ValueCategory = lvalue +# 1250| [TopLevelFunction] char* strcpy(char*, char const*) +# 1250| : +# 1250| getParameter(0): [Parameter] destination +# 1250| Type = [CharPointerType] char * +# 1250| getParameter(1): [Parameter] source +# 1250| Type = [PointerType] const char * +# 1251| [TopLevelFunction] char* strcat(char*, char const*) # 1251| : -# 1251| getParameter(0): [Parameter] s1 +# 1251| getParameter(0): [Parameter] destination # 1251| Type = [CharPointerType] char * -# 1251| getParameter(1): [Parameter] s2 -# 1251| Type = [CharPointerType] char * -# 1251| getEntryPoint(): [BlockStmt] { ... } -# 1252| getStmt(0): [DeclStmt] declaration -# 1252| getDeclarationEntry(0): [VariableDeclarationEntry] definition of buffer -# 1252| Type = [ArrayType] char[1024] -# 1252| getVariable().getInitializer(): [Initializer] initializer for buffer -# 1252| getExpr(): [ArrayAggregateLiteral] {...} -# 1252| Type = [ArrayType] char[1024] -# 1252| ValueCategory = prvalue -# 1252| getAnElementExpr(0): [Literal] 0 -# 1252| Type = [IntType] int -# 1252| Value = [Literal] 0 -# 1252| ValueCategory = prvalue -# 1252| getAnElementExpr(0).getFullyConverted(): [CStyleCast] (char)... -# 1252| Conversion = [IntegralConversion] integral conversion -# 1252| Type = [PlainCharType] char -# 1252| Value = [CStyleCast] 0 -# 1252| ValueCategory = prvalue -# 1254| getStmt(1): [ExprStmt] ExprStmt -# 1254| getExpr(): [FunctionCall] call to strcpy -# 1254| Type = [CharPointerType] char * -# 1254| ValueCategory = prvalue -# 1254| getArgument(0): [VariableAccess] buffer -# 1254| Type = [ArrayType] char[1024] -# 1254| ValueCategory = lvalue -# 1254| getArgument(1): [VariableAccess] s1 -# 1254| Type = [CharPointerType] char * -# 1254| ValueCategory = prvalue(load) -# 1254| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1254| Type = [CharPointerType] char * -# 1254| ValueCategory = prvalue -# 1254| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... -# 1254| Conversion = [PointerConversion] pointer conversion -# 1254| Type = [PointerType] const char * -# 1254| ValueCategory = prvalue -# 1255| getStmt(2): [ExprStmt] ExprStmt -# 1255| getExpr(): [FunctionCall] call to strcat -# 1255| Type = [CharPointerType] char * -# 1255| ValueCategory = prvalue -# 1255| getArgument(0): [VariableAccess] buffer -# 1255| Type = [ArrayType] char[1024] -# 1255| ValueCategory = lvalue -# 1255| getArgument(1): [VariableAccess] s2 -# 1255| Type = [CharPointerType] char * -# 1255| ValueCategory = prvalue(load) -# 1255| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1255| Type = [CharPointerType] char * -# 1255| ValueCategory = prvalue -# 1255| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... -# 1255| Conversion = [PointerConversion] pointer conversion -# 1255| Type = [PointerType] const char * -# 1255| ValueCategory = prvalue -# 1256| getStmt(3): [ReturnStmt] return ... -# 1258| [CopyAssignmentOperator] A& A::operator=(A const&) -# 1258| : +# 1251| getParameter(1): [Parameter] source +# 1251| Type = [PointerType] const char * +# 1253| [TopLevelFunction] void test_strings(char*, char*) +# 1253| : +# 1253| getParameter(0): [Parameter] s1 +# 1253| Type = [CharPointerType] char * +# 1253| getParameter(1): [Parameter] s2 +# 1253| Type = [CharPointerType] char * +# 1253| getEntryPoint(): [BlockStmt] { ... } +# 1254| getStmt(0): [DeclStmt] declaration +# 1254| getDeclarationEntry(0): [VariableDeclarationEntry] definition of buffer +# 1254| Type = [ArrayType] char[1024] +# 1254| getVariable().getInitializer(): [Initializer] initializer for buffer +# 1254| getExpr(): [ArrayAggregateLiteral] {...} +# 1254| Type = [ArrayType] char[1024] +# 1254| ValueCategory = prvalue +# 1254| getAnElementExpr(0): [Literal] 0 +# 1254| Type = [IntType] int +# 1254| Value = [Literal] 0 +# 1254| ValueCategory = prvalue +# 1254| getAnElementExpr(0).getFullyConverted(): [CStyleCast] (char)... +# 1254| Conversion = [IntegralConversion] integral conversion +# 1254| Type = [PlainCharType] char +# 1254| Value = [CStyleCast] 0 +# 1254| ValueCategory = prvalue +# 1256| getStmt(1): [ExprStmt] ExprStmt +# 1256| getExpr(): [FunctionCall] call to strcpy +# 1256| Type = [CharPointerType] char * +# 1256| ValueCategory = prvalue +# 1256| getArgument(0): [VariableAccess] buffer +# 1256| Type = [ArrayType] char[1024] +# 1256| ValueCategory = lvalue +# 1256| getArgument(1): [VariableAccess] s1 +# 1256| Type = [CharPointerType] char * +# 1256| ValueCategory = prvalue(load) +# 1256| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1256| Type = [CharPointerType] char * +# 1256| ValueCategory = prvalue +# 1256| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... +# 1256| Conversion = [PointerConversion] pointer conversion +# 1256| Type = [PointerType] const char * +# 1256| ValueCategory = prvalue +# 1257| getStmt(2): [ExprStmt] ExprStmt +# 1257| getExpr(): [FunctionCall] call to strcat +# 1257| Type = [CharPointerType] char * +# 1257| ValueCategory = prvalue +# 1257| getArgument(0): [VariableAccess] buffer +# 1257| Type = [ArrayType] char[1024] +# 1257| ValueCategory = lvalue +# 1257| getArgument(1): [VariableAccess] s2 +# 1257| Type = [CharPointerType] char * +# 1257| ValueCategory = prvalue(load) +# 1257| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1257| Type = [CharPointerType] char * +# 1257| ValueCategory = prvalue +# 1257| getArgument(1).getFullyConverted(): [CStyleCast] (const char *)... +# 1257| Conversion = [PointerConversion] pointer conversion +# 1257| Type = [PointerType] const char * +# 1257| ValueCategory = prvalue +# 1258| getStmt(3): [ReturnStmt] return ... +# 1260| [CopyAssignmentOperator] A& A::operator=(A const&) +# 1260| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1258| [MoveAssignmentOperator] A& A::operator=(A&&) -# 1258| : +# 1260| [MoveAssignmentOperator] A& A::operator=(A&&) +# 1260| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1261| [MemberFunction] void A::static_member(A*, int) -# 1261| : -# 1261| getParameter(0): [Parameter] a -# 1261| Type = [PointerType] A * -# 1261| getParameter(1): [Parameter] x -# 1261| Type = [IntType] int -# 1261| getEntryPoint(): [BlockStmt] { ... } -# 1262| getStmt(0): [ExprStmt] ExprStmt -# 1262| getExpr(): [AssignExpr] ... = ... -# 1262| Type = [IntType] int -# 1262| ValueCategory = lvalue -# 1262| getLValue(): [PointerFieldAccess] member -# 1262| Type = [IntType] int -# 1262| ValueCategory = lvalue -# 1262| getQualifier(): [VariableAccess] a -# 1262| Type = [PointerType] A * -# 1262| ValueCategory = prvalue(load) -# 1262| getRValue(): [VariableAccess] x -# 1262| Type = [IntType] int -# 1262| ValueCategory = prvalue(load) -# 1263| getStmt(1): [ReturnStmt] return ... -# 1265| [MemberFunction] void A::static_member_without_def() -# 1265| : -# 1268| [TopLevelFunction] A* getAnInstanceOfA() -# 1268| : -# 1270| [TopLevelFunction] void test_static_member_functions(int, A*) +# 1263| [MemberFunction] void A::static_member(A*, int) +# 1263| : +# 1263| getParameter(0): [Parameter] a +# 1263| Type = [PointerType] A * +# 1263| getParameter(1): [Parameter] x +# 1263| Type = [IntType] int +# 1263| getEntryPoint(): [BlockStmt] { ... } +# 1264| getStmt(0): [ExprStmt] ExprStmt +# 1264| getExpr(): [AssignExpr] ... = ... +# 1264| Type = [IntType] int +# 1264| ValueCategory = lvalue +# 1264| getLValue(): [PointerFieldAccess] member +# 1264| Type = [IntType] int +# 1264| ValueCategory = lvalue +# 1264| getQualifier(): [VariableAccess] a +# 1264| Type = [PointerType] A * +# 1264| ValueCategory = prvalue(load) +# 1264| getRValue(): [VariableAccess] x +# 1264| Type = [IntType] int +# 1264| ValueCategory = prvalue(load) +# 1265| getStmt(1): [ReturnStmt] return ... +# 1267| [MemberFunction] void A::static_member_without_def() +# 1267| : +# 1270| [TopLevelFunction] A* getAnInstanceOfA() # 1270| : -# 1270| getParameter(0): [Parameter] int_arg -# 1270| Type = [IntType] int -# 1270| getParameter(1): [Parameter] a_arg -# 1270| Type = [PointerType] A * -# 1270| getEntryPoint(): [BlockStmt] { ... } -# 1271| getStmt(0): [DeclStmt] declaration -# 1271| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1271| Type = [Class] C -# 1271| getVariable().getInitializer(): [Initializer] initializer for c -# 1271| getExpr(): [ConstructorCall] call to C -# 1271| Type = [VoidType] void -# 1271| ValueCategory = prvalue -# 1272| getStmt(1): [ExprStmt] ExprStmt -# 1272| getExpr(): [FunctionCall] call to StaticMemberFunction -# 1272| Type = [IntType] int -# 1272| ValueCategory = prvalue -# 1272| getQualifier(): [VariableAccess] c -# 1272| Type = [Class] C -# 1272| ValueCategory = lvalue -# 1272| getArgument(0): [Literal] 10 -# 1272| Type = [IntType] int -# 1272| Value = [Literal] 10 -# 1272| ValueCategory = prvalue -# 1273| getStmt(2): [ExprStmt] ExprStmt -# 1273| getExpr(): [FunctionCall] call to StaticMemberFunction -# 1273| Type = [IntType] int -# 1273| ValueCategory = prvalue -# 1273| getArgument(0): [Literal] 10 -# 1273| Type = [IntType] int -# 1273| Value = [Literal] 10 -# 1273| ValueCategory = prvalue -# 1275| getStmt(3): [DeclStmt] declaration -# 1275| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a -# 1275| Type = [Struct] A -# 1276| getStmt(4): [ExprStmt] ExprStmt -# 1276| getExpr(): [FunctionCall] call to static_member -# 1276| Type = [VoidType] void -# 1276| ValueCategory = prvalue -# 1276| getQualifier(): [VariableAccess] a -# 1276| Type = [Struct] A -# 1276| ValueCategory = lvalue -# 1276| getArgument(0): [AddressOfExpr] & ... -# 1276| Type = [PointerType] A * -# 1276| ValueCategory = prvalue -# 1276| getOperand(): [VariableAccess] a -# 1276| Type = [Struct] A -# 1276| ValueCategory = lvalue -# 1276| getArgument(1): [VariableAccess] int_arg -# 1276| Type = [IntType] int -# 1276| ValueCategory = prvalue(load) -# 1277| getStmt(5): [ExprStmt] ExprStmt -# 1277| getExpr(): [FunctionCall] call to static_member -# 1277| Type = [VoidType] void -# 1277| ValueCategory = prvalue -# 1277| getArgument(0): [AddressOfExpr] & ... -# 1277| Type = [PointerType] A * -# 1277| ValueCategory = prvalue -# 1277| getOperand(): [VariableAccess] a -# 1277| Type = [Struct] A -# 1277| ValueCategory = lvalue -# 1277| getArgument(1): [VariableAccess] int_arg -# 1277| Type = [IntType] int -# 1277| ValueCategory = prvalue(load) -# 1279| getStmt(6): [ExprStmt] ExprStmt +# 1272| [TopLevelFunction] void test_static_member_functions(int, A*) +# 1272| : +# 1272| getParameter(0): [Parameter] int_arg +# 1272| Type = [IntType] int +# 1272| getParameter(1): [Parameter] a_arg +# 1272| Type = [PointerType] A * +# 1272| getEntryPoint(): [BlockStmt] { ... } +# 1273| getStmt(0): [DeclStmt] declaration +# 1273| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1273| Type = [Class] C +# 1273| getVariable().getInitializer(): [Initializer] initializer for c +# 1273| getExpr(): [ConstructorCall] call to C +# 1273| Type = [VoidType] void +# 1273| ValueCategory = prvalue +# 1274| getStmt(1): [ExprStmt] ExprStmt +# 1274| getExpr(): [FunctionCall] call to StaticMemberFunction +# 1274| Type = [IntType] int +# 1274| ValueCategory = prvalue +# 1274| getQualifier(): [VariableAccess] c +# 1274| Type = [Class] C +# 1274| ValueCategory = lvalue +# 1274| getArgument(0): [Literal] 10 +# 1274| Type = [IntType] int +# 1274| Value = [Literal] 10 +# 1274| ValueCategory = prvalue +# 1275| getStmt(2): [ExprStmt] ExprStmt +# 1275| getExpr(): [FunctionCall] call to StaticMemberFunction +# 1275| Type = [IntType] int +# 1275| ValueCategory = prvalue +# 1275| getArgument(0): [Literal] 10 +# 1275| Type = [IntType] int +# 1275| Value = [Literal] 10 +# 1275| ValueCategory = prvalue +# 1277| getStmt(3): [DeclStmt] declaration +# 1277| getDeclarationEntry(0): [VariableDeclarationEntry] definition of a +# 1277| Type = [Struct] A +# 1278| getStmt(4): [ExprStmt] ExprStmt +# 1278| getExpr(): [FunctionCall] call to static_member +# 1278| Type = [VoidType] void +# 1278| ValueCategory = prvalue +# 1278| getQualifier(): [VariableAccess] a +# 1278| Type = [Struct] A +# 1278| ValueCategory = lvalue +# 1278| getArgument(0): [AddressOfExpr] & ... +# 1278| Type = [PointerType] A * +# 1278| ValueCategory = prvalue +# 1278| getOperand(): [VariableAccess] a +# 1278| Type = [Struct] A +# 1278| ValueCategory = lvalue +# 1278| getArgument(1): [VariableAccess] int_arg +# 1278| Type = [IntType] int +# 1278| ValueCategory = prvalue(load) +# 1279| getStmt(5): [ExprStmt] ExprStmt # 1279| getExpr(): [FunctionCall] call to static_member # 1279| Type = [VoidType] void # 1279| ValueCategory = prvalue -# 1279| getQualifier(): [AddressOfExpr] & ... +# 1279| getArgument(0): [AddressOfExpr] & ... # 1279| Type = [PointerType] A * # 1279| ValueCategory = prvalue # 1279| getOperand(): [VariableAccess] a # 1279| Type = [Struct] A # 1279| ValueCategory = lvalue -# 1279| getArgument(0): [VariableAccess] a_arg -# 1279| Type = [PointerType] A * -# 1279| ValueCategory = prvalue(load) -# 1279| getArgument(1): [AddExpr] ... + ... +# 1279| getArgument(1): [VariableAccess] int_arg # 1279| Type = [IntType] int -# 1279| ValueCategory = prvalue -# 1279| getLeftOperand(): [VariableAccess] int_arg -# 1279| Type = [IntType] int -# 1279| ValueCategory = prvalue(load) -# 1279| getRightOperand(): [Literal] 2 -# 1279| Type = [IntType] int -# 1279| Value = [Literal] 2 -# 1279| ValueCategory = prvalue -# 1279| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 1279| Type = [PointerType] A * -# 1279| ValueCategory = prvalue -# 1280| getStmt(7): [ExprStmt] ExprStmt -# 1280| getExpr(): [FunctionCall] call to static_member -# 1280| Type = [VoidType] void -# 1280| ValueCategory = prvalue -# 1280| getQualifier(): [PointerDereferenceExpr] * ... -# 1280| Type = [Struct] A -# 1280| ValueCategory = lvalue -# 1280| getOperand(): [VariableAccess] a_arg -# 1280| Type = [PointerType] A * -# 1280| ValueCategory = prvalue(load) -# 1280| getArgument(0): [AddressOfExpr] & ... -# 1280| Type = [PointerType] A * -# 1280| ValueCategory = prvalue -# 1280| getOperand(): [VariableAccess] a -# 1280| Type = [Struct] A -# 1280| ValueCategory = lvalue -# 1280| getArgument(1): [Literal] 99 -# 1280| Type = [IntType] int -# 1280| Value = [Literal] 99 -# 1280| ValueCategory = prvalue -# 1280| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) -# 1280| Type = [Struct] A -# 1280| ValueCategory = lvalue -# 1281| getStmt(8): [ExprStmt] ExprStmt +# 1279| ValueCategory = prvalue(load) +# 1281| getStmt(6): [ExprStmt] ExprStmt # 1281| getExpr(): [FunctionCall] call to static_member # 1281| Type = [VoidType] void # 1281| ValueCategory = prvalue -# 1281| getQualifier(): [VariableAccess] a_arg +# 1281| getQualifier(): [AddressOfExpr] & ... # 1281| Type = [PointerType] A * -# 1281| ValueCategory = prvalue(load) +# 1281| ValueCategory = prvalue +# 1281| getOperand(): [VariableAccess] a +# 1281| Type = [Struct] A +# 1281| ValueCategory = lvalue # 1281| getArgument(0): [VariableAccess] a_arg # 1281| Type = [PointerType] A * # 1281| ValueCategory = prvalue(load) -# 1281| getArgument(1): [UnaryMinusExpr] - ... +# 1281| getArgument(1): [AddExpr] ... + ... # 1281| Type = [IntType] int -# 1281| Value = [UnaryMinusExpr] -1 # 1281| ValueCategory = prvalue -# 1281| getOperand(): [Literal] 1 +# 1281| getLeftOperand(): [VariableAccess] int_arg # 1281| Type = [IntType] int -# 1281| Value = [Literal] 1 +# 1281| ValueCategory = prvalue(load) +# 1281| getRightOperand(): [Literal] 2 +# 1281| Type = [IntType] int +# 1281| Value = [Literal] 2 # 1281| ValueCategory = prvalue -# 1283| getStmt(9): [ExprStmt] ExprStmt -# 1283| getExpr(): [FunctionCall] call to static_member_without_def +# 1281| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 1281| Type = [PointerType] A * +# 1281| ValueCategory = prvalue +# 1282| getStmt(7): [ExprStmt] ExprStmt +# 1282| getExpr(): [FunctionCall] call to static_member +# 1282| Type = [VoidType] void +# 1282| ValueCategory = prvalue +# 1282| getQualifier(): [PointerDereferenceExpr] * ... +# 1282| Type = [Struct] A +# 1282| ValueCategory = lvalue +# 1282| getOperand(): [VariableAccess] a_arg +# 1282| Type = [PointerType] A * +# 1282| ValueCategory = prvalue(load) +# 1282| getArgument(0): [AddressOfExpr] & ... +# 1282| Type = [PointerType] A * +# 1282| ValueCategory = prvalue +# 1282| getOperand(): [VariableAccess] a +# 1282| Type = [Struct] A +# 1282| ValueCategory = lvalue +# 1282| getArgument(1): [Literal] 99 +# 1282| Type = [IntType] int +# 1282| Value = [Literal] 99 +# 1282| ValueCategory = prvalue +# 1282| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 1282| Type = [Struct] A +# 1282| ValueCategory = lvalue +# 1283| getStmt(8): [ExprStmt] ExprStmt +# 1283| getExpr(): [FunctionCall] call to static_member # 1283| Type = [VoidType] void # 1283| ValueCategory = prvalue -# 1283| getQualifier(): [VariableAccess] a -# 1283| Type = [Struct] A -# 1283| ValueCategory = lvalue -# 1284| getStmt(10): [ExprStmt] ExprStmt -# 1284| getExpr(): [FunctionCall] call to static_member_without_def -# 1284| Type = [VoidType] void -# 1284| ValueCategory = prvalue -# 1286| getStmt(11): [ExprStmt] ExprStmt +# 1283| getQualifier(): [VariableAccess] a_arg +# 1283| Type = [PointerType] A * +# 1283| ValueCategory = prvalue(load) +# 1283| getArgument(0): [VariableAccess] a_arg +# 1283| Type = [PointerType] A * +# 1283| ValueCategory = prvalue(load) +# 1283| getArgument(1): [UnaryMinusExpr] - ... +# 1283| Type = [IntType] int +# 1283| Value = [UnaryMinusExpr] -1 +# 1283| ValueCategory = prvalue +# 1283| getOperand(): [Literal] 1 +# 1283| Type = [IntType] int +# 1283| Value = [Literal] 1 +# 1283| ValueCategory = prvalue +# 1285| getStmt(9): [ExprStmt] ExprStmt +# 1285| getExpr(): [FunctionCall] call to static_member_without_def +# 1285| Type = [VoidType] void +# 1285| ValueCategory = prvalue +# 1285| getQualifier(): [VariableAccess] a +# 1285| Type = [Struct] A +# 1285| ValueCategory = lvalue +# 1286| getStmt(10): [ExprStmt] ExprStmt # 1286| getExpr(): [FunctionCall] call to static_member_without_def # 1286| Type = [VoidType] void # 1286| ValueCategory = prvalue -# 1286| getQualifier(): [FunctionCall] call to getAnInstanceOfA -# 1286| Type = [PointerType] A * -# 1286| ValueCategory = prvalue -# 1287| getStmt(12): [ReturnStmt] return ... -# 1287| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1287| Type = [VoidType] void -# 1287| ValueCategory = prvalue -# 1287| getQualifier(): [VariableAccess] c -# 1287| Type = [Class] C -# 1287| ValueCategory = lvalue -# 1289| [TopLevelFunction] int missingReturnValue(bool, int) -# 1289| : -# 1289| getParameter(0): [Parameter] b -# 1289| Type = [BoolType] bool -# 1289| getParameter(1): [Parameter] x -# 1289| Type = [IntType] int -# 1289| getEntryPoint(): [BlockStmt] { ... } -# 1290| getStmt(0): [IfStmt] if (...) ... -# 1290| getCondition(): [VariableAccess] b -# 1290| Type = [BoolType] bool -# 1290| ValueCategory = prvalue(load) -# 1290| getThen(): [BlockStmt] { ... } -# 1291| getStmt(0): [ReturnStmt] return ... -# 1291| getExpr(): [VariableAccess] x -# 1291| Type = [IntType] int -# 1291| ValueCategory = prvalue(load) -# 1293| getStmt(1): [ReturnStmt] return ... -# 1295| [TopLevelFunction] void returnVoid(int, int) -# 1295| : -# 1295| getParameter(0): [Parameter] x -# 1295| Type = [IntType] int -# 1295| getParameter(1): [Parameter] y -# 1295| Type = [IntType] int -# 1295| getEntryPoint(): [BlockStmt] { ... } -# 1296| getStmt(0): [ReturnStmt] return ... -# 1296| getExpr(): [FunctionCall] call to IntegerOps -# 1296| Type = [VoidType] void -# 1296| ValueCategory = prvalue -# 1296| getArgument(0): [VariableAccess] x -# 1296| Type = [IntType] int -# 1296| ValueCategory = prvalue(load) -# 1296| getArgument(1): [VariableAccess] y -# 1296| Type = [IntType] int -# 1296| ValueCategory = prvalue(load) -# 1299| [TopLevelFunction] void gccBinaryConditional(bool, int, long) -# 1299| : -# 1299| getParameter(0): [Parameter] b -# 1299| Type = [BoolType] bool -# 1299| getParameter(1): [Parameter] x -# 1299| Type = [IntType] int -# 1299| getParameter(2): [Parameter] y -# 1299| Type = [LongType] long -# 1299| getEntryPoint(): [BlockStmt] { ... } -# 1300| getStmt(0): [DeclStmt] declaration -# 1300| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1300| Type = [IntType] int -# 1300| getVariable().getInitializer(): [Initializer] initializer for z -# 1300| getExpr(): [VariableAccess] x -# 1300| Type = [IntType] int -# 1300| ValueCategory = prvalue(load) -# 1301| getStmt(1): [ExprStmt] ExprStmt -# 1301| getExpr(): [AssignExpr] ... = ... -# 1301| Type = [IntType] int -# 1301| ValueCategory = lvalue -# 1301| getLValue(): [VariableAccess] z -# 1301| Type = [IntType] int -# 1301| ValueCategory = lvalue -# 1301| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1301| Type = [IntType] int -# 1301| ValueCategory = prvalue(load) -# 1301| getCondition(): [VariableAccess] b -# 1301| Type = [BoolType] bool -# 1301| ValueCategory = prvalue(load) -# 1301| getElse(): [VariableAccess] x -# 1301| Type = [IntType] int -# 1301| ValueCategory = prvalue(load) -# 1302| getStmt(2): [ExprStmt] ExprStmt -# 1302| getExpr(): [AssignExpr] ... = ... +# 1288| getStmt(11): [ExprStmt] ExprStmt +# 1288| getExpr(): [FunctionCall] call to static_member_without_def +# 1288| Type = [VoidType] void +# 1288| ValueCategory = prvalue +# 1288| getQualifier(): [FunctionCall] call to getAnInstanceOfA +# 1288| Type = [PointerType] A * +# 1288| ValueCategory = prvalue +# 1289| getStmt(12): [ReturnStmt] return ... +# 1289| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1289| Type = [VoidType] void +# 1289| ValueCategory = prvalue +# 1289| getQualifier(): [VariableAccess] c +# 1289| Type = [Class] C +# 1289| ValueCategory = lvalue +# 1291| [TopLevelFunction] int missingReturnValue(bool, int) +# 1291| : +# 1291| getParameter(0): [Parameter] b +# 1291| Type = [BoolType] bool +# 1291| getParameter(1): [Parameter] x +# 1291| Type = [IntType] int +# 1291| getEntryPoint(): [BlockStmt] { ... } +# 1292| getStmt(0): [IfStmt] if (...) ... +# 1292| getCondition(): [VariableAccess] b +# 1292| Type = [BoolType] bool +# 1292| ValueCategory = prvalue(load) +# 1292| getThen(): [BlockStmt] { ... } +# 1293| getStmt(0): [ReturnStmt] return ... +# 1293| getExpr(): [VariableAccess] x +# 1293| Type = [IntType] int +# 1293| ValueCategory = prvalue(load) +# 1295| getStmt(1): [ReturnStmt] return ... +# 1297| [TopLevelFunction] void returnVoid(int, int) +# 1297| : +# 1297| getParameter(0): [Parameter] x +# 1297| Type = [IntType] int +# 1297| getParameter(1): [Parameter] y +# 1297| Type = [IntType] int +# 1297| getEntryPoint(): [BlockStmt] { ... } +# 1298| getStmt(0): [ReturnStmt] return ... +# 1298| getExpr(): [FunctionCall] call to IntegerOps +# 1298| Type = [VoidType] void +# 1298| ValueCategory = prvalue +# 1298| getArgument(0): [VariableAccess] x +# 1298| Type = [IntType] int +# 1298| ValueCategory = prvalue(load) +# 1298| getArgument(1): [VariableAccess] y +# 1298| Type = [IntType] int +# 1298| ValueCategory = prvalue(load) +# 1301| [TopLevelFunction] void gccBinaryConditional(bool, int, long) +# 1301| : +# 1301| getParameter(0): [Parameter] b +# 1301| Type = [BoolType] bool +# 1301| getParameter(1): [Parameter] x +# 1301| Type = [IntType] int +# 1301| getParameter(2): [Parameter] y +# 1301| Type = [LongType] long +# 1301| getEntryPoint(): [BlockStmt] { ... } +# 1302| getStmt(0): [DeclStmt] declaration +# 1302| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z # 1302| Type = [IntType] int -# 1302| ValueCategory = lvalue -# 1302| getLValue(): [VariableAccess] z -# 1302| Type = [IntType] int -# 1302| ValueCategory = lvalue -# 1302| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1302| Type = [LongType] long -# 1302| ValueCategory = prvalue(load) -# 1302| getCondition(): [VariableAccess] b -# 1302| Type = [BoolType] bool +# 1302| getVariable().getInitializer(): [Initializer] initializer for z +# 1302| getExpr(): [VariableAccess] x +# 1302| Type = [IntType] int # 1302| ValueCategory = prvalue(load) -# 1302| getElse(): [VariableAccess] y -# 1302| Type = [LongType] long -# 1302| ValueCategory = prvalue(load) -# 1302| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1302| Conversion = [IntegralConversion] integral conversion -# 1302| Type = [IntType] int -# 1302| ValueCategory = prvalue -# 1303| getStmt(3): [ExprStmt] ExprStmt +# 1303| getStmt(1): [ExprStmt] ExprStmt # 1303| getExpr(): [AssignExpr] ... = ... # 1303| Type = [IntType] int # 1303| ValueCategory = lvalue @@ -10625,17 +10742,13 @@ ir.cpp: # 1303| getRValue(): [ConditionalExpr] ... ? ... : ... # 1303| Type = [IntType] int # 1303| ValueCategory = prvalue(load) -# 1303| getCondition(): [VariableAccess] x -# 1303| Type = [IntType] int +# 1303| getCondition(): [VariableAccess] b +# 1303| Type = [BoolType] bool # 1303| ValueCategory = prvalue(load) # 1303| getElse(): [VariableAccess] x # 1303| Type = [IntType] int # 1303| ValueCategory = prvalue(load) -# 1303| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1303| Conversion = [BoolConversion] conversion to bool -# 1303| Type = [BoolType] bool -# 1303| ValueCategory = prvalue -# 1304| getStmt(4): [ExprStmt] ExprStmt +# 1304| getStmt(2): [ExprStmt] ExprStmt # 1304| getExpr(): [AssignExpr] ... = ... # 1304| Type = [IntType] int # 1304| ValueCategory = lvalue @@ -10645,21 +10758,17 @@ ir.cpp: # 1304| getRValue(): [ConditionalExpr] ... ? ... : ... # 1304| Type = [LongType] long # 1304| ValueCategory = prvalue(load) -# 1304| getCondition(): [VariableAccess] x -# 1304| Type = [IntType] int +# 1304| getCondition(): [VariableAccess] b +# 1304| Type = [BoolType] bool # 1304| ValueCategory = prvalue(load) # 1304| getElse(): [VariableAccess] y # 1304| Type = [LongType] long # 1304| ValueCategory = prvalue(load) -# 1304| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1304| Conversion = [BoolConversion] conversion to bool -# 1304| Type = [BoolType] bool -# 1304| ValueCategory = prvalue # 1304| getRValue().getFullyConverted(): [CStyleCast] (int)... # 1304| Conversion = [IntegralConversion] integral conversion # 1304| Type = [IntType] int # 1304| ValueCategory = prvalue -# 1305| getStmt(5): [ExprStmt] ExprStmt +# 1305| getStmt(3): [ExprStmt] ExprStmt # 1305| getExpr(): [AssignExpr] ... = ... # 1305| Type = [IntType] int # 1305| ValueCategory = lvalue @@ -10667,10 +10776,10 @@ ir.cpp: # 1305| Type = [IntType] int # 1305| ValueCategory = lvalue # 1305| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1305| Type = [LongType] long +# 1305| Type = [IntType] int # 1305| ValueCategory = prvalue(load) -# 1305| getCondition(): [VariableAccess] y -# 1305| Type = [LongType] long +# 1305| getCondition(): [VariableAccess] x +# 1305| Type = [IntType] int # 1305| ValueCategory = prvalue(load) # 1305| getElse(): [VariableAccess] x # 1305| Type = [IntType] int @@ -10679,15 +10788,7 @@ ir.cpp: # 1305| Conversion = [BoolConversion] conversion to bool # 1305| Type = [BoolType] bool # 1305| ValueCategory = prvalue -# 1305| getElse().getFullyConverted(): [CStyleCast] (long)... -# 1305| Conversion = [IntegralConversion] integral conversion -# 1305| Type = [LongType] long -# 1305| ValueCategory = prvalue -# 1305| getRValue().getFullyConverted(): [CStyleCast] (int)... -# 1305| Conversion = [IntegralConversion] integral conversion -# 1305| Type = [IntType] int -# 1305| ValueCategory = prvalue -# 1306| getStmt(6): [ExprStmt] ExprStmt +# 1306| getStmt(4): [ExprStmt] ExprStmt # 1306| getExpr(): [AssignExpr] ... = ... # 1306| Type = [IntType] int # 1306| ValueCategory = lvalue @@ -10697,8 +10798,8 @@ ir.cpp: # 1306| getRValue(): [ConditionalExpr] ... ? ... : ... # 1306| Type = [LongType] long # 1306| ValueCategory = prvalue(load) -# 1306| getCondition(): [VariableAccess] y -# 1306| Type = [LongType] long +# 1306| getCondition(): [VariableAccess] x +# 1306| Type = [IntType] int # 1306| ValueCategory = prvalue(load) # 1306| getElse(): [VariableAccess] y # 1306| Type = [LongType] long @@ -10711,7 +10812,35 @@ ir.cpp: # 1306| Conversion = [IntegralConversion] integral conversion # 1306| Type = [IntType] int # 1306| ValueCategory = prvalue -# 1308| getStmt(7): [ExprStmt] ExprStmt +# 1307| getStmt(5): [ExprStmt] ExprStmt +# 1307| getExpr(): [AssignExpr] ... = ... +# 1307| Type = [IntType] int +# 1307| ValueCategory = lvalue +# 1307| getLValue(): [VariableAccess] z +# 1307| Type = [IntType] int +# 1307| ValueCategory = lvalue +# 1307| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1307| Type = [LongType] long +# 1307| ValueCategory = prvalue(load) +# 1307| getCondition(): [VariableAccess] y +# 1307| Type = [LongType] long +# 1307| ValueCategory = prvalue(load) +# 1307| getElse(): [VariableAccess] x +# 1307| Type = [IntType] int +# 1307| ValueCategory = prvalue(load) +# 1307| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1307| Conversion = [BoolConversion] conversion to bool +# 1307| Type = [BoolType] bool +# 1307| ValueCategory = prvalue +# 1307| getElse().getFullyConverted(): [CStyleCast] (long)... +# 1307| Conversion = [IntegralConversion] integral conversion +# 1307| Type = [LongType] long +# 1307| ValueCategory = prvalue +# 1307| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1307| Conversion = [IntegralConversion] integral conversion +# 1307| Type = [IntType] int +# 1307| ValueCategory = prvalue +# 1308| getStmt(6): [ExprStmt] ExprStmt # 1308| getExpr(): [AssignExpr] ... = ... # 1308| Type = [IntType] int # 1308| ValueCategory = lvalue @@ -10719,319 +10848,303 @@ ir.cpp: # 1308| Type = [IntType] int # 1308| ValueCategory = lvalue # 1308| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1308| Type = [IntType] int +# 1308| Type = [LongType] long # 1308| ValueCategory = prvalue(load) -# 1308| getCondition(): [LogicalOrExpr] ... || ... -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getLeftOperand(): [LogicalAndExpr] ... && ... -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getLeftOperand(): [VariableAccess] x -# 1308| Type = [IntType] int -# 1308| ValueCategory = prvalue(load) -# 1308| getRightOperand(): [VariableAccess] b -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue(load) -# 1308| getLeftOperand().getFullyConverted(): [CStyleCast] (bool)... -# 1308| Conversion = [BoolConversion] conversion to bool -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getRightOperand(): [VariableAccess] y -# 1308| Type = [LongType] long -# 1308| ValueCategory = prvalue(load) -# 1308| getRightOperand().getFullyConverted(): [CStyleCast] (bool)... -# 1308| Conversion = [BoolConversion] conversion to bool -# 1308| Type = [BoolType] bool -# 1308| ValueCategory = prvalue -# 1308| getElse(): [VariableAccess] x -# 1308| Type = [IntType] int +# 1308| getCondition(): [VariableAccess] y +# 1308| Type = [LongType] long # 1308| ValueCategory = prvalue(load) -# 1308| getCondition().getFullyConverted(): [ParenthesisExpr] (...) +# 1308| getElse(): [VariableAccess] y +# 1308| Type = [LongType] long +# 1308| ValueCategory = prvalue(load) +# 1308| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1308| Conversion = [BoolConversion] conversion to bool # 1308| Type = [BoolType] bool # 1308| ValueCategory = prvalue -# 1309| getStmt(8): [ReturnStmt] return ... -# 1311| [TopLevelFunction] bool predicateA() -# 1311| : -# 1312| [TopLevelFunction] bool predicateB() -# 1312| : -# 1314| [TopLevelFunction] int shortCircuitConditional(int, int) +# 1308| getRValue().getFullyConverted(): [CStyleCast] (int)... +# 1308| Conversion = [IntegralConversion] integral conversion +# 1308| Type = [IntType] int +# 1308| ValueCategory = prvalue +# 1310| getStmt(7): [ExprStmt] ExprStmt +# 1310| getExpr(): [AssignExpr] ... = ... +# 1310| Type = [IntType] int +# 1310| ValueCategory = lvalue +# 1310| getLValue(): [VariableAccess] z +# 1310| Type = [IntType] int +# 1310| ValueCategory = lvalue +# 1310| getRValue(): [ConditionalExpr] ... ? ... : ... +# 1310| Type = [IntType] int +# 1310| ValueCategory = prvalue(load) +# 1310| getCondition(): [LogicalOrExpr] ... || ... +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getLeftOperand(): [LogicalAndExpr] ... && ... +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getLeftOperand(): [VariableAccess] x +# 1310| Type = [IntType] int +# 1310| ValueCategory = prvalue(load) +# 1310| getRightOperand(): [VariableAccess] b +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue(load) +# 1310| getLeftOperand().getFullyConverted(): [CStyleCast] (bool)... +# 1310| Conversion = [BoolConversion] conversion to bool +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getRightOperand(): [VariableAccess] y +# 1310| Type = [LongType] long +# 1310| ValueCategory = prvalue(load) +# 1310| getRightOperand().getFullyConverted(): [CStyleCast] (bool)... +# 1310| Conversion = [BoolConversion] conversion to bool +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1310| getElse(): [VariableAccess] x +# 1310| Type = [IntType] int +# 1310| ValueCategory = prvalue(load) +# 1310| getCondition().getFullyConverted(): [ParenthesisExpr] (...) +# 1310| Type = [BoolType] bool +# 1310| ValueCategory = prvalue +# 1311| getStmt(8): [ReturnStmt] return ... +# 1313| [TopLevelFunction] bool predicateA() +# 1313| : +# 1314| [TopLevelFunction] bool predicateB() # 1314| : -# 1314| getParameter(0): [Parameter] x -# 1314| Type = [IntType] int -# 1314| getParameter(1): [Parameter] y -# 1314| Type = [IntType] int -# 1314| getEntryPoint(): [BlockStmt] { ... } -# 1315| getStmt(0): [ReturnStmt] return ... -# 1315| getExpr(): [ConditionalExpr] ... ? ... : ... -# 1315| Type = [IntType] int -# 1315| ValueCategory = prvalue(load) -# 1315| getCondition(): [LogicalAndExpr] ... && ... -# 1315| Type = [BoolType] bool -# 1315| ValueCategory = prvalue -# 1315| getLeftOperand(): [FunctionCall] call to predicateA -# 1315| Type = [BoolType] bool -# 1315| ValueCategory = prvalue -# 1315| getRightOperand(): [FunctionCall] call to predicateB -# 1315| Type = [BoolType] bool -# 1315| ValueCategory = prvalue -# 1315| getThen(): [VariableAccess] x -# 1315| Type = [IntType] int -# 1315| ValueCategory = prvalue(load) -# 1315| getElse(): [VariableAccess] y -# 1315| Type = [IntType] int -# 1315| ValueCategory = prvalue(load) -# 1318| [Operator,TopLevelFunction] void* operator new(size_t, void*) -# 1318| : -# 1318| getParameter(0): [Parameter] (unnamed parameter 0) -# 1318| Type = [CTypedefType,Size_t] size_t -# 1318| getParameter(1): [Parameter] (unnamed parameter 1) -# 1318| Type = [VoidPointerType] void * -# 1320| [TopLevelFunction] void f(int*) +# 1316| [TopLevelFunction] int shortCircuitConditional(int, int) +# 1316| : +# 1316| getParameter(0): [Parameter] x +# 1316| Type = [IntType] int +# 1316| getParameter(1): [Parameter] y +# 1316| Type = [IntType] int +# 1316| getEntryPoint(): [BlockStmt] { ... } +# 1317| getStmt(0): [ReturnStmt] return ... +# 1317| getExpr(): [ConditionalExpr] ... ? ... : ... +# 1317| Type = [IntType] int +# 1317| ValueCategory = prvalue(load) +# 1317| getCondition(): [LogicalAndExpr] ... && ... +# 1317| Type = [BoolType] bool +# 1317| ValueCategory = prvalue +# 1317| getLeftOperand(): [FunctionCall] call to predicateA +# 1317| Type = [BoolType] bool +# 1317| ValueCategory = prvalue +# 1317| getRightOperand(): [FunctionCall] call to predicateB +# 1317| Type = [BoolType] bool +# 1317| ValueCategory = prvalue +# 1317| getThen(): [VariableAccess] x +# 1317| Type = [IntType] int +# 1317| ValueCategory = prvalue(load) +# 1317| getElse(): [VariableAccess] y +# 1317| Type = [IntType] int +# 1317| ValueCategory = prvalue(load) +# 1320| [Operator,TopLevelFunction] void* operator new(size_t, void*) # 1320| : -# 1320| getParameter(0): [Parameter] p -# 1320| Type = [IntPointerType] int * -# 1321| getEntryPoint(): [BlockStmt] { ... } -# 1322| getStmt(0): [ExprStmt] ExprStmt -# 1322| getExpr(): [NewExpr] new -# 1322| Type = [IntPointerType] int * -# 1322| ValueCategory = prvalue -# 1322| getAllocatorCall(): [FunctionCall] call to operator new -# 1322| Type = [VoidPointerType] void * -# 1322| ValueCategory = prvalue -# 1322| getArgument(0): [ErrorExpr] -# 1322| Type = [LongType] unsigned long -# 1322| ValueCategory = prvalue -# 1322| getArgument(1): [VariableAccess] p -# 1322| Type = [IntPointerType] int * -# 1322| ValueCategory = prvalue(load) -# 1322| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... -# 1322| Conversion = [PointerConversion] pointer conversion -# 1322| Type = [VoidPointerType] void * -# 1322| ValueCategory = prvalue -# 1323| getStmt(1): [ReturnStmt] return ... -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] Point defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [Literal] 0 -# 1327| Type = [Struct] Point -# 1327| Value = [Literal] 0 -# 1327| ValueCategory = prvalue -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] String defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [ConstructorCall] call to String -# 1327| Type = [VoidType] void -# 1327| ValueCategory = prvalue -# 1326| [TemplateFunction,TopLevelFunction] T defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [Literal] 0 -# 1327| Type = [TemplateParameter] T -# 1327| Value = [Literal] 0 -# 1327| ValueCategory = prvalue -# 1327| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1327| Type = [TemplateParameter] T -# 1327| ValueCategory = prvalue(load) -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [ConstructorCall] call to copy_constructor -# 1327| Type = [VoidType] void -# 1327| ValueCategory = prvalue -# 1326| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only defaultConstruct() -# 1326| : -# 1326| getEntryPoint(): [BlockStmt] { ... } -# 1327| getStmt(0): [ReturnStmt] return ... -# 1327| getExpr(): [Literal] 0 -# 1327| Type = [Class] destructor_only -# 1327| Value = [Literal] 0 -# 1327| ValueCategory = prvalue -# 1330| [CopyAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only const&) -# 1330| : +# 1320| getParameter(0): [Parameter] (unnamed parameter 0) +# 1320| Type = [CTypedefType,Size_t] size_t +# 1320| getParameter(1): [Parameter] (unnamed parameter 1) +# 1320| Type = [VoidPointerType] void * +# 1322| [TopLevelFunction] void f(int*) +# 1322| : +# 1322| getParameter(0): [Parameter] p +# 1322| Type = [IntPointerType] int * +# 1323| getEntryPoint(): [BlockStmt] { ... } +# 1324| getStmt(0): [ExprStmt] ExprStmt +# 1324| getExpr(): [NewExpr] new +# 1324| Type = [IntPointerType] int * +# 1324| ValueCategory = prvalue +# 1324| getAllocatorCall(): [FunctionCall] call to operator new +# 1324| Type = [VoidPointerType] void * +# 1324| ValueCategory = prvalue +# 1324| getArgument(0): [ErrorExpr] +# 1324| Type = [LongType] unsigned long +# 1324| ValueCategory = prvalue +# 1324| getArgument(1): [VariableAccess] p +# 1324| Type = [IntPointerType] int * +# 1324| ValueCategory = prvalue(load) +# 1324| getArgument(1).getFullyConverted(): [CStyleCast] (void *)... +# 1324| Conversion = [PointerConversion] pointer conversion +# 1324| Type = [VoidPointerType] void * +# 1324| ValueCategory = prvalue +# 1325| getStmt(1): [ReturnStmt] return ... +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] Point defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [Literal] 0 +# 1329| Type = [Struct] Point +# 1329| Value = [Literal] 0 +# 1329| ValueCategory = prvalue +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] String defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [ConstructorCall] call to String +# 1329| Type = [VoidType] void +# 1329| ValueCategory = prvalue +# 1328| [TemplateFunction,TopLevelFunction] T defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [Literal] 0 +# 1329| Type = [TemplateParameter] T +# 1329| Value = [Literal] 0 +# 1329| ValueCategory = prvalue +# 1329| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1329| Type = [TemplateParameter] T +# 1329| ValueCategory = prvalue(load) +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [ConstructorCall] call to copy_constructor +# 1329| Type = [VoidType] void +# 1329| ValueCategory = prvalue +# 1328| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only defaultConstruct() +# 1328| : +# 1328| getEntryPoint(): [BlockStmt] { ... } +# 1329| getStmt(0): [ReturnStmt] return ... +# 1329| getExpr(): [Literal] 0 +# 1329| Type = [Class] destructor_only +# 1329| Value = [Literal] 0 +# 1329| ValueCategory = prvalue +# 1332| [CopyAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only const&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1330| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) -# 1330| : +# 1332| [MoveAssignmentOperator] constructor_only& constructor_only::operator=(constructor_only&&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1330| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) -# 1330| : +# 1332| [CopyConstructor] void constructor_only::constructor_only(constructor_only const&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const constructor_only & -# 1330| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) -# 1330| : +# 1332| [MoveConstructor] void constructor_only::constructor_only(constructor_only&&) +# 1332| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] constructor_only && -# 1335| [Constructor] void constructor_only::constructor_only(int) -# 1335| : -# 1335| getParameter(0): [Parameter] x -# 1335| Type = [IntType] int -# 1338| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) -# 1338| : +# 1337| [Constructor] void constructor_only::constructor_only(int) +# 1337| : +# 1337| getParameter(0): [Parameter] x +# 1337| Type = [IntType] int +# 1340| [CopyAssignmentOperator] copy_constructor& copy_constructor::operator=(copy_constructor const&) +# 1340| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const copy_constructor & -# 1343| [Constructor] void copy_constructor::copy_constructor() -# 1343| : -# 1344| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) -# 1344| : -# 1344| getParameter(0): [Parameter] (unnamed parameter 0) -# 1344| Type = [LValueReferenceType] const copy_constructor & -# 1346| [MemberFunction] void copy_constructor::method() +# 1345| [Constructor] void copy_constructor::copy_constructor() +# 1345| : +# 1346| [CopyConstructor] void copy_constructor::copy_constructor(copy_constructor const&) # 1346| : -# 1349| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) -# 1349| : +# 1346| getParameter(0): [Parameter] (unnamed parameter 0) +# 1346| Type = [LValueReferenceType] const copy_constructor & +# 1348| [MemberFunction] void copy_constructor::method() +# 1348| : +# 1351| [CopyAssignmentOperator] destructor_only& destructor_only::operator=(destructor_only const&) +# 1351| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const destructor_only & -# 1349| [Constructor] void destructor_only::destructor_only() -# 1349| : -# 1351| [Destructor] void destructor_only::~destructor_only() +# 1351| [Constructor] void destructor_only::destructor_only() # 1351| : -# 1353| [MemberFunction] void destructor_only::method() +# 1353| [Destructor] void destructor_only::~destructor_only() # 1353| : -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(Point const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const Point & -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(String const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const String & -# 1357| [TemplateFunction,TopLevelFunction] void acceptRef(T const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const T & -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(copy_constructor const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const copy_constructor & -# 1357| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(destructor_only const&) -# 1357| : -# 1357| getParameter(0): [Parameter] v -# 1357| Type = [LValueReferenceType] const destructor_only & -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(Point) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Struct] Point -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(String) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Struct] String -# 1360| [TemplateFunction,TopLevelFunction] void acceptValue(T) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [TemplateParameter] T -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(copy_constructor) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Class] copy_constructor -# 1360| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(destructor_only) -# 1360| : -# 1360| getParameter(0): [Parameter] v -# 1360| Type = [Class] destructor_only -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue() -# 1363| : -# 1363| [TemplateFunction,TopLevelFunction] T returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue() -# 1363| : -# 1363| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue() -# 1363| : -# 1365| [TopLevelFunction] void temporary_string() +# 1355| [MemberFunction] void destructor_only::method() +# 1355| : +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(Point const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const Point & +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(String const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const String & +# 1359| [TemplateFunction,TopLevelFunction] void acceptRef(T const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const T & +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(copy_constructor const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const copy_constructor & +# 1359| [FunctionTemplateInstantiation,TopLevelFunction] void acceptRef(destructor_only const&) +# 1359| : +# 1359| getParameter(0): [Parameter] v +# 1359| Type = [LValueReferenceType] const destructor_only & +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(Point) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Struct] Point +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(String) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Struct] String +# 1362| [TemplateFunction,TopLevelFunction] void acceptValue(T) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [TemplateParameter] T +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(copy_constructor) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Class] copy_constructor +# 1362| [FunctionTemplateInstantiation,TopLevelFunction] void acceptValue(destructor_only) +# 1362| : +# 1362| getParameter(0): [Parameter] v +# 1362| Type = [Class] destructor_only +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Derived returnValue() # 1365| : -# 1365| getEntryPoint(): [BlockStmt] { ... } -# 1366| getStmt(0): [DeclStmt] declaration -# 1366| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 1366| Type = [Struct] String -# 1366| getVariable().getInitializer(): [Initializer] initializer for s -# 1366| getExpr(): [FunctionCall] call to returnValue -# 1366| Type = [Struct] String -# 1366| ValueCategory = prvalue -# 1367| getStmt(1): [DeclStmt] declaration -# 1367| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs -# 1367| Type = [LValueReferenceType] const String & -# 1367| getVariable().getInitializer(): [Initializer] initializer for rs -# 1367| getExpr(): [FunctionCall] call to returnValue -# 1367| Type = [Struct] String -# 1367| ValueCategory = prvalue -# 1367| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1367| Type = [LValueReferenceType] const String & -# 1367| ValueCategory = prvalue -# 1367| getExpr(): [CStyleCast] (const String)... -# 1367| Conversion = [GlvalueConversion] glvalue conversion -# 1367| Type = [SpecifiedType] const String -# 1367| ValueCategory = lvalue -# 1367| getExpr(): [TemporaryObjectExpr] temporary object -# 1367| Type = [Struct] String -# 1367| ValueCategory = lvalue -# 1369| getStmt(2): [ExprStmt] ExprStmt -# 1369| getExpr(): [FunctionCall] call to acceptRef -# 1369| Type = [VoidType] void -# 1369| ValueCategory = prvalue -# 1369| getArgument(0): [VariableAccess] s -# 1369| Type = [Struct] String -# 1369| ValueCategory = lvalue -# 1369| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1369| Type = [LValueReferenceType] const String & -# 1369| ValueCategory = prvalue -# 1369| getExpr(): [CStyleCast] (const String)... -# 1369| Conversion = [GlvalueConversion] glvalue conversion -# 1369| Type = [SpecifiedType] const String -# 1369| ValueCategory = lvalue -# 1370| getStmt(3): [ExprStmt] ExprStmt -# 1370| getExpr(): [FunctionCall] call to acceptRef -# 1370| Type = [VoidType] void -# 1370| ValueCategory = prvalue -# 1370| getArgument(0): [ConstructorCall] call to String -# 1370| Type = [VoidType] void -# 1370| ValueCategory = prvalue -# 1370| getArgument(0): foo -# 1370| Type = [ArrayType] const char[4] -# 1370| Value = [StringLiteral] "foo" -# 1370| ValueCategory = lvalue -# 1370| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1370| Type = [PointerType] const char * -# 1370| ValueCategory = prvalue -# 1370| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1370| Type = [LValueReferenceType] const String & -# 1370| ValueCategory = prvalue -# 1370| getExpr(): [TemporaryObjectExpr] temporary object -# 1370| Type = [SpecifiedType] const String -# 1370| ValueCategory = lvalue -# 1371| getStmt(4): [ExprStmt] ExprStmt -# 1371| getExpr(): [FunctionCall] call to acceptValue +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] POD_Middle returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] Point returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] String returnValue() +# 1365| : +# 1365| [TemplateFunction,TopLevelFunction] T returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] UnusualFields returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] copy_constructor returnValue() +# 1365| : +# 1365| [FunctionTemplateInstantiation,TopLevelFunction] destructor_only returnValue() +# 1365| : +# 1367| [TopLevelFunction] void temporary_string() +# 1367| : +# 1367| getEntryPoint(): [BlockStmt] { ... } +# 1368| getStmt(0): [DeclStmt] declaration +# 1368| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 1368| Type = [Struct] String +# 1368| getVariable().getInitializer(): [Initializer] initializer for s +# 1368| getExpr(): [FunctionCall] call to returnValue +# 1368| Type = [Struct] String +# 1368| ValueCategory = prvalue +# 1369| getStmt(1): [DeclStmt] declaration +# 1369| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rs +# 1369| Type = [LValueReferenceType] const String & +# 1369| getVariable().getInitializer(): [Initializer] initializer for rs +# 1369| getExpr(): [FunctionCall] call to returnValue +# 1369| Type = [Struct] String +# 1369| ValueCategory = prvalue +# 1369| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1369| Type = [LValueReferenceType] const String & +# 1369| ValueCategory = prvalue +# 1369| getExpr(): [CStyleCast] (const String)... +# 1369| Conversion = [GlvalueConversion] glvalue conversion +# 1369| Type = [SpecifiedType] const String +# 1369| ValueCategory = lvalue +# 1369| getExpr(): [TemporaryObjectExpr] temporary object +# 1369| Type = [Struct] String +# 1369| ValueCategory = lvalue +# 1371| getStmt(2): [ExprStmt] ExprStmt +# 1371| getExpr(): [FunctionCall] call to acceptRef # 1371| Type = [VoidType] void # 1371| ValueCategory = prvalue -# 1371| getArgument(0): [ConstructorCall] call to String -# 1371| Type = [VoidType] void -# 1371| ValueCategory = prvalue -# 1371| getArgument(0): [VariableAccess] s -# 1371| Type = [Struct] String -# 1371| ValueCategory = lvalue -# 1371| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1371| Type = [LValueReferenceType] const String & -# 1371| ValueCategory = prvalue -# 1371| getExpr(): [CStyleCast] (const String)... -# 1371| Conversion = [GlvalueConversion] glvalue conversion -# 1371| Type = [SpecifiedType] const String -# 1371| ValueCategory = lvalue -# 1371| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1371| getArgument(0): [VariableAccess] s # 1371| Type = [Struct] String # 1371| ValueCategory = lvalue -# 1372| getStmt(5): [ExprStmt] ExprStmt -# 1372| getExpr(): [FunctionCall] call to acceptValue +# 1371| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1371| Type = [LValueReferenceType] const String & +# 1371| ValueCategory = prvalue +# 1371| getExpr(): [CStyleCast] (const String)... +# 1371| Conversion = [GlvalueConversion] glvalue conversion +# 1371| Type = [SpecifiedType] const String +# 1371| ValueCategory = lvalue +# 1372| getStmt(3): [ExprStmt] ExprStmt +# 1372| getExpr(): [FunctionCall] call to acceptRef # 1372| Type = [VoidType] void # 1372| ValueCategory = prvalue # 1372| getArgument(0): [ConstructorCall] call to String @@ -11044,468 +11157,508 @@ ir.cpp: # 1372| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1372| Type = [PointerType] const char * # 1372| ValueCategory = prvalue -# 1372| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1372| Type = [Struct] String -# 1372| ValueCategory = lvalue -# 1373| getStmt(6): [ExprStmt] ExprStmt -# 1373| getExpr(): [FunctionCall] call to c_str -# 1373| Type = [PointerType] const char * +# 1372| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1372| Type = [LValueReferenceType] const String & +# 1372| ValueCategory = prvalue +# 1372| getExpr(): [TemporaryObjectExpr] temporary object +# 1372| Type = [SpecifiedType] const String +# 1372| ValueCategory = lvalue +# 1373| getStmt(4): [ExprStmt] ExprStmt +# 1373| getExpr(): [FunctionCall] call to acceptValue +# 1373| Type = [VoidType] void # 1373| ValueCategory = prvalue -# 1373| getQualifier(): [ConstructorCall] call to String +# 1373| getArgument(0): [ConstructorCall] call to String # 1373| Type = [VoidType] void # 1373| ValueCategory = prvalue -# 1373| getQualifier().getFullyConverted(): [CStyleCast] (const String)... -# 1373| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion -# 1373| Type = [SpecifiedType] const String -# 1373| ValueCategory = prvalue -# 1373| getExpr(): [TemporaryObjectExpr] temporary object +# 1373| getArgument(0): [VariableAccess] s # 1373| Type = [Struct] String -# 1373| ValueCategory = prvalue(load) -# 1374| getStmt(7): [ExprStmt] ExprStmt -# 1374| getExpr(): [FunctionCall] call to c_str -# 1374| Type = [PointerType] const char * +# 1373| ValueCategory = lvalue +# 1373| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1373| Type = [LValueReferenceType] const String & +# 1373| ValueCategory = prvalue +# 1373| getExpr(): [CStyleCast] (const String)... +# 1373| Conversion = [GlvalueConversion] glvalue conversion +# 1373| Type = [SpecifiedType] const String +# 1373| ValueCategory = lvalue +# 1373| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1373| Type = [Struct] String +# 1373| ValueCategory = lvalue +# 1374| getStmt(5): [ExprStmt] ExprStmt +# 1374| getExpr(): [FunctionCall] call to acceptValue +# 1374| Type = [VoidType] void # 1374| ValueCategory = prvalue -# 1374| getQualifier(): [FunctionCall] call to returnValue +# 1374| getArgument(0): [ConstructorCall] call to String +# 1374| Type = [VoidType] void +# 1374| ValueCategory = prvalue +# 1374| getArgument(0): foo +# 1374| Type = [ArrayType] const char[4] +# 1374| Value = [StringLiteral] "foo" +# 1374| ValueCategory = lvalue +# 1374| getArgument(0).getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1374| Type = [PointerType] const char * +# 1374| ValueCategory = prvalue +# 1374| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1374| Type = [Struct] String -# 1374| ValueCategory = prvalue -# 1374| getQualifier().getFullyConverted(): [CStyleCast] (const String)... -# 1374| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion -# 1374| Type = [SpecifiedType] const String -# 1374| ValueCategory = prvalue -# 1374| getExpr(): [TemporaryObjectExpr] temporary object -# 1374| Type = [Struct] String -# 1374| ValueCategory = prvalue(load) -# 1376| getStmt(8): [ExprStmt] ExprStmt -# 1376| getExpr(): [FunctionCall] call to defaultConstruct -# 1376| Type = [Struct] String +# 1374| ValueCategory = lvalue +# 1375| getStmt(6): [ExprStmt] ExprStmt +# 1375| getExpr(): [FunctionCall] call to c_str +# 1375| Type = [PointerType] const char * +# 1375| ValueCategory = prvalue +# 1375| getQualifier(): [ConstructorCall] call to String +# 1375| Type = [VoidType] void +# 1375| ValueCategory = prvalue +# 1375| getQualifier().getFullyConverted(): [CStyleCast] (const String)... +# 1375| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion +# 1375| Type = [SpecifiedType] const String +# 1375| ValueCategory = prvalue +# 1375| getExpr(): [TemporaryObjectExpr] temporary object +# 1375| Type = [Struct] String +# 1375| ValueCategory = prvalue(load) +# 1376| getStmt(7): [ExprStmt] ExprStmt +# 1376| getExpr(): [FunctionCall] call to c_str +# 1376| Type = [PointerType] const char * # 1376| ValueCategory = prvalue -# 1376| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1376| Type = [Struct] String -# 1376| ValueCategory = prvalue -# 1377| getStmt(9): [ReturnStmt] return ... -# 1377| getImplicitDestructorCall(0): [DestructorCall] call to ~String -# 1377| Type = [VoidType] void -# 1377| ValueCategory = prvalue -# 1377| getQualifier(): [VariableAccess] s -# 1377| Type = [Struct] String -# 1377| ValueCategory = lvalue -# 1379| [TopLevelFunction] void temporary_destructor_only() -# 1379| : -# 1379| getEntryPoint(): [BlockStmt] { ... } -# 1380| getStmt(0): [DeclStmt] declaration -# 1380| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1380| Type = [Class] destructor_only -# 1380| getVariable().getInitializer(): [Initializer] initializer for d -# 1380| getExpr(): [FunctionCall] call to returnValue -# 1380| Type = [Class] destructor_only -# 1380| ValueCategory = prvalue -# 1381| getStmt(1): [DeclStmt] declaration -# 1381| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1381| Type = [LValueReferenceType] const destructor_only & -# 1381| getVariable().getInitializer(): [Initializer] initializer for rd -# 1381| getExpr(): [FunctionCall] call to returnValue -# 1381| Type = [Class] destructor_only -# 1381| ValueCategory = prvalue -# 1381| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1381| Type = [LValueReferenceType] const destructor_only & -# 1381| ValueCategory = prvalue -# 1381| getExpr(): [CStyleCast] (const destructor_only)... -# 1381| Conversion = [GlvalueConversion] glvalue conversion -# 1381| Type = [SpecifiedType] const destructor_only -# 1381| ValueCategory = lvalue -# 1381| getExpr(): [TemporaryObjectExpr] temporary object -# 1381| Type = [Class] destructor_only -# 1381| ValueCategory = lvalue -# 1382| getStmt(2): [DeclStmt] declaration -# 1382| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1376| getQualifier(): [FunctionCall] call to returnValue +# 1376| Type = [Struct] String +# 1376| ValueCategory = prvalue +# 1376| getQualifier().getFullyConverted(): [CStyleCast] (const String)... +# 1376| Conversion = [PrvalueAdjustmentConversion] prvalue adjustment conversion +# 1376| Type = [SpecifiedType] const String +# 1376| ValueCategory = prvalue +# 1376| getExpr(): [TemporaryObjectExpr] temporary object +# 1376| Type = [Struct] String +# 1376| ValueCategory = prvalue(load) +# 1378| getStmt(8): [ExprStmt] ExprStmt +# 1378| getExpr(): [FunctionCall] call to defaultConstruct +# 1378| Type = [Struct] String +# 1378| ValueCategory = prvalue +# 1378| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1378| Type = [Struct] String +# 1378| ValueCategory = prvalue +# 1379| getStmt(9): [ReturnStmt] return ... +# 1379| getImplicitDestructorCall(0): [DestructorCall] call to ~String +# 1379| Type = [VoidType] void +# 1379| ValueCategory = prvalue +# 1379| getQualifier(): [VariableAccess] s +# 1379| Type = [Struct] String +# 1379| ValueCategory = lvalue +# 1381| [TopLevelFunction] void temporary_destructor_only() +# 1381| : +# 1381| getEntryPoint(): [BlockStmt] { ... } +# 1382| getStmt(0): [DeclStmt] declaration +# 1382| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1382| Type = [Class] destructor_only -# 1383| getStmt(3): [ExprStmt] ExprStmt -# 1383| getExpr(): [FunctionCall] call to acceptRef -# 1383| Type = [VoidType] void -# 1383| ValueCategory = prvalue -# 1383| getArgument(0): [VariableAccess] d -# 1383| Type = [Class] destructor_only -# 1383| ValueCategory = lvalue -# 1383| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1383| Type = [LValueReferenceType] const destructor_only & -# 1383| ValueCategory = prvalue -# 1383| getExpr(): [CStyleCast] (const destructor_only)... -# 1383| Conversion = [GlvalueConversion] glvalue conversion -# 1383| Type = [SpecifiedType] const destructor_only -# 1383| ValueCategory = lvalue -# 1384| getStmt(4): [ExprStmt] ExprStmt -# 1384| getExpr(): [FunctionCall] call to acceptValue -# 1384| Type = [VoidType] void -# 1384| ValueCategory = prvalue -# 1384| getArgument(0): [VariableAccess] d -# 1384| Type = [Class] destructor_only -# 1384| ValueCategory = prvalue(load) -# 1384| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1384| Type = [Class] destructor_only -# 1384| ValueCategory = lvalue -# 1385| getStmt(5): [ExprStmt] ExprStmt -# 1385| getExpr(): [FunctionCall] call to method +# 1382| getVariable().getInitializer(): [Initializer] initializer for d +# 1382| getExpr(): [FunctionCall] call to returnValue +# 1382| Type = [Class] destructor_only +# 1382| ValueCategory = prvalue +# 1383| getStmt(1): [DeclStmt] declaration +# 1383| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1383| Type = [LValueReferenceType] const destructor_only & +# 1383| getVariable().getInitializer(): [Initializer] initializer for rd +# 1383| getExpr(): [FunctionCall] call to returnValue +# 1383| Type = [Class] destructor_only +# 1383| ValueCategory = prvalue +# 1383| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1383| Type = [LValueReferenceType] const destructor_only & +# 1383| ValueCategory = prvalue +# 1383| getExpr(): [CStyleCast] (const destructor_only)... +# 1383| Conversion = [GlvalueConversion] glvalue conversion +# 1383| Type = [SpecifiedType] const destructor_only +# 1383| ValueCategory = lvalue +# 1383| getExpr(): [TemporaryObjectExpr] temporary object +# 1383| Type = [Class] destructor_only +# 1383| ValueCategory = lvalue +# 1384| getStmt(2): [DeclStmt] declaration +# 1384| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1384| Type = [Class] destructor_only +# 1385| getStmt(3): [ExprStmt] ExprStmt +# 1385| getExpr(): [FunctionCall] call to acceptRef # 1385| Type = [VoidType] void # 1385| ValueCategory = prvalue -# 1385| getQualifier(): [Literal] 0 +# 1385| getArgument(0): [VariableAccess] d # 1385| Type = [Class] destructor_only -# 1385| Value = [Literal] 0 +# 1385| ValueCategory = lvalue +# 1385| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1385| Type = [LValueReferenceType] const destructor_only & # 1385| ValueCategory = prvalue -# 1385| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1385| Type = [Class] destructor_only -# 1385| ValueCategory = prvalue(load) -# 1386| getStmt(6): [ExprStmt] ExprStmt -# 1386| getExpr(): [FunctionCall] call to method +# 1385| getExpr(): [CStyleCast] (const destructor_only)... +# 1385| Conversion = [GlvalueConversion] glvalue conversion +# 1385| Type = [SpecifiedType] const destructor_only +# 1385| ValueCategory = lvalue +# 1386| getStmt(4): [ExprStmt] ExprStmt +# 1386| getExpr(): [FunctionCall] call to acceptValue # 1386| Type = [VoidType] void # 1386| ValueCategory = prvalue -# 1386| getQualifier(): [FunctionCall] call to returnValue -# 1386| Type = [Class] destructor_only -# 1386| ValueCategory = prvalue -# 1386| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1386| getArgument(0): [VariableAccess] d # 1386| Type = [Class] destructor_only # 1386| ValueCategory = prvalue(load) -# 1388| getStmt(7): [ExprStmt] ExprStmt -# 1388| getExpr(): [FunctionCall] call to defaultConstruct -# 1388| Type = [Class] destructor_only +# 1386| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1386| Type = [Class] destructor_only +# 1386| ValueCategory = lvalue +# 1387| getStmt(5): [ExprStmt] ExprStmt +# 1387| getExpr(): [FunctionCall] call to method +# 1387| Type = [VoidType] void +# 1387| ValueCategory = prvalue +# 1387| getQualifier(): [Literal] 0 +# 1387| Type = [Class] destructor_only +# 1387| Value = [Literal] 0 +# 1387| ValueCategory = prvalue +# 1387| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1387| Type = [Class] destructor_only +# 1387| ValueCategory = prvalue(load) +# 1388| getStmt(6): [ExprStmt] ExprStmt +# 1388| getExpr(): [FunctionCall] call to method +# 1388| Type = [VoidType] void # 1388| ValueCategory = prvalue -# 1388| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1388| Type = [Class] destructor_only -# 1388| ValueCategory = prvalue -# 1389| getStmt(8): [ReturnStmt] return ... -# 1389| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only -# 1389| Type = [VoidType] void -# 1389| ValueCategory = prvalue -# 1389| getQualifier(): [VariableAccess] d2 -# 1389| Type = [Class] destructor_only -# 1389| ValueCategory = lvalue -# 1389| getImplicitDestructorCall(1): [DestructorCall] call to ~destructor_only -# 1389| Type = [VoidType] void -# 1389| ValueCategory = prvalue -# 1389| getQualifier(): [VariableAccess] d -# 1389| Type = [Class] destructor_only -# 1389| ValueCategory = lvalue -# 1391| [TopLevelFunction] void temporary_copy_constructor() -# 1391| : -# 1391| getEntryPoint(): [BlockStmt] { ... } -# 1392| getStmt(0): [DeclStmt] declaration -# 1392| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1392| Type = [Class] copy_constructor -# 1392| getVariable().getInitializer(): [Initializer] initializer for d -# 1392| getExpr(): [FunctionCall] call to returnValue -# 1392| Type = [Class] copy_constructor -# 1392| ValueCategory = prvalue -# 1393| getStmt(1): [DeclStmt] declaration -# 1393| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1393| Type = [LValueReferenceType] const copy_constructor & -# 1393| getVariable().getInitializer(): [Initializer] initializer for rd -# 1393| getExpr(): [FunctionCall] call to returnValue -# 1393| Type = [Class] copy_constructor -# 1393| ValueCategory = prvalue -# 1393| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1393| Type = [LValueReferenceType] const copy_constructor & -# 1393| ValueCategory = prvalue -# 1393| getExpr(): [CStyleCast] (const copy_constructor)... -# 1393| Conversion = [GlvalueConversion] glvalue conversion -# 1393| Type = [SpecifiedType] const copy_constructor -# 1393| ValueCategory = lvalue -# 1393| getExpr(): [TemporaryObjectExpr] temporary object -# 1393| Type = [Class] copy_constructor -# 1393| ValueCategory = lvalue -# 1394| getStmt(2): [DeclStmt] declaration -# 1394| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1388| getQualifier(): [FunctionCall] call to returnValue +# 1388| Type = [Class] destructor_only +# 1388| ValueCategory = prvalue +# 1388| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1388| Type = [Class] destructor_only +# 1388| ValueCategory = prvalue(load) +# 1390| getStmt(7): [ExprStmt] ExprStmt +# 1390| getExpr(): [FunctionCall] call to defaultConstruct +# 1390| Type = [Class] destructor_only +# 1390| ValueCategory = prvalue +# 1390| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1390| Type = [Class] destructor_only +# 1390| ValueCategory = prvalue +# 1391| getStmt(8): [ReturnStmt] return ... +# 1391| getImplicitDestructorCall(0): [DestructorCall] call to ~destructor_only +# 1391| Type = [VoidType] void +# 1391| ValueCategory = prvalue +# 1391| getQualifier(): [VariableAccess] d2 +# 1391| Type = [Class] destructor_only +# 1391| ValueCategory = lvalue +# 1391| getImplicitDestructorCall(1): [DestructorCall] call to ~destructor_only +# 1391| Type = [VoidType] void +# 1391| ValueCategory = prvalue +# 1391| getQualifier(): [VariableAccess] d +# 1391| Type = [Class] destructor_only +# 1391| ValueCategory = lvalue +# 1393| [TopLevelFunction] void temporary_copy_constructor() +# 1393| : +# 1393| getEntryPoint(): [BlockStmt] { ... } +# 1394| getStmt(0): [DeclStmt] declaration +# 1394| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1394| Type = [Class] copy_constructor -# 1394| getVariable().getInitializer(): [Initializer] initializer for d2 -# 1394| getExpr(): [ConstructorCall] call to copy_constructor -# 1394| Type = [VoidType] void +# 1394| getVariable().getInitializer(): [Initializer] initializer for d +# 1394| getExpr(): [FunctionCall] call to returnValue +# 1394| Type = [Class] copy_constructor # 1394| ValueCategory = prvalue -# 1395| getStmt(3): [ExprStmt] ExprStmt -# 1395| getExpr(): [FunctionCall] call to acceptRef -# 1395| Type = [VoidType] void -# 1395| ValueCategory = prvalue -# 1395| getArgument(0): [VariableAccess] d -# 1395| Type = [Class] copy_constructor -# 1395| ValueCategory = lvalue -# 1395| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1395| Type = [LValueReferenceType] const copy_constructor & -# 1395| ValueCategory = prvalue -# 1395| getExpr(): [CStyleCast] (const copy_constructor)... -# 1395| Conversion = [GlvalueConversion] glvalue conversion -# 1395| Type = [SpecifiedType] const copy_constructor -# 1395| ValueCategory = lvalue -# 1396| getStmt(4): [ExprStmt] ExprStmt -# 1396| getExpr(): [FunctionCall] call to acceptValue -# 1396| Type = [VoidType] void -# 1396| ValueCategory = prvalue -# 1396| getArgument(0): [ConstructorCall] call to copy_constructor -# 1396| Type = [VoidType] void -# 1396| ValueCategory = prvalue -# 1396| getArgument(0): [VariableAccess] d -# 1396| Type = [Class] copy_constructor -# 1396| ValueCategory = lvalue -# 1396| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1396| Type = [LValueReferenceType] const copy_constructor & +# 1395| getStmt(1): [DeclStmt] declaration +# 1395| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1395| Type = [LValueReferenceType] const copy_constructor & +# 1395| getVariable().getInitializer(): [Initializer] initializer for rd +# 1395| getExpr(): [FunctionCall] call to returnValue +# 1395| Type = [Class] copy_constructor +# 1395| ValueCategory = prvalue +# 1395| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1395| Type = [LValueReferenceType] const copy_constructor & +# 1395| ValueCategory = prvalue +# 1395| getExpr(): [CStyleCast] (const copy_constructor)... +# 1395| Conversion = [GlvalueConversion] glvalue conversion +# 1395| Type = [SpecifiedType] const copy_constructor +# 1395| ValueCategory = lvalue +# 1395| getExpr(): [TemporaryObjectExpr] temporary object +# 1395| Type = [Class] copy_constructor +# 1395| ValueCategory = lvalue +# 1396| getStmt(2): [DeclStmt] declaration +# 1396| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d2 +# 1396| Type = [Class] copy_constructor +# 1396| getVariable().getInitializer(): [Initializer] initializer for d2 +# 1396| getExpr(): [ConstructorCall] call to copy_constructor +# 1396| Type = [VoidType] void # 1396| ValueCategory = prvalue -# 1396| getExpr(): [CStyleCast] (const copy_constructor)... -# 1396| Conversion = [GlvalueConversion] glvalue conversion -# 1396| Type = [SpecifiedType] const copy_constructor -# 1396| ValueCategory = lvalue -# 1396| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1396| Type = [Class] copy_constructor -# 1396| ValueCategory = lvalue -# 1397| getStmt(5): [ExprStmt] ExprStmt -# 1397| getExpr(): [FunctionCall] call to method +# 1397| getStmt(3): [ExprStmt] ExprStmt +# 1397| getExpr(): [FunctionCall] call to acceptRef # 1397| Type = [VoidType] void # 1397| ValueCategory = prvalue -# 1397| getQualifier(): [ConstructorCall] call to copy_constructor -# 1397| Type = [VoidType] void -# 1397| ValueCategory = prvalue -# 1397| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1397| getArgument(0): [VariableAccess] d # 1397| Type = [Class] copy_constructor -# 1397| ValueCategory = prvalue(load) -# 1398| getStmt(6): [ExprStmt] ExprStmt -# 1398| getExpr(): [FunctionCall] call to method +# 1397| ValueCategory = lvalue +# 1397| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1397| Type = [LValueReferenceType] const copy_constructor & +# 1397| ValueCategory = prvalue +# 1397| getExpr(): [CStyleCast] (const copy_constructor)... +# 1397| Conversion = [GlvalueConversion] glvalue conversion +# 1397| Type = [SpecifiedType] const copy_constructor +# 1397| ValueCategory = lvalue +# 1398| getStmt(4): [ExprStmt] ExprStmt +# 1398| getExpr(): [FunctionCall] call to acceptValue # 1398| Type = [VoidType] void # 1398| ValueCategory = prvalue -# 1398| getQualifier(): [FunctionCall] call to returnValue -# 1398| Type = [Class] copy_constructor +# 1398| getArgument(0): [ConstructorCall] call to copy_constructor +# 1398| Type = [VoidType] void # 1398| ValueCategory = prvalue -# 1398| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1398| getArgument(0): [VariableAccess] d +# 1398| Type = [Class] copy_constructor +# 1398| ValueCategory = lvalue +# 1398| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1398| Type = [LValueReferenceType] const copy_constructor & +# 1398| ValueCategory = prvalue +# 1398| getExpr(): [CStyleCast] (const copy_constructor)... +# 1398| Conversion = [GlvalueConversion] glvalue conversion +# 1398| Type = [SpecifiedType] const copy_constructor +# 1398| ValueCategory = lvalue +# 1398| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object # 1398| Type = [Class] copy_constructor -# 1398| ValueCategory = prvalue(load) -# 1399| getStmt(7): [ExprStmt] ExprStmt -# 1399| getExpr(): [FunctionCall] call to defaultConstruct -# 1399| Type = [Class] copy_constructor +# 1398| ValueCategory = lvalue +# 1399| getStmt(5): [ExprStmt] ExprStmt +# 1399| getExpr(): [FunctionCall] call to method +# 1399| Type = [VoidType] void # 1399| ValueCategory = prvalue -# 1399| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1399| Type = [Class] copy_constructor -# 1399| ValueCategory = prvalue -# 1401| getStmt(8): [DeclStmt] declaration -# 1401| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1401| Type = [IntType] int -# 1401| getVariable().getInitializer(): [Initializer] initializer for y -# 1401| getExpr(): [ValueFieldAccess] y -# 1401| Type = [IntType] int -# 1401| ValueCategory = prvalue -# 1401| getQualifier(): [FunctionCall] call to returnValue -# 1401| Type = [Class] copy_constructor -# 1401| ValueCategory = prvalue -# 1401| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1401| Type = [Class] copy_constructor -# 1401| ValueCategory = prvalue(load) -# 1402| getStmt(9): [ReturnStmt] return ... -# 1404| [TopLevelFunction] void temporary_point() -# 1404| : -# 1404| getEntryPoint(): [BlockStmt] { ... } -# 1405| getStmt(0): [DeclStmt] declaration -# 1405| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p -# 1405| Type = [Struct] Point -# 1405| getVariable().getInitializer(): [Initializer] initializer for p -# 1405| getExpr(): [FunctionCall] call to returnValue -# 1405| Type = [Struct] Point -# 1405| ValueCategory = prvalue -# 1406| getStmt(1): [DeclStmt] declaration -# 1406| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rp -# 1406| Type = [LValueReferenceType] const Point & -# 1406| getVariable().getInitializer(): [Initializer] initializer for rp -# 1406| getExpr(): [FunctionCall] call to returnValue -# 1406| Type = [Struct] Point -# 1406| ValueCategory = prvalue -# 1406| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1406| Type = [LValueReferenceType] const Point & -# 1406| ValueCategory = prvalue -# 1406| getExpr(): [CStyleCast] (const Point)... -# 1406| Conversion = [GlvalueConversion] glvalue conversion -# 1406| Type = [SpecifiedType] const Point -# 1406| ValueCategory = lvalue -# 1406| getExpr(): [TemporaryObjectExpr] temporary object -# 1406| Type = [Struct] Point -# 1406| ValueCategory = lvalue -# 1408| getStmt(2): [ExprStmt] ExprStmt -# 1408| getExpr(): [FunctionCall] call to acceptRef -# 1408| Type = [VoidType] void -# 1408| ValueCategory = prvalue -# 1408| getArgument(0): [VariableAccess] p -# 1408| Type = [Struct] Point -# 1408| ValueCategory = lvalue -# 1408| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1408| Type = [LValueReferenceType] const Point & -# 1408| ValueCategory = prvalue -# 1408| getExpr(): [CStyleCast] (const Point)... -# 1408| Conversion = [GlvalueConversion] glvalue conversion -# 1408| Type = [SpecifiedType] const Point -# 1408| ValueCategory = lvalue -# 1409| getStmt(3): [ExprStmt] ExprStmt -# 1409| getExpr(): [FunctionCall] call to acceptValue -# 1409| Type = [VoidType] void -# 1409| ValueCategory = prvalue -# 1409| getArgument(0): [VariableAccess] p -# 1409| Type = [Struct] Point -# 1409| ValueCategory = prvalue(load) -# 1410| getStmt(4): [ExprStmt] ExprStmt -# 1410| getExpr(): [ValueFieldAccess] x -# 1410| Type = [IntType] int -# 1410| Value = [ValueFieldAccess] 0 +# 1399| getQualifier(): [ConstructorCall] call to copy_constructor +# 1399| Type = [VoidType] void +# 1399| ValueCategory = prvalue +# 1399| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1399| Type = [Class] copy_constructor +# 1399| ValueCategory = prvalue(load) +# 1400| getStmt(6): [ExprStmt] ExprStmt +# 1400| getExpr(): [FunctionCall] call to method +# 1400| Type = [VoidType] void +# 1400| ValueCategory = prvalue +# 1400| getQualifier(): [FunctionCall] call to returnValue +# 1400| Type = [Class] copy_constructor +# 1400| ValueCategory = prvalue +# 1400| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1400| Type = [Class] copy_constructor +# 1400| ValueCategory = prvalue(load) +# 1401| getStmt(7): [ExprStmt] ExprStmt +# 1401| getExpr(): [FunctionCall] call to defaultConstruct +# 1401| Type = [Class] copy_constructor +# 1401| ValueCategory = prvalue +# 1401| getExpr().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1401| Type = [Class] copy_constructor +# 1401| ValueCategory = prvalue +# 1403| getStmt(8): [DeclStmt] declaration +# 1403| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1403| Type = [IntType] int +# 1403| getVariable().getInitializer(): [Initializer] initializer for y +# 1403| getExpr(): [ValueFieldAccess] y +# 1403| Type = [IntType] int +# 1403| ValueCategory = prvalue +# 1403| getQualifier(): [FunctionCall] call to returnValue +# 1403| Type = [Class] copy_constructor +# 1403| ValueCategory = prvalue +# 1403| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1403| Type = [Class] copy_constructor +# 1403| ValueCategory = prvalue(load) +# 1404| getStmt(9): [ReturnStmt] return ... +# 1406| [TopLevelFunction] void temporary_point() +# 1406| : +# 1406| getEntryPoint(): [BlockStmt] { ... } +# 1407| getStmt(0): [DeclStmt] declaration +# 1407| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 1407| Type = [Struct] Point +# 1407| getVariable().getInitializer(): [Initializer] initializer for p +# 1407| getExpr(): [FunctionCall] call to returnValue +# 1407| Type = [Struct] Point +# 1407| ValueCategory = prvalue +# 1408| getStmt(1): [DeclStmt] declaration +# 1408| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rp +# 1408| Type = [LValueReferenceType] const Point & +# 1408| getVariable().getInitializer(): [Initializer] initializer for rp +# 1408| getExpr(): [FunctionCall] call to returnValue +# 1408| Type = [Struct] Point +# 1408| ValueCategory = prvalue +# 1408| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1408| Type = [LValueReferenceType] const Point & +# 1408| ValueCategory = prvalue +# 1408| getExpr(): [CStyleCast] (const Point)... +# 1408| Conversion = [GlvalueConversion] glvalue conversion +# 1408| Type = [SpecifiedType] const Point +# 1408| ValueCategory = lvalue +# 1408| getExpr(): [TemporaryObjectExpr] temporary object +# 1408| Type = [Struct] Point +# 1408| ValueCategory = lvalue +# 1410| getStmt(2): [ExprStmt] ExprStmt +# 1410| getExpr(): [FunctionCall] call to acceptRef +# 1410| Type = [VoidType] void # 1410| ValueCategory = prvalue -# 1410| getQualifier(): [Literal] 0 +# 1410| getArgument(0): [VariableAccess] p # 1410| Type = [Struct] Point -# 1410| Value = [Literal] 0 +# 1410| ValueCategory = lvalue +# 1410| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1410| Type = [LValueReferenceType] const Point & # 1410| ValueCategory = prvalue -# 1410| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 1410| Type = [Struct] Point -# 1410| ValueCategory = prvalue(load) -# 1411| getStmt(5): [DeclStmt] declaration -# 1411| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1411| Type = [IntType] int -# 1411| getVariable().getInitializer(): [Initializer] initializer for y -# 1411| getExpr(): [ValueFieldAccess] y -# 1411| Type = [IntType] int -# 1411| ValueCategory = prvalue -# 1411| getQualifier(): [FunctionCall] call to returnValue -# 1411| Type = [Struct] Point -# 1411| ValueCategory = prvalue -# 1413| getStmt(6): [ExprStmt] ExprStmt -# 1413| getExpr(): [FunctionCall] call to defaultConstruct -# 1413| Type = [Struct] Point -# 1413| ValueCategory = prvalue -# 1414| getStmt(7): [ReturnStmt] return ... -# 1416| [CopyAssignmentOperator] UnusualFields& UnusualFields::operator=(UnusualFields const&) -# 1416| : +# 1410| getExpr(): [CStyleCast] (const Point)... +# 1410| Conversion = [GlvalueConversion] glvalue conversion +# 1410| Type = [SpecifiedType] const Point +# 1410| ValueCategory = lvalue +# 1411| getStmt(3): [ExprStmt] ExprStmt +# 1411| getExpr(): [FunctionCall] call to acceptValue +# 1411| Type = [VoidType] void +# 1411| ValueCategory = prvalue +# 1411| getArgument(0): [VariableAccess] p +# 1411| Type = [Struct] Point +# 1411| ValueCategory = prvalue(load) +# 1412| getStmt(4): [ExprStmt] ExprStmt +# 1412| getExpr(): [ValueFieldAccess] x +# 1412| Type = [IntType] int +# 1412| Value = [ValueFieldAccess] 0 +# 1412| ValueCategory = prvalue +# 1412| getQualifier(): [Literal] 0 +# 1412| Type = [Struct] Point +# 1412| Value = [Literal] 0 +# 1412| ValueCategory = prvalue +# 1412| getQualifier().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1412| Type = [Struct] Point +# 1412| ValueCategory = prvalue(load) +# 1413| getStmt(5): [DeclStmt] declaration +# 1413| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1413| Type = [IntType] int +# 1413| getVariable().getInitializer(): [Initializer] initializer for y +# 1413| getExpr(): [ValueFieldAccess] y +# 1413| Type = [IntType] int +# 1413| ValueCategory = prvalue +# 1413| getQualifier(): [FunctionCall] call to returnValue +# 1413| Type = [Struct] Point +# 1413| ValueCategory = prvalue +# 1415| getStmt(6): [ExprStmt] ExprStmt +# 1415| getExpr(): [FunctionCall] call to defaultConstruct +# 1415| Type = [Struct] Point +# 1415| ValueCategory = prvalue +# 1416| getStmt(7): [ReturnStmt] return ... +# 1418| [CopyAssignmentOperator] UnusualFields& UnusualFields::operator=(UnusualFields const&) +# 1418| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1416| [Constructor] void UnusualFields::UnusualFields() -# 1416| : -# 1416| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) -# 1416| : +# 1418| [Constructor] void UnusualFields::UnusualFields() +# 1418| : +# 1418| [CopyConstructor] void UnusualFields::UnusualFields(UnusualFields const&) +# 1418| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const UnusualFields & -# 1416| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) -# 1416| : +# 1418| [MoveConstructor] void UnusualFields::UnusualFields(UnusualFields&&) +# 1418| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] UnusualFields && -# 1421| [TopLevelFunction] void temporary_unusual_fields() -# 1421| : -# 1421| getEntryPoint(): [BlockStmt] { ... } -# 1422| getStmt(0): [DeclStmt] declaration -# 1422| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx -# 1422| Type = [LValueReferenceType] const int & -# 1422| getVariable().getInitializer(): [Initializer] initializer for rx -# 1422| getExpr(): [ValueFieldAccess] r -# 1422| Type = [LValueReferenceType] int & -# 1422| ValueCategory = prvalue -# 1422| getQualifier(): [FunctionCall] call to returnValue -# 1422| Type = [Struct] UnusualFields -# 1422| ValueCategory = prvalue -# 1422| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1422| Type = [LValueReferenceType] const int & -# 1422| ValueCategory = prvalue -# 1422| getExpr(): [CStyleCast] (const int)... -# 1422| Conversion = [GlvalueConversion] glvalue conversion -# 1422| Type = [SpecifiedType] const int -# 1422| ValueCategory = lvalue -# 1422| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1422| Type = [IntType] int -# 1422| ValueCategory = lvalue -# 1423| getStmt(1): [DeclStmt] declaration -# 1423| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1423| Type = [IntType] int -# 1423| getVariable().getInitializer(): [Initializer] initializer for x -# 1423| getExpr(): [ValueFieldAccess] r -# 1423| Type = [LValueReferenceType] int & -# 1423| ValueCategory = prvalue -# 1423| getQualifier(): [FunctionCall] call to returnValue -# 1423| Type = [Struct] UnusualFields -# 1423| ValueCategory = prvalue -# 1423| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1423| Type = [IntType] int -# 1423| ValueCategory = prvalue(load) -# 1425| getStmt(2): [DeclStmt] declaration -# 1425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rf -# 1425| Type = [LValueReferenceType] const float & -# 1425| getVariable().getInitializer(): [Initializer] initializer for rf -# 1425| getExpr(): [ArrayExpr] access to array -# 1425| Type = [FloatType] float -# 1425| ValueCategory = lvalue -# 1425| getArrayBase(): [ValueFieldAccess] a -# 1425| Type = [ArrayType] float[10] -# 1425| ValueCategory = prvalue -# 1425| getQualifier(): [FunctionCall] call to returnValue -# 1425| Type = [Struct] UnusualFields -# 1425| ValueCategory = prvalue -# 1425| getArrayOffset(): [Literal] 3 -# 1425| Type = [IntType] int -# 1425| Value = [Literal] 3 -# 1425| ValueCategory = prvalue -# 1425| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1425| Type = [PointerType] float * -# 1425| ValueCategory = prvalue -# 1425| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1425| Type = [LValueReferenceType] const float & +# 1423| [TopLevelFunction] void temporary_unusual_fields() +# 1423| : +# 1423| getEntryPoint(): [BlockStmt] { ... } +# 1424| getStmt(0): [DeclStmt] declaration +# 1424| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx +# 1424| Type = [LValueReferenceType] const int & +# 1424| getVariable().getInitializer(): [Initializer] initializer for rx +# 1424| getExpr(): [ValueFieldAccess] r +# 1424| Type = [LValueReferenceType] int & +# 1424| ValueCategory = prvalue +# 1424| getQualifier(): [FunctionCall] call to returnValue +# 1424| Type = [Struct] UnusualFields +# 1424| ValueCategory = prvalue +# 1424| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1424| Type = [LValueReferenceType] const int & +# 1424| ValueCategory = prvalue +# 1424| getExpr(): [CStyleCast] (const int)... +# 1424| Conversion = [GlvalueConversion] glvalue conversion +# 1424| Type = [SpecifiedType] const int +# 1424| ValueCategory = lvalue +# 1424| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1424| Type = [IntType] int +# 1424| ValueCategory = lvalue +# 1425| getStmt(1): [DeclStmt] declaration +# 1425| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1425| Type = [IntType] int +# 1425| getVariable().getInitializer(): [Initializer] initializer for x +# 1425| getExpr(): [ValueFieldAccess] r +# 1425| Type = [LValueReferenceType] int & # 1425| ValueCategory = prvalue -# 1425| getExpr(): [CStyleCast] (const float)... -# 1425| Conversion = [GlvalueConversion] glvalue conversion -# 1425| Type = [SpecifiedType] const float -# 1425| ValueCategory = lvalue -# 1426| getStmt(3): [DeclStmt] declaration -# 1426| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f -# 1426| Type = [FloatType] float -# 1426| getVariable().getInitializer(): [Initializer] initializer for f -# 1426| getExpr(): [ArrayExpr] access to array -# 1426| Type = [FloatType] float -# 1426| ValueCategory = prvalue(load) -# 1426| getArrayBase(): [ValueFieldAccess] a -# 1426| Type = [ArrayType] float[10] -# 1426| ValueCategory = prvalue -# 1426| getQualifier(): [FunctionCall] call to returnValue -# 1426| Type = [Struct] UnusualFields -# 1426| ValueCategory = prvalue -# 1426| getArrayOffset(): [Literal] 5 -# 1426| Type = [IntType] int -# 1426| Value = [Literal] 5 -# 1426| ValueCategory = prvalue -# 1426| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1426| Type = [PointerType] float * -# 1426| ValueCategory = prvalue -# 1427| getStmt(4): [ReturnStmt] return ... -# 1429| [CopyAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base const&) -# 1429| : +# 1425| getQualifier(): [FunctionCall] call to returnValue +# 1425| Type = [Struct] UnusualFields +# 1425| ValueCategory = prvalue +# 1425| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1425| Type = [IntType] int +# 1425| ValueCategory = prvalue(load) +# 1427| getStmt(2): [DeclStmt] declaration +# 1427| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rf +# 1427| Type = [LValueReferenceType] const float & +# 1427| getVariable().getInitializer(): [Initializer] initializer for rf +# 1427| getExpr(): [ArrayExpr] access to array +# 1427| Type = [FloatType] float +# 1427| ValueCategory = lvalue +# 1427| getArrayBase(): [ValueFieldAccess] a +# 1427| Type = [ArrayType] float[10] +# 1427| ValueCategory = prvalue +# 1427| getQualifier(): [FunctionCall] call to returnValue +# 1427| Type = [Struct] UnusualFields +# 1427| ValueCategory = prvalue +# 1427| getArrayOffset(): [Literal] 3 +# 1427| Type = [IntType] int +# 1427| Value = [Literal] 3 +# 1427| ValueCategory = prvalue +# 1427| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1427| Type = [PointerType] float * +# 1427| ValueCategory = prvalue +# 1427| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1427| Type = [LValueReferenceType] const float & +# 1427| ValueCategory = prvalue +# 1427| getExpr(): [CStyleCast] (const float)... +# 1427| Conversion = [GlvalueConversion] glvalue conversion +# 1427| Type = [SpecifiedType] const float +# 1427| ValueCategory = lvalue +# 1428| getStmt(3): [DeclStmt] declaration +# 1428| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 1428| Type = [FloatType] float +# 1428| getVariable().getInitializer(): [Initializer] initializer for f +# 1428| getExpr(): [ArrayExpr] access to array +# 1428| Type = [FloatType] float +# 1428| ValueCategory = prvalue(load) +# 1428| getArrayBase(): [ValueFieldAccess] a +# 1428| Type = [ArrayType] float[10] +# 1428| ValueCategory = prvalue +# 1428| getQualifier(): [FunctionCall] call to returnValue +# 1428| Type = [Struct] UnusualFields +# 1428| ValueCategory = prvalue +# 1428| getArrayOffset(): [Literal] 5 +# 1428| Type = [IntType] int +# 1428| Value = [Literal] 5 +# 1428| ValueCategory = prvalue +# 1428| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1428| Type = [PointerType] float * +# 1428| ValueCategory = prvalue +# 1429| getStmt(4): [ReturnStmt] return ... +# 1431| [CopyAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base const&) +# 1431| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Base & -# 1429| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) -# 1429| : +# 1431| [MoveAssignmentOperator] POD_Base& POD_Base::operator=(POD_Base&&) +# 1431| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Base && -# 1432| [ConstMemberFunction] float POD_Base::f() const -# 1432| : -# 1435| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) -# 1435| : +# 1434| [ConstMemberFunction] float POD_Base::f() const +# 1434| : +# 1437| [CopyAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle const&) +# 1437| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Middle & -# 1435| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) -# 1435| : +# 1437| [MoveAssignmentOperator] POD_Middle& POD_Middle::operator=(POD_Middle&&) +# 1437| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Middle && -# 1435| [Constructor] void POD_Middle::POD_Middle() -# 1435| : -# 1439| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) -# 1439| : +# 1437| [Constructor] void POD_Middle::POD_Middle() +# 1437| : +# 1441| [CopyAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived const&) +# 1441| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const POD_Derived & -# 1439| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) -# 1439| : +# 1441| [MoveAssignmentOperator] POD_Derived& POD_Derived::operator=(POD_Derived&&) +# 1441| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] POD_Derived && -# 1439| [Constructor] void POD_Derived::POD_Derived() -# 1439| : -# 1443| [TopLevelFunction] void temporary_hierarchy() -# 1443| : -# 1443| getEntryPoint(): [BlockStmt] { ... } -# 1444| getStmt(0): [DeclStmt] declaration -# 1444| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1444| Type = [Struct] POD_Base -# 1444| getVariable().getInitializer(): [Initializer] initializer for b -# 1444| getExpr(): [FunctionCall] call to returnValue -# 1444| Type = [Struct] POD_Middle -# 1444| ValueCategory = prvalue +# 1441| [Constructor] void POD_Derived::POD_Derived() +# 1441| : +# 1445| [TopLevelFunction] void temporary_hierarchy() +# 1445| : +# 1445| getEntryPoint(): [BlockStmt] { ... } +# 1446| getStmt(0): [DeclStmt] declaration +# 1446| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1446| Type = [Struct] POD_Base +# 1446| getVariable().getInitializer(): [Initializer] initializer for b +# 1446| getExpr(): [FunctionCall] call to returnValue +# 1446| Type = [Struct] POD_Middle +# 1446| ValueCategory = prvalue #-----| getExpr().getFullyConverted(): [CStyleCast] (POD_Base)... #-----| Conversion = [BaseClassConversion] base class conversion #-----| Type = [Struct] POD_Base @@ -11513,40 +11666,40 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Middle #-----| ValueCategory = xvalue -# 1445| getStmt(1): [ExprStmt] ExprStmt -# 1445| getExpr(): [AssignExpr] ... = ... -# 1445| Type = [Struct] POD_Base -# 1445| ValueCategory = lvalue -# 1445| getLValue(): [VariableAccess] b -# 1445| Type = [Struct] POD_Base -# 1445| ValueCategory = lvalue -# 1445| getRValue(): [FunctionCall] call to returnValue -# 1445| Type = [Struct] POD_Derived -# 1445| ValueCategory = prvalue -# 1445| getRValue().getFullyConverted(): [CStyleCast] (POD_Base)... -# 1445| Conversion = [BaseClassConversion] base class conversion -# 1445| Type = [Struct] POD_Base -# 1445| ValueCategory = prvalue(load) -# 1445| getExpr(): [CStyleCast] (POD_Middle)... -# 1445| Conversion = [BaseClassConversion] base class conversion -# 1445| Type = [Struct] POD_Middle -# 1445| ValueCategory = lvalue -# 1445| getExpr(): [TemporaryObjectExpr] temporary object -# 1445| Type = [Struct] POD_Derived -# 1445| ValueCategory = lvalue -# 1445| getExpr(): [ParenthesisExpr] (...) -# 1445| Type = [Struct] POD_Derived -# 1445| ValueCategory = prvalue -# 1446| getStmt(2): [DeclStmt] declaration -# 1446| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1446| Type = [IntType] int -# 1446| getVariable().getInitializer(): [Initializer] initializer for x -# 1446| getExpr(): [ValueFieldAccess] x -# 1446| Type = [IntType] int -# 1446| ValueCategory = prvalue(load) -# 1446| getQualifier(): [FunctionCall] call to returnValue -# 1446| Type = [Struct] POD_Derived -# 1446| ValueCategory = prvalue +# 1447| getStmt(1): [ExprStmt] ExprStmt +# 1447| getExpr(): [AssignExpr] ... = ... +# 1447| Type = [Struct] POD_Base +# 1447| ValueCategory = lvalue +# 1447| getLValue(): [VariableAccess] b +# 1447| Type = [Struct] POD_Base +# 1447| ValueCategory = lvalue +# 1447| getRValue(): [FunctionCall] call to returnValue +# 1447| Type = [Struct] POD_Derived +# 1447| ValueCategory = prvalue +# 1447| getRValue().getFullyConverted(): [CStyleCast] (POD_Base)... +# 1447| Conversion = [BaseClassConversion] base class conversion +# 1447| Type = [Struct] POD_Base +# 1447| ValueCategory = prvalue(load) +# 1447| getExpr(): [CStyleCast] (POD_Middle)... +# 1447| Conversion = [BaseClassConversion] base class conversion +# 1447| Type = [Struct] POD_Middle +# 1447| ValueCategory = lvalue +# 1447| getExpr(): [TemporaryObjectExpr] temporary object +# 1447| Type = [Struct] POD_Derived +# 1447| ValueCategory = lvalue +# 1447| getExpr(): [ParenthesisExpr] (...) +# 1447| Type = [Struct] POD_Derived +# 1447| ValueCategory = prvalue +# 1448| getStmt(2): [DeclStmt] declaration +# 1448| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1448| Type = [IntType] int +# 1448| getVariable().getInitializer(): [Initializer] initializer for x +# 1448| getExpr(): [ValueFieldAccess] x +# 1448| Type = [IntType] int +# 1448| ValueCategory = prvalue(load) +# 1448| getQualifier(): [FunctionCall] call to returnValue +# 1448| Type = [Struct] POD_Derived +# 1448| ValueCategory = prvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (POD_Base)... #-----| Conversion = [BaseClassConversion] base class conversion #-----| Type = [Struct] POD_Base @@ -11558,16 +11711,16 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Derived #-----| ValueCategory = xvalue -# 1447| getStmt(3): [DeclStmt] declaration -# 1447| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f -# 1447| Type = [FloatType] float -# 1447| getVariable().getInitializer(): [Initializer] initializer for f -# 1447| getExpr(): [FunctionCall] call to f -# 1447| Type = [FloatType] float -# 1447| ValueCategory = prvalue -# 1447| getQualifier(): [FunctionCall] call to returnValue -# 1447| Type = [Struct] POD_Derived -# 1447| ValueCategory = prvalue +# 1449| getStmt(3): [DeclStmt] declaration +# 1449| getDeclarationEntry(0): [VariableDeclarationEntry] definition of f +# 1449| Type = [FloatType] float +# 1449| getVariable().getInitializer(): [Initializer] initializer for f +# 1449| getExpr(): [FunctionCall] call to f +# 1449| Type = [FloatType] float +# 1449| ValueCategory = prvalue +# 1449| getQualifier(): [FunctionCall] call to returnValue +# 1449| Type = [Struct] POD_Derived +# 1449| ValueCategory = prvalue #-----| getQualifier().getFullyConverted(): [CStyleCast] (const POD_Base)... #-----| Conversion = [GlvalueConversion] glvalue conversion #-----| Type = [SpecifiedType] const POD_Base @@ -11583,99 +11736,99 @@ ir.cpp: #-----| getExpr(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] POD_Derived #-----| ValueCategory = xvalue -# 1447| getExpr(): [ParenthesisExpr] (...) -# 1447| Type = [Struct] POD_Derived -# 1447| ValueCategory = prvalue -# 1448| getStmt(4): [ReturnStmt] return ... -# 1450| [CopyAssignmentOperator] Inheritance_Test_B& Inheritance_Test_B::operator=(Inheritance_Test_B const&) -# 1450| : +# 1449| getExpr(): [ParenthesisExpr] (...) +# 1449| Type = [Struct] POD_Derived +# 1449| ValueCategory = prvalue +# 1450| getStmt(4): [ReturnStmt] return ... +# 1452| [CopyAssignmentOperator] Inheritance_Test_B& Inheritance_Test_B::operator=(Inheritance_Test_B const&) +# 1452| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_B & -# 1450| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() -# 1450| : -# 1451| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() -# 1451| : -# 1451| getEntryPoint(): [BlockStmt] { ... } -# 1451| getStmt(0): [ReturnStmt] return ... -# 1451| : -# 1454| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) -# 1454| : +# 1452| [Constructor] void Inheritance_Test_B::Inheritance_Test_B() +# 1452| : +# 1453| [Destructor] void Inheritance_Test_B::~Inheritance_Test_B() +# 1453| : +# 1453| getEntryPoint(): [BlockStmt] { ... } +# 1453| getStmt(0): [ReturnStmt] return ... +# 1453| : +# 1456| [CopyAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A const&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_A & -# 1454| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) -# 1454| : +# 1456| [MoveAssignmentOperator] Inheritance_Test_A& Inheritance_Test_A::operator=(Inheritance_Test_A&&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Inheritance_Test_A && -# 1454| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) -# 1454| : +# 1456| [CopyConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A const&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Inheritance_Test_A & -# 1454| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) -# 1454| : +# 1456| [MoveConstructor] void Inheritance_Test_A::Inheritance_Test_A(Inheritance_Test_A&&) +# 1456| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Inheritance_Test_A && -# 1454| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() -# 1454| : -# 1457| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() -# 1457| : -# 1457| : -# 1457| getInitializer(0): (no string representation) -# 1457| Type = [Struct] Inheritance_Test_B -# 1457| ValueCategory = prvalue -# 1457| getInitializer(1): [ConstructorFieldInit] constructor init of field x -# 1457| Type = [IntType] int -# 1457| ValueCategory = prvalue -# 1457| getExpr(): [Literal] 42 -# 1457| Type = [IntType] int -# 1457| Value = [Literal] 42 -# 1457| ValueCategory = prvalue -# 1457| getEntryPoint(): [BlockStmt] { ... } -# 1458| getStmt(0): [ExprStmt] ExprStmt -# 1458| getExpr(): [AssignExpr] ... = ... -# 1458| Type = [IntType] int -# 1458| ValueCategory = lvalue -# 1458| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] y -# 1458| Type = [IntType] int -# 1458| ValueCategory = lvalue -# 1458| getQualifier(): [ThisExpr] this -# 1458| Type = [PointerType] Inheritance_Test_A * -# 1458| ValueCategory = prvalue(load) -# 1458| getRValue(): [Literal] 3 -# 1458| Type = [IntType] int -# 1458| Value = [Literal] 3 -# 1458| ValueCategory = prvalue -# 1459| getStmt(1): [ReturnStmt] return ... -# 1462| [TopLevelFunction] void array_structured_binding() -# 1462| : -# 1462| getEntryPoint(): [BlockStmt] { ... } -# 1463| getStmt(0): [DeclStmt] declaration -# 1463| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs -# 1463| Type = [ArrayType] int[2] -# 1463| getVariable().getInitializer(): [Initializer] initializer for xs -# 1463| getExpr(): [ArrayAggregateLiteral] {...} -# 1463| Type = [ArrayType] int[2] -# 1463| ValueCategory = prvalue -# 1463| getAnElementExpr(0): [Literal] 1 -# 1463| Type = [IntType] int -# 1463| Value = [Literal] 1 -# 1463| ValueCategory = prvalue -# 1463| getAnElementExpr(1): [Literal] 2 -# 1463| Type = [IntType] int -# 1463| Value = [Literal] 2 -# 1463| ValueCategory = prvalue -# 1465| getStmt(1): [BlockStmt] { ... } -# 1466| getStmt(0): [DeclStmt] declaration -# 1466| getDeclarationEntry(0): (no string representation) -# 1466| Type = [LValueReferenceType] int(&)[2] -# 1466| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1466| getExpr(): [VariableAccess] xs -# 1466| Type = [ArrayType] int[2] -# 1466| ValueCategory = lvalue -# 1466| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1466| Type = [LValueReferenceType] int(&)[2] -# 1466| ValueCategory = prvalue -# 1466| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 -# 1466| Type = [IntType] int +# 1456| [Destructor] void Inheritance_Test_A::~Inheritance_Test_A() +# 1456| : +# 1459| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() +# 1459| : +# 1459| : +# 1459| getInitializer(0): (no string representation) +# 1459| Type = [Struct] Inheritance_Test_B +# 1459| ValueCategory = prvalue +# 1459| getInitializer(1): [ConstructorFieldInit] constructor init of field x +# 1459| Type = [IntType] int +# 1459| ValueCategory = prvalue +# 1459| getExpr(): [Literal] 42 +# 1459| Type = [IntType] int +# 1459| Value = [Literal] 42 +# 1459| ValueCategory = prvalue +# 1459| getEntryPoint(): [BlockStmt] { ... } +# 1460| getStmt(0): [ExprStmt] ExprStmt +# 1460| getExpr(): [AssignExpr] ... = ... +# 1460| Type = [IntType] int +# 1460| ValueCategory = lvalue +# 1460| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] y +# 1460| Type = [IntType] int +# 1460| ValueCategory = lvalue +# 1460| getQualifier(): [ThisExpr] this +# 1460| Type = [PointerType] Inheritance_Test_A * +# 1460| ValueCategory = prvalue(load) +# 1460| getRValue(): [Literal] 3 +# 1460| Type = [IntType] int +# 1460| Value = [Literal] 3 +# 1460| ValueCategory = prvalue +# 1461| getStmt(1): [ReturnStmt] return ... +# 1464| [TopLevelFunction] void array_structured_binding() +# 1464| : +# 1464| getEntryPoint(): [BlockStmt] { ... } +# 1465| getStmt(0): [DeclStmt] declaration +# 1465| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs +# 1465| Type = [ArrayType] int[2] +# 1465| getVariable().getInitializer(): [Initializer] initializer for xs +# 1465| getExpr(): [ArrayAggregateLiteral] {...} +# 1465| Type = [ArrayType] int[2] +# 1465| ValueCategory = prvalue +# 1465| getAnElementExpr(0): [Literal] 1 +# 1465| Type = [IntType] int +# 1465| Value = [Literal] 1 +# 1465| ValueCategory = prvalue +# 1465| getAnElementExpr(1): [Literal] 2 +# 1465| Type = [IntType] int +# 1465| Value = [Literal] 2 +# 1465| ValueCategory = prvalue +# 1467| getStmt(1): [BlockStmt] { ... } +# 1468| getStmt(0): [DeclStmt] declaration +# 1468| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1468| Type = [LValueReferenceType] int(&)[2] +# 1468| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1468| getExpr(): [VariableAccess] xs +# 1468| Type = [ArrayType] int[2] +# 1468| ValueCategory = lvalue +# 1468| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1468| Type = [LValueReferenceType] int(&)[2] +# 1468| ValueCategory = prvalue +# 1468| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 +# 1468| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x0 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -11693,8 +11846,8 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ArrayType] int[2] #-----| ValueCategory = lvalue -# 1466| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 -# 1466| Type = [IntType] int +# 1468| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 +# 1468| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x1 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -11712,1345 +11865,1307 @@ ir.cpp: #-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [ArrayType] int[2] #-----| ValueCategory = lvalue -# 1467| getStmt(1): [ExprStmt] ExprStmt -# 1467| getExpr(): [AssignExpr] ... = ... -# 1467| Type = [IntType] int -# 1467| ValueCategory = lvalue -# 1467| getLValue(): [VariableAccess] x1 -# 1467| Type = [IntType] int -# 1467| ValueCategory = lvalue -# 1467| getRValue(): [Literal] 3 -# 1467| Type = [IntType] int -# 1467| Value = [Literal] 3 -# 1467| ValueCategory = prvalue -# 1468| getStmt(2): [DeclStmt] declaration -# 1468| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 -# 1468| Type = [LValueReferenceType] int & -# 1468| getVariable().getInitializer(): [Initializer] initializer for rx1 -# 1468| getExpr(): [VariableAccess] x1 -# 1468| Type = [IntType] int -# 1468| ValueCategory = lvalue -# 1468| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1468| Type = [LValueReferenceType] int & -# 1468| ValueCategory = prvalue -# 1469| getStmt(3): [DeclStmt] declaration -# 1469| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1469| getStmt(1): [ExprStmt] ExprStmt +# 1469| getExpr(): [AssignExpr] ... = ... # 1469| Type = [IntType] int -# 1469| getVariable().getInitializer(): [Initializer] initializer for x -# 1469| getExpr(): [VariableAccess] x1 -# 1469| Type = [IntType] int -# 1469| ValueCategory = prvalue(load) -# 1472| getStmt(2): [BlockStmt] { ... } -# 1473| getStmt(0): [DeclStmt] declaration -# 1473| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1473| Type = [LValueReferenceType] int(&)[2] -# 1473| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1473| getExpr(): [VariableAccess] xs -# 1473| Type = [ArrayType] int[2] -# 1473| ValueCategory = lvalue -# 1473| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1473| Type = [LValueReferenceType] int(&)[2] -# 1473| ValueCategory = prvalue -# 1474| getStmt(1): [DeclStmt] declaration -# 1474| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 -# 1474| Type = [LValueReferenceType] int & -# 1474| getVariable().getInitializer(): [Initializer] initializer for x0 -# 1474| getExpr(): [ArrayExpr] access to array -# 1474| Type = [IntType] int -# 1474| ValueCategory = lvalue -# 1474| getArrayBase(): [VariableAccess] unnamed_local_variable -# 1474| Type = [LValueReferenceType] int(&)[2] -# 1474| ValueCategory = prvalue(load) -# 1474| getArrayOffset(): [Literal] 0 -# 1474| Type = [IntType] int -# 1474| Value = [Literal] 0 -# 1474| ValueCategory = prvalue -# 1474| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1474| Type = [IntPointerType] int * -# 1474| ValueCategory = prvalue -# 1474| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1474| Type = [ArrayType] int[2] -# 1474| ValueCategory = lvalue -# 1474| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1474| Type = [LValueReferenceType] int & -# 1474| ValueCategory = prvalue -# 1475| getStmt(2): [DeclStmt] declaration -# 1475| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 -# 1475| Type = [LValueReferenceType] int & -# 1475| getVariable().getInitializer(): [Initializer] initializer for x1 -# 1475| getExpr(): [ArrayExpr] access to array -# 1475| Type = [IntType] int +# 1469| ValueCategory = lvalue +# 1469| getLValue(): [VariableAccess] x1 +# 1469| Type = [IntType] int +# 1469| ValueCategory = lvalue +# 1469| getRValue(): [Literal] 3 +# 1469| Type = [IntType] int +# 1469| Value = [Literal] 3 +# 1469| ValueCategory = prvalue +# 1470| getStmt(2): [DeclStmt] declaration +# 1470| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1470| Type = [LValueReferenceType] int & +# 1470| getVariable().getInitializer(): [Initializer] initializer for rx1 +# 1470| getExpr(): [VariableAccess] x1 +# 1470| Type = [IntType] int +# 1470| ValueCategory = lvalue +# 1470| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1470| Type = [LValueReferenceType] int & +# 1470| ValueCategory = prvalue +# 1471| getStmt(3): [DeclStmt] declaration +# 1471| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1471| Type = [IntType] int +# 1471| getVariable().getInitializer(): [Initializer] initializer for x +# 1471| getExpr(): [VariableAccess] x1 +# 1471| Type = [IntType] int +# 1471| ValueCategory = prvalue(load) +# 1474| getStmt(2): [BlockStmt] { ... } +# 1475| getStmt(0): [DeclStmt] declaration +# 1475| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1475| Type = [LValueReferenceType] int(&)[2] +# 1475| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1475| getExpr(): [VariableAccess] xs +# 1475| Type = [ArrayType] int[2] # 1475| ValueCategory = lvalue -# 1475| getArrayBase(): [VariableAccess] unnamed_local_variable -# 1475| Type = [LValueReferenceType] int(&)[2] -# 1475| ValueCategory = prvalue(load) -# 1475| getArrayOffset(): [Literal] 1 -# 1475| Type = [IntType] int -# 1475| Value = [Literal] 1 -# 1475| ValueCategory = prvalue -# 1475| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1475| Type = [IntPointerType] int * -# 1475| ValueCategory = prvalue -# 1475| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1475| Type = [ArrayType] int[2] -# 1475| ValueCategory = lvalue # 1475| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1475| Type = [LValueReferenceType] int & +# 1475| Type = [LValueReferenceType] int(&)[2] # 1475| ValueCategory = prvalue -# 1476| getStmt(3): [ExprStmt] ExprStmt -# 1476| getExpr(): [AssignExpr] ... = ... -# 1476| Type = [IntType] int -# 1476| ValueCategory = lvalue -# 1476| getLValue(): [VariableAccess] x1 -# 1476| Type = [LValueReferenceType] int & -# 1476| ValueCategory = prvalue(load) -# 1476| getRValue(): [Literal] 3 -# 1476| Type = [IntType] int -# 1476| Value = [Literal] 3 -# 1476| ValueCategory = prvalue -# 1476| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1476| Type = [IntType] int -# 1476| ValueCategory = lvalue -# 1477| getStmt(4): [DeclStmt] declaration -# 1477| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1476| getStmt(1): [DeclStmt] declaration +# 1476| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x0 +# 1476| Type = [LValueReferenceType] int & +# 1476| getVariable().getInitializer(): [Initializer] initializer for x0 +# 1476| getExpr(): [ArrayExpr] access to array +# 1476| Type = [IntType] int +# 1476| ValueCategory = lvalue +# 1476| getArrayBase(): [VariableAccess] unnamed_local_variable +# 1476| Type = [LValueReferenceType] int(&)[2] +# 1476| ValueCategory = prvalue(load) +# 1476| getArrayOffset(): [Literal] 0 +# 1476| Type = [IntType] int +# 1476| Value = [Literal] 0 +# 1476| ValueCategory = prvalue +# 1476| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1476| Type = [IntPointerType] int * +# 1476| ValueCategory = prvalue +# 1476| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1476| Type = [ArrayType] int[2] +# 1476| ValueCategory = lvalue +# 1476| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1476| Type = [LValueReferenceType] int & +# 1476| ValueCategory = prvalue +# 1477| getStmt(2): [DeclStmt] declaration +# 1477| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x1 # 1477| Type = [LValueReferenceType] int & -# 1477| getVariable().getInitializer(): [Initializer] initializer for rx1 -# 1477| getExpr(): [VariableAccess] x1 -# 1477| Type = [LValueReferenceType] int & -# 1477| ValueCategory = prvalue(load) +# 1477| getVariable().getInitializer(): [Initializer] initializer for x1 +# 1477| getExpr(): [ArrayExpr] access to array +# 1477| Type = [IntType] int +# 1477| ValueCategory = lvalue +# 1477| getArrayBase(): [VariableAccess] unnamed_local_variable +# 1477| Type = [LValueReferenceType] int(&)[2] +# 1477| ValueCategory = prvalue(load) +# 1477| getArrayOffset(): [Literal] 1 +# 1477| Type = [IntType] int +# 1477| Value = [Literal] 1 +# 1477| ValueCategory = prvalue +# 1477| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1477| Type = [IntPointerType] int * +# 1477| ValueCategory = prvalue +# 1477| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1477| Type = [ArrayType] int[2] +# 1477| ValueCategory = lvalue # 1477| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) # 1477| Type = [LValueReferenceType] int & # 1477| ValueCategory = prvalue -# 1477| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1477| Type = [IntType] int -# 1477| ValueCategory = lvalue -# 1478| getStmt(5): [DeclStmt] declaration -# 1478| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1478| getStmt(3): [ExprStmt] ExprStmt +# 1478| getExpr(): [AssignExpr] ... = ... # 1478| Type = [IntType] int -# 1478| getVariable().getInitializer(): [Initializer] initializer for x -# 1478| getExpr(): [VariableAccess] x1 -# 1478| Type = [LValueReferenceType] int & -# 1478| ValueCategory = prvalue(load) -# 1478| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1478| Type = [IntType] int -# 1478| ValueCategory = prvalue(load) -# 1480| getStmt(3): [ReturnStmt] return ... -# 1482| [CopyAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct const&) -# 1482| : +# 1478| ValueCategory = lvalue +# 1478| getLValue(): [VariableAccess] x1 +# 1478| Type = [LValueReferenceType] int & +# 1478| ValueCategory = prvalue(load) +# 1478| getRValue(): [Literal] 3 +# 1478| Type = [IntType] int +# 1478| Value = [Literal] 3 +# 1478| ValueCategory = prvalue +# 1478| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1478| Type = [IntType] int +# 1478| ValueCategory = lvalue +# 1479| getStmt(4): [DeclStmt] declaration +# 1479| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rx1 +# 1479| Type = [LValueReferenceType] int & +# 1479| getVariable().getInitializer(): [Initializer] initializer for rx1 +# 1479| getExpr(): [VariableAccess] x1 +# 1479| Type = [LValueReferenceType] int & +# 1479| ValueCategory = prvalue(load) +# 1479| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1479| Type = [LValueReferenceType] int & +# 1479| ValueCategory = prvalue +# 1479| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1479| Type = [IntType] int +# 1479| ValueCategory = lvalue +# 1480| getStmt(5): [DeclStmt] declaration +# 1480| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1480| Type = [IntType] int +# 1480| getVariable().getInitializer(): [Initializer] initializer for x +# 1480| getExpr(): [VariableAccess] x1 +# 1480| Type = [LValueReferenceType] int & +# 1480| ValueCategory = prvalue(load) +# 1480| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1480| Type = [IntType] int +# 1480| ValueCategory = prvalue(load) +# 1482| getStmt(3): [ReturnStmt] return ... +# 1484| [CopyAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct const&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1482| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) -# 1482| : +# 1484| [MoveAssignmentOperator] StructuredBindingDataMemberMemberStruct& StructuredBindingDataMemberMemberStruct::operator=(StructuredBindingDataMemberMemberStruct&&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1482| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1482| : -# 1482| : -# 1482| getInitializer(0): [ConstructorFieldInit] constructor init of field x -# 1482| Type = [IntType] int -# 1482| ValueCategory = prvalue -# 1482| getEntryPoint(): [BlockStmt] { ... } -# 1482| getStmt(0): [ReturnStmt] return ... -# 1482| [CopyConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct const&) -# 1482| : +# 1484| [Constructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1484| : +# 1484| : +# 1484| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 1484| Type = [IntType] int +# 1484| ValueCategory = prvalue +# 1484| getEntryPoint(): [BlockStmt] { ... } +# 1484| getStmt(0): [ReturnStmt] return ... +# 1484| [CopyConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct const&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberMemberStruct & -# 1482| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) -# 1482| : +# 1484| [MoveConstructor] void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct(StructuredBindingDataMemberMemberStruct&&) +# 1484| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberMemberStruct && -# 1486| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) -# 1486| : +# 1488| [CopyAssignmentOperator] StructuredBindingDataMemberStruct& StructuredBindingDataMemberStruct::operator=(StructuredBindingDataMemberStruct const&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1486| : -# 1486| : -# 1486| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1486| Type = [IntType] int -# 1486| ValueCategory = prvalue -# 1486| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1486| Type = [DoubleType] double -# 1486| ValueCategory = prvalue -# 1486| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1486| Type = [LValueReferenceType] int & -# 1486| ValueCategory = prvalue -# 1486| getInitializer(3): [ConstructorFieldInit] constructor init of field p -# 1486| Type = [IntPointerType] int * -# 1486| ValueCategory = prvalue -# 1486| getInitializer(4): [ConstructorFieldInit] constructor init of field xs -# 1486| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1486| ValueCategory = prvalue -# 1486| getInitializer(5): [ConstructorFieldInit] constructor init of field r_alt -# 1486| Type = [CTypedefType,NestedTypedefType] RefType -# 1486| ValueCategory = prvalue -# 1486| getInitializer(6): [ConstructorFieldInit] constructor init of field m -# 1486| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberMemberStruct -# 1486| Type = [VoidType] void -# 1486| ValueCategory = prvalue -# 1486| getEntryPoint(): [BlockStmt] { ... } -# 1486| getStmt(0): [ReturnStmt] return ... -# 1486| [CopyConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1486| : +# 1488| [Constructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1488| : +# 1488| : +# 1488| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1488| Type = [IntType] int +# 1488| ValueCategory = prvalue +# 1488| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1488| Type = [DoubleType] double +# 1488| ValueCategory = prvalue +# 1488| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1488| Type = [LValueReferenceType] int & +# 1488| ValueCategory = prvalue +# 1488| getInitializer(3): [ConstructorFieldInit] constructor init of field p +# 1488| Type = [IntPointerType] int * +# 1488| ValueCategory = prvalue +# 1488| getInitializer(4): [ConstructorFieldInit] constructor init of field xs +# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1488| ValueCategory = prvalue +# 1488| getInitializer(5): [ConstructorFieldInit] constructor init of field r_alt +# 1488| Type = [CTypedefType,NestedTypedefType] RefType +# 1488| ValueCategory = prvalue +# 1488| getInitializer(6): [ConstructorFieldInit] constructor init of field m +# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberMemberStruct +# 1488| Type = [VoidType] void +# 1488| ValueCategory = prvalue +# 1488| getEntryPoint(): [BlockStmt] { ... } +# 1488| getStmt(0): [ReturnStmt] return ... +# 1488| [CopyConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| : -# 1486| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1486| Type = [IntType] int -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] i -# 1486| Type = [IntType] int -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1486| Type = [DoubleType] double -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] d -# 1486| Type = [DoubleType] double -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(2): [ConstructorFieldInit] constructor init of field b -# 1486| Type = [IntType] unsigned int -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] b -# 1486| Type = [IntType] unsigned int -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(3): [ConstructorFieldInit] constructor init of field r -# 1486| Type = [LValueReferenceType] int & -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] r -# 1486| Type = [LValueReferenceType] int & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(4): [ConstructorFieldInit] constructor init of field p -# 1486| Type = [IntPointerType] int * -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] p -# 1486| Type = [IntPointerType] int * -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(5): [ConstructorFieldInit] constructor init of field xs -# 1486| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] xs -# 1486| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(6): [ConstructorFieldInit] constructor init of field r_alt -# 1486| Type = [CTypedefType,NestedTypedefType] RefType -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] r_alt -# 1486| Type = [CTypedefType,NestedTypedefType] RefType -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getInitializer(7): [ConstructorFieldInit] constructor init of field m -# 1486| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1486| ValueCategory = prvalue -# 1486| getExpr(): [ReferenceFieldAccess] m -# 1486| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1486| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & -# 1486| ValueCategory = prvalue(load) -# 1486| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1486| Type = [SpecifiedType] const StructuredBindingDataMemberStruct -# 1486| ValueCategory = lvalue -# 1486| getEntryPoint(): [BlockStmt] { ... } -# 1486| getStmt(0): [ReturnStmt] return ... -# 1486| [MoveConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct&&) -# 1486| : +# 1488| : +# 1488| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1488| Type = [IntType] int +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] i +# 1488| Type = [IntType] int +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1488| Type = [DoubleType] double +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] d +# 1488| Type = [DoubleType] double +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(2): [ConstructorFieldInit] constructor init of field b +# 1488| Type = [IntType] unsigned int +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] b +# 1488| Type = [IntType] unsigned int +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(3): [ConstructorFieldInit] constructor init of field r +# 1488| Type = [LValueReferenceType] int & +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] r +# 1488| Type = [LValueReferenceType] int & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(4): [ConstructorFieldInit] constructor init of field p +# 1488| Type = [IntPointerType] int * +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] p +# 1488| Type = [IntPointerType] int * +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(5): [ConstructorFieldInit] constructor init of field xs +# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] xs +# 1488| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(6): [ConstructorFieldInit] constructor init of field r_alt +# 1488| Type = [CTypedefType,NestedTypedefType] RefType +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] r_alt +# 1488| Type = [CTypedefType,NestedTypedefType] RefType +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getInitializer(7): [ConstructorFieldInit] constructor init of field m +# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1488| ValueCategory = prvalue +# 1488| getExpr(): [ReferenceFieldAccess] m +# 1488| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1488| Type = [LValueReferenceType] const StructuredBindingDataMemberStruct & +# 1488| ValueCategory = prvalue(load) +# 1488| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1488| Type = [SpecifiedType] const StructuredBindingDataMemberStruct +# 1488| ValueCategory = lvalue +# 1488| getEntryPoint(): [BlockStmt] { ... } +# 1488| getStmt(0): [ReturnStmt] return ... +# 1488| [MoveConstructor] void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct&&) +# 1488| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingDataMemberStruct && -# 1499| [TopLevelFunction] void data_member_structured_binding() -# 1499| : -# 1499| getEntryPoint(): [BlockStmt] { ... } -# 1500| getStmt(0): [DeclStmt] declaration -# 1500| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s -# 1500| Type = [Struct] StructuredBindingDataMemberStruct -# 1500| getVariable().getInitializer(): [Initializer] initializer for s -# 1500| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberStruct -# 1500| Type = [VoidType] void -# 1500| ValueCategory = prvalue -# 1502| getStmt(1): [BlockStmt] { ... } -# 1503| getStmt(0): [DeclStmt] declaration -# 1503| getDeclarationEntry(0): (no string representation) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1503| getExpr(): [VariableAccess] s -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = prvalue(load) -# 1503| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1503| Type = [IntType] int +# 1501| [TopLevelFunction] void data_member_structured_binding() +# 1501| : +# 1501| getEntryPoint(): [BlockStmt] { ... } +# 1502| getStmt(0): [DeclStmt] declaration +# 1502| getDeclarationEntry(0): [VariableDeclarationEntry] definition of s +# 1502| Type = [Struct] StructuredBindingDataMemberStruct +# 1502| getVariable().getInitializer(): [Initializer] initializer for s +# 1502| getExpr(): [ConstructorCall] call to StructuredBindingDataMemberStruct +# 1502| Type = [VoidType] void +# 1502| ValueCategory = prvalue +# 1504| getStmt(1): [BlockStmt] { ... } +# 1505| getStmt(0): [DeclStmt] declaration +# 1505| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1505| getExpr(): [VariableAccess] s +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = prvalue(load) +# 1505| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1505| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1503| getExpr(): [ValueFieldAccess] i -# 1503| Type = [IntType] int -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d -# 1503| Type = [DoubleType] double +# 1505| getExpr(): [ValueFieldAccess] i +# 1505| Type = [IntType] int +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d +# 1505| Type = [DoubleType] double #-----| getVariable().getInitializer(): [Initializer] initializer for d -# 1503| getExpr(): [ValueFieldAccess] d -# 1503| Type = [DoubleType] double -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(3): [VariableDeclarationEntry] definition of b -# 1503| Type = [IntType] unsigned int -#-----| getVariable().getInitializer(): [Initializer] initializer for b -# 1503| getExpr(): [ValueFieldAccess] b -# 1503| Type = [IntType] unsigned int -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(4): [VariableDeclarationEntry] definition of r -# 1503| Type = [IntType] int -#-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1503| getExpr(): [ValueFieldAccess] r -# 1503| Type = [LValueReferenceType] int & -# 1503| ValueCategory = prvalue(load) -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1503| Type = [IntType] int -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(5): [VariableDeclarationEntry] definition of p -# 1503| Type = [IntPointerType] int * -#-----| getVariable().getInitializer(): [Initializer] initializer for p -# 1503| getExpr(): [ValueFieldAccess] p -# 1503| Type = [IntPointerType] int * -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(6): [VariableDeclarationEntry] definition of xs -# 1503| Type = [CTypedefType,NestedTypedefType] ArrayType -#-----| getVariable().getInitializer(): [Initializer] initializer for xs -# 1503| getExpr(): [ValueFieldAccess] xs -# 1503| Type = [CTypedefType,NestedTypedefType] ArrayType -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(7): [VariableDeclarationEntry] definition of r_alt -# 1503| Type = [IntType] int -#-----| getVariable().getInitializer(): [Initializer] initializer for r_alt -# 1503| getExpr(): [ValueFieldAccess] r_alt -# 1503| Type = [CTypedefType,NestedTypedefType] RefType -# 1503| ValueCategory = prvalue(load) -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1503| Type = [IntType] int -# 1503| ValueCategory = lvalue -# 1503| getDeclarationEntry(8): [VariableDeclarationEntry] definition of m -# 1503| Type = [Struct] StructuredBindingDataMemberMemberStruct -#-----| getVariable().getInitializer(): [Initializer] initializer for m -# 1503| getExpr(): [ValueFieldAccess] m -# 1503| Type = [Struct] StructuredBindingDataMemberMemberStruct -# 1503| ValueCategory = lvalue -# 1503| getQualifier(): [VariableAccess] (unnamed local variable) -# 1503| Type = [Struct] StructuredBindingDataMemberStruct -# 1503| ValueCategory = lvalue -# 1504| getStmt(1): [ExprStmt] ExprStmt -# 1504| getExpr(): [AssignExpr] ... = ... -# 1504| Type = [DoubleType] double -# 1504| ValueCategory = lvalue -# 1504| getLValue(): [VariableAccess] d -# 1504| Type = [DoubleType] double -# 1504| ValueCategory = lvalue -# 1504| getRValue(): [Literal] 4.0 -# 1504| Type = [DoubleType] double -# 1504| Value = [Literal] 4.0 -# 1504| ValueCategory = prvalue -# 1505| getStmt(2): [DeclStmt] declaration -# 1505| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1505| Type = [LValueReferenceType] double & -# 1505| getVariable().getInitializer(): [Initializer] initializer for rd -# 1505| getExpr(): [VariableAccess] d +# 1505| getExpr(): [ValueFieldAccess] d # 1505| Type = [DoubleType] double # 1505| ValueCategory = lvalue -# 1505| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1505| Type = [LValueReferenceType] double & -# 1505| ValueCategory = prvalue -# 1506| getStmt(3): [DeclStmt] declaration -# 1506| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1506| Type = [IntType] int -# 1506| getVariable().getInitializer(): [Initializer] initializer for v -# 1506| getExpr(): [VariableAccess] i -# 1506| Type = [IntType] int -# 1506| ValueCategory = prvalue(load) -# 1507| getStmt(4): [ExprStmt] ExprStmt -# 1507| getExpr(): [AssignExpr] ... = ... -# 1507| Type = [IntType] int -# 1507| ValueCategory = lvalue -# 1507| getLValue(): [VariableAccess] r -# 1507| Type = [IntType] int -# 1507| ValueCategory = lvalue -# 1507| getRValue(): [Literal] 5 -# 1507| Type = [IntType] int -# 1507| Value = [Literal] 5 -# 1507| ValueCategory = prvalue -# 1508| getStmt(5): [ExprStmt] ExprStmt -# 1508| getExpr(): [AssignExpr] ... = ... +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(3): [VariableDeclarationEntry] definition of b +# 1505| Type = [IntType] unsigned int +#-----| getVariable().getInitializer(): [Initializer] initializer for b +# 1505| getExpr(): [ValueFieldAccess] b +# 1505| Type = [IntType] unsigned int +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(4): [VariableDeclarationEntry] definition of r +# 1505| Type = [IntType] int +#-----| getVariable().getInitializer(): [Initializer] initializer for r +# 1505| getExpr(): [ValueFieldAccess] r +# 1505| Type = [LValueReferenceType] int & +# 1505| ValueCategory = prvalue(load) +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1505| Type = [IntType] int +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(5): [VariableDeclarationEntry] definition of p +# 1505| Type = [IntPointerType] int * +#-----| getVariable().getInitializer(): [Initializer] initializer for p +# 1505| getExpr(): [ValueFieldAccess] p +# 1505| Type = [IntPointerType] int * +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(6): [VariableDeclarationEntry] definition of xs +# 1505| Type = [CTypedefType,NestedTypedefType] ArrayType +#-----| getVariable().getInitializer(): [Initializer] initializer for xs +# 1505| getExpr(): [ValueFieldAccess] xs +# 1505| Type = [CTypedefType,NestedTypedefType] ArrayType +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(7): [VariableDeclarationEntry] definition of r_alt +# 1505| Type = [IntType] int +#-----| getVariable().getInitializer(): [Initializer] initializer for r_alt +# 1505| getExpr(): [ValueFieldAccess] r_alt +# 1505| Type = [CTypedefType,NestedTypedefType] RefType +# 1505| ValueCategory = prvalue(load) +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1505| Type = [IntType] int +# 1505| ValueCategory = lvalue +# 1505| getDeclarationEntry(8): [VariableDeclarationEntry] definition of m +# 1505| Type = [Struct] StructuredBindingDataMemberMemberStruct +#-----| getVariable().getInitializer(): [Initializer] initializer for m +# 1505| getExpr(): [ValueFieldAccess] m +# 1505| Type = [Struct] StructuredBindingDataMemberMemberStruct +# 1505| ValueCategory = lvalue +# 1505| getQualifier(): [VariableAccess] (unnamed local variable) +# 1505| Type = [Struct] StructuredBindingDataMemberStruct +# 1505| ValueCategory = lvalue +# 1506| getStmt(1): [ExprStmt] ExprStmt +# 1506| getExpr(): [AssignExpr] ... = ... +# 1506| Type = [DoubleType] double +# 1506| ValueCategory = lvalue +# 1506| getLValue(): [VariableAccess] d +# 1506| Type = [DoubleType] double +# 1506| ValueCategory = lvalue +# 1506| getRValue(): [Literal] 4.0 +# 1506| Type = [DoubleType] double +# 1506| Value = [Literal] 4.0 +# 1506| ValueCategory = prvalue +# 1507| getStmt(2): [DeclStmt] declaration +# 1507| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1507| Type = [LValueReferenceType] double & +# 1507| getVariable().getInitializer(): [Initializer] initializer for rd +# 1507| getExpr(): [VariableAccess] d +# 1507| Type = [DoubleType] double +# 1507| ValueCategory = lvalue +# 1507| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1507| Type = [LValueReferenceType] double & +# 1507| ValueCategory = prvalue +# 1508| getStmt(3): [DeclStmt] declaration +# 1508| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v # 1508| Type = [IntType] int -# 1508| ValueCategory = lvalue -# 1508| getLValue(): [PointerDereferenceExpr] * ... -# 1508| Type = [IntType] int -# 1508| ValueCategory = lvalue -# 1508| getOperand(): [VariableAccess] p -# 1508| Type = [IntPointerType] int * +# 1508| getVariable().getInitializer(): [Initializer] initializer for v +# 1508| getExpr(): [VariableAccess] i +# 1508| Type = [IntType] int # 1508| ValueCategory = prvalue(load) -# 1508| getRValue(): [Literal] 6 -# 1508| Type = [IntType] int -# 1508| Value = [Literal] 6 -# 1508| ValueCategory = prvalue -# 1509| getStmt(6): [DeclStmt] declaration -# 1509| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1509| Type = [LValueReferenceType] int & -# 1509| getVariable().getInitializer(): [Initializer] initializer for rr -# 1509| getExpr(): [VariableAccess] r -# 1509| Type = [IntType] int -# 1509| ValueCategory = lvalue -# 1509| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1509| Type = [LValueReferenceType] int & -# 1509| ValueCategory = prvalue -# 1510| getStmt(7): [DeclStmt] declaration -# 1510| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr -# 1510| Type = [IntPointerType] int * -# 1510| getVariable().getInitializer(): [Initializer] initializer for pr -# 1510| getExpr(): [AddressOfExpr] & ... +# 1509| getStmt(4): [ExprStmt] ExprStmt +# 1509| getExpr(): [AssignExpr] ... = ... +# 1509| Type = [IntType] int +# 1509| ValueCategory = lvalue +# 1509| getLValue(): [VariableAccess] r +# 1509| Type = [IntType] int +# 1509| ValueCategory = lvalue +# 1509| getRValue(): [Literal] 5 +# 1509| Type = [IntType] int +# 1509| Value = [Literal] 5 +# 1509| ValueCategory = prvalue +# 1510| getStmt(5): [ExprStmt] ExprStmt +# 1510| getExpr(): [AssignExpr] ... = ... +# 1510| Type = [IntType] int +# 1510| ValueCategory = lvalue +# 1510| getLValue(): [PointerDereferenceExpr] * ... +# 1510| Type = [IntType] int +# 1510| ValueCategory = lvalue +# 1510| getOperand(): [VariableAccess] p # 1510| Type = [IntPointerType] int * -# 1510| ValueCategory = prvalue -# 1510| getOperand(): [VariableAccess] r -# 1510| Type = [IntType] int -# 1510| ValueCategory = lvalue -# 1511| getStmt(8): [DeclStmt] declaration -# 1511| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1511| Type = [IntType] int -# 1511| getVariable().getInitializer(): [Initializer] initializer for w +# 1510| ValueCategory = prvalue(load) +# 1510| getRValue(): [Literal] 6 +# 1510| Type = [IntType] int +# 1510| Value = [Literal] 6 +# 1510| ValueCategory = prvalue +# 1511| getStmt(6): [DeclStmt] declaration +# 1511| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1511| Type = [LValueReferenceType] int & +# 1511| getVariable().getInitializer(): [Initializer] initializer for rr # 1511| getExpr(): [VariableAccess] r # 1511| Type = [IntType] int -# 1511| ValueCategory = prvalue(load) -# 1514| getStmt(2): [BlockStmt] { ... } -# 1515| getStmt(0): [DeclStmt] declaration -# 1515| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1515| Type = [Struct] StructuredBindingDataMemberStruct -# 1515| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1515| getExpr(): [VariableAccess] s -# 1515| Type = [Struct] StructuredBindingDataMemberStruct -# 1515| ValueCategory = prvalue(load) -# 1516| getStmt(1): [DeclStmt] declaration -# 1516| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1516| Type = [LValueReferenceType] int & -# 1516| getVariable().getInitializer(): [Initializer] initializer for i -# 1516| getExpr(): [ValueFieldAccess] i -# 1516| Type = [IntType] int -# 1516| ValueCategory = lvalue -# 1516| getQualifier(): [VariableAccess] unnamed_local_variable -# 1516| Type = [Struct] StructuredBindingDataMemberStruct -# 1516| ValueCategory = lvalue -# 1516| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1516| Type = [LValueReferenceType] int & -# 1516| ValueCategory = prvalue -# 1517| getStmt(2): [DeclStmt] declaration -# 1517| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1517| Type = [LValueReferenceType] double & -# 1517| getVariable().getInitializer(): [Initializer] initializer for d -# 1517| getExpr(): [ValueFieldAccess] d -# 1517| Type = [DoubleType] double -# 1517| ValueCategory = lvalue -# 1517| getQualifier(): [VariableAccess] unnamed_local_variable -# 1517| Type = [Struct] StructuredBindingDataMemberStruct -# 1517| ValueCategory = lvalue -# 1517| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1517| Type = [LValueReferenceType] double & -# 1517| ValueCategory = prvalue -# 1519| getStmt(3): [DeclStmt] declaration -# 1519| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1519| Type = [LValueReferenceType] int & -# 1519| getVariable().getInitializer(): [Initializer] initializer for r -# 1519| getExpr(): [ValueFieldAccess] r -# 1519| Type = [LValueReferenceType] int & -# 1519| ValueCategory = prvalue(load) +# 1511| ValueCategory = lvalue +# 1511| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1511| Type = [LValueReferenceType] int & +# 1511| ValueCategory = prvalue +# 1512| getStmt(7): [DeclStmt] declaration +# 1512| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr +# 1512| Type = [IntPointerType] int * +# 1512| getVariable().getInitializer(): [Initializer] initializer for pr +# 1512| getExpr(): [AddressOfExpr] & ... +# 1512| Type = [IntPointerType] int * +# 1512| ValueCategory = prvalue +# 1512| getOperand(): [VariableAccess] r +# 1512| Type = [IntType] int +# 1512| ValueCategory = lvalue +# 1513| getStmt(8): [DeclStmt] declaration +# 1513| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1513| Type = [IntType] int +# 1513| getVariable().getInitializer(): [Initializer] initializer for w +# 1513| getExpr(): [VariableAccess] r +# 1513| Type = [IntType] int +# 1513| ValueCategory = prvalue(load) +# 1516| getStmt(2): [BlockStmt] { ... } +# 1517| getStmt(0): [DeclStmt] declaration +# 1517| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1517| Type = [Struct] StructuredBindingDataMemberStruct +# 1517| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1517| getExpr(): [VariableAccess] s +# 1517| Type = [Struct] StructuredBindingDataMemberStruct +# 1517| ValueCategory = prvalue(load) +# 1518| getStmt(1): [DeclStmt] declaration +# 1518| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1518| Type = [LValueReferenceType] int & +# 1518| getVariable().getInitializer(): [Initializer] initializer for i +# 1518| getExpr(): [ValueFieldAccess] i +# 1518| Type = [IntType] int +# 1518| ValueCategory = lvalue +# 1518| getQualifier(): [VariableAccess] unnamed_local_variable +# 1518| Type = [Struct] StructuredBindingDataMemberStruct +# 1518| ValueCategory = lvalue +# 1518| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1518| Type = [LValueReferenceType] int & +# 1518| ValueCategory = prvalue +# 1519| getStmt(2): [DeclStmt] declaration +# 1519| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1519| Type = [LValueReferenceType] double & +# 1519| getVariable().getInitializer(): [Initializer] initializer for d +# 1519| getExpr(): [ValueFieldAccess] d +# 1519| Type = [DoubleType] double +# 1519| ValueCategory = lvalue # 1519| getQualifier(): [VariableAccess] unnamed_local_variable # 1519| Type = [Struct] StructuredBindingDataMemberStruct # 1519| ValueCategory = lvalue # 1519| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1519| Type = [LValueReferenceType] int & +# 1519| Type = [LValueReferenceType] double & # 1519| ValueCategory = prvalue -# 1519| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1519| Type = [IntType] int -# 1519| ValueCategory = lvalue -# 1520| getStmt(4): [DeclStmt] declaration -# 1520| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p -# 1520| Type = [LValueReferenceType] int *& -# 1520| getVariable().getInitializer(): [Initializer] initializer for p -# 1520| getExpr(): [ValueFieldAccess] p -# 1520| Type = [IntPointerType] int * -# 1520| ValueCategory = lvalue -# 1520| getQualifier(): [VariableAccess] unnamed_local_variable -# 1520| Type = [Struct] StructuredBindingDataMemberStruct -# 1520| ValueCategory = lvalue -# 1520| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1520| Type = [LValueReferenceType] int *& -# 1520| ValueCategory = prvalue -# 1521| getStmt(5): [ExprStmt] ExprStmt -# 1521| getExpr(): [AssignExpr] ... = ... -# 1521| Type = [DoubleType] double -# 1521| ValueCategory = lvalue -# 1521| getLValue(): [VariableAccess] d -# 1521| Type = [LValueReferenceType] double & -# 1521| ValueCategory = prvalue(load) -# 1521| getRValue(): [Literal] 4.0 -# 1521| Type = [DoubleType] double -# 1521| Value = [Literal] 4.0 -# 1521| ValueCategory = prvalue -# 1521| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1521| Type = [DoubleType] double -# 1521| ValueCategory = lvalue -# 1522| getStmt(6): [DeclStmt] declaration -# 1522| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1522| Type = [LValueReferenceType] double & -# 1522| getVariable().getInitializer(): [Initializer] initializer for rd -# 1522| getExpr(): [VariableAccess] d -# 1522| Type = [LValueReferenceType] double & -# 1522| ValueCategory = prvalue(load) -# 1522| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1522| Type = [LValueReferenceType] double & -# 1522| ValueCategory = prvalue -# 1522| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1522| Type = [DoubleType] double +# 1521| getStmt(3): [DeclStmt] declaration +# 1521| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1521| Type = [LValueReferenceType] int & +# 1521| getVariable().getInitializer(): [Initializer] initializer for r +# 1521| getExpr(): [ValueFieldAccess] r +# 1521| Type = [LValueReferenceType] int & +# 1521| ValueCategory = prvalue(load) +# 1521| getQualifier(): [VariableAccess] unnamed_local_variable +# 1521| Type = [Struct] StructuredBindingDataMemberStruct +# 1521| ValueCategory = lvalue +# 1521| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1521| Type = [LValueReferenceType] int & +# 1521| ValueCategory = prvalue +# 1521| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1521| Type = [IntType] int +# 1521| ValueCategory = lvalue +# 1522| getStmt(4): [DeclStmt] declaration +# 1522| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p +# 1522| Type = [LValueReferenceType] int *& +# 1522| getVariable().getInitializer(): [Initializer] initializer for p +# 1522| getExpr(): [ValueFieldAccess] p +# 1522| Type = [IntPointerType] int * +# 1522| ValueCategory = lvalue +# 1522| getQualifier(): [VariableAccess] unnamed_local_variable +# 1522| Type = [Struct] StructuredBindingDataMemberStruct # 1522| ValueCategory = lvalue -# 1523| getStmt(7): [DeclStmt] declaration -# 1523| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1523| Type = [IntType] int -# 1523| getVariable().getInitializer(): [Initializer] initializer for v -# 1523| getExpr(): [VariableAccess] i -# 1523| Type = [LValueReferenceType] int & -# 1523| ValueCategory = prvalue(load) -# 1523| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1523| Type = [IntType] int -# 1523| ValueCategory = prvalue(load) -# 1524| getStmt(8): [ExprStmt] ExprStmt -# 1524| getExpr(): [AssignExpr] ... = ... -# 1524| Type = [IntType] int -# 1524| ValueCategory = lvalue -# 1524| getLValue(): [VariableAccess] r -# 1524| Type = [LValueReferenceType] int & -# 1524| ValueCategory = prvalue(load) -# 1524| getRValue(): [Literal] 5 -# 1524| Type = [IntType] int -# 1524| Value = [Literal] 5 -# 1524| ValueCategory = prvalue -# 1524| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1524| Type = [IntType] int -# 1524| ValueCategory = lvalue -# 1525| getStmt(9): [ExprStmt] ExprStmt -# 1525| getExpr(): [AssignExpr] ... = ... +# 1522| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1522| Type = [LValueReferenceType] int *& +# 1522| ValueCategory = prvalue +# 1523| getStmt(5): [ExprStmt] ExprStmt +# 1523| getExpr(): [AssignExpr] ... = ... +# 1523| Type = [DoubleType] double +# 1523| ValueCategory = lvalue +# 1523| getLValue(): [VariableAccess] d +# 1523| Type = [LValueReferenceType] double & +# 1523| ValueCategory = prvalue(load) +# 1523| getRValue(): [Literal] 4.0 +# 1523| Type = [DoubleType] double +# 1523| Value = [Literal] 4.0 +# 1523| ValueCategory = prvalue +# 1523| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1523| Type = [DoubleType] double +# 1523| ValueCategory = lvalue +# 1524| getStmt(6): [DeclStmt] declaration +# 1524| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1524| Type = [LValueReferenceType] double & +# 1524| getVariable().getInitializer(): [Initializer] initializer for rd +# 1524| getExpr(): [VariableAccess] d +# 1524| Type = [LValueReferenceType] double & +# 1524| ValueCategory = prvalue(load) +# 1524| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1524| Type = [LValueReferenceType] double & +# 1524| ValueCategory = prvalue +# 1524| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1524| Type = [DoubleType] double +# 1524| ValueCategory = lvalue +# 1525| getStmt(7): [DeclStmt] declaration +# 1525| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v # 1525| Type = [IntType] int -# 1525| ValueCategory = lvalue -# 1525| getLValue(): [PointerDereferenceExpr] * ... -# 1525| Type = [IntType] int -# 1525| ValueCategory = lvalue -# 1525| getOperand(): [VariableAccess] p -# 1525| Type = [LValueReferenceType] int *& +# 1525| getVariable().getInitializer(): [Initializer] initializer for v +# 1525| getExpr(): [VariableAccess] i +# 1525| Type = [LValueReferenceType] int & # 1525| ValueCategory = prvalue(load) -# 1525| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1525| Type = [IntPointerType] int * +# 1525| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1525| Type = [IntType] int # 1525| ValueCategory = prvalue(load) -# 1525| getRValue(): [Literal] 6 -# 1525| Type = [IntType] int -# 1525| Value = [Literal] 6 -# 1525| ValueCategory = prvalue -# 1526| getStmt(10): [DeclStmt] declaration -# 1526| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1526| Type = [LValueReferenceType] int & -# 1526| getVariable().getInitializer(): [Initializer] initializer for rr -# 1526| getExpr(): [VariableAccess] r -# 1526| Type = [LValueReferenceType] int & -# 1526| ValueCategory = prvalue(load) -# 1526| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1526| Type = [LValueReferenceType] int & -# 1526| ValueCategory = prvalue -# 1526| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1526| Type = [IntType] int -# 1526| ValueCategory = lvalue -# 1527| getStmt(11): [DeclStmt] declaration -# 1527| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr -# 1527| Type = [IntPointerType] int * -# 1527| getVariable().getInitializer(): [Initializer] initializer for pr -# 1527| getExpr(): [AddressOfExpr] & ... +# 1526| getStmt(8): [ExprStmt] ExprStmt +# 1526| getExpr(): [AssignExpr] ... = ... +# 1526| Type = [IntType] int +# 1526| ValueCategory = lvalue +# 1526| getLValue(): [VariableAccess] r +# 1526| Type = [LValueReferenceType] int & +# 1526| ValueCategory = prvalue(load) +# 1526| getRValue(): [Literal] 5 +# 1526| Type = [IntType] int +# 1526| Value = [Literal] 5 +# 1526| ValueCategory = prvalue +# 1526| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1526| Type = [IntType] int +# 1526| ValueCategory = lvalue +# 1527| getStmt(9): [ExprStmt] ExprStmt +# 1527| getExpr(): [AssignExpr] ... = ... +# 1527| Type = [IntType] int +# 1527| ValueCategory = lvalue +# 1527| getLValue(): [PointerDereferenceExpr] * ... +# 1527| Type = [IntType] int +# 1527| ValueCategory = lvalue +# 1527| getOperand(): [VariableAccess] p +# 1527| Type = [LValueReferenceType] int *& +# 1527| ValueCategory = prvalue(load) +# 1527| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1527| Type = [IntPointerType] int * -# 1527| ValueCategory = prvalue -# 1527| getOperand(): [VariableAccess] r -# 1527| Type = [LValueReferenceType] int & -# 1527| ValueCategory = prvalue(load) -# 1527| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1527| Type = [IntType] int -# 1527| ValueCategory = lvalue -# 1528| getStmt(12): [DeclStmt] declaration -# 1528| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1528| Type = [IntType] int -# 1528| getVariable().getInitializer(): [Initializer] initializer for w +# 1527| ValueCategory = prvalue(load) +# 1527| getRValue(): [Literal] 6 +# 1527| Type = [IntType] int +# 1527| Value = [Literal] 6 +# 1527| ValueCategory = prvalue +# 1528| getStmt(10): [DeclStmt] declaration +# 1528| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1528| Type = [LValueReferenceType] int & +# 1528| getVariable().getInitializer(): [Initializer] initializer for rr # 1528| getExpr(): [VariableAccess] r # 1528| Type = [LValueReferenceType] int & # 1528| ValueCategory = prvalue(load) -# 1528| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1528| Type = [IntType] int -# 1528| ValueCategory = prvalue(load) -# 1530| getStmt(3): [ReturnStmt] return ... -# 1539| [CopyAssignmentOperator] StructuredBindingTupleRefGet& StructuredBindingTupleRefGet::operator=(StructuredBindingTupleRefGet const&) -# 1539| : +# 1528| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1528| Type = [LValueReferenceType] int & +# 1528| ValueCategory = prvalue +# 1528| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1528| Type = [IntType] int +# 1528| ValueCategory = lvalue +# 1529| getStmt(11): [DeclStmt] declaration +# 1529| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pr +# 1529| Type = [IntPointerType] int * +# 1529| getVariable().getInitializer(): [Initializer] initializer for pr +# 1529| getExpr(): [AddressOfExpr] & ... +# 1529| Type = [IntPointerType] int * +# 1529| ValueCategory = prvalue +# 1529| getOperand(): [VariableAccess] r +# 1529| Type = [LValueReferenceType] int & +# 1529| ValueCategory = prvalue(load) +# 1529| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1529| Type = [IntType] int +# 1529| ValueCategory = lvalue +# 1530| getStmt(12): [DeclStmt] declaration +# 1530| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1530| Type = [IntType] int +# 1530| getVariable().getInitializer(): [Initializer] initializer for w +# 1530| getExpr(): [VariableAccess] r +# 1530| Type = [LValueReferenceType] int & +# 1530| ValueCategory = prvalue(load) +# 1530| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1530| Type = [IntType] int +# 1530| ValueCategory = prvalue(load) +# 1532| getStmt(3): [ReturnStmt] return ... +# 1541| [CopyAssignmentOperator] StructuredBindingTupleRefGet& StructuredBindingTupleRefGet::operator=(StructuredBindingTupleRefGet const&) +# 1541| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1539| : -# 1539| : -# 1539| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1539| Type = [IntType] int -# 1539| ValueCategory = prvalue -# 1539| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1539| Type = [DoubleType] double -# 1539| ValueCategory = prvalue -# 1539| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1539| Type = [LValueReferenceType] int & -# 1539| ValueCategory = prvalue -# 1539| getEntryPoint(): [BlockStmt] { ... } -# 1539| getStmt(0): [ReturnStmt] return ... -# 1539| [CopyConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1539| : +# 1541| [Constructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1541| : +# 1541| : +# 1541| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1541| Type = [IntType] int +# 1541| ValueCategory = prvalue +# 1541| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1541| Type = [DoubleType] double +# 1541| ValueCategory = prvalue +# 1541| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1541| Type = [LValueReferenceType] int & +# 1541| ValueCategory = prvalue +# 1541| getEntryPoint(): [BlockStmt] { ... } +# 1541| getStmt(0): [ReturnStmt] return ... +# 1541| [CopyConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1541| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| : -# 1539| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1539| Type = [IntType] int -# 1539| ValueCategory = prvalue -# 1539| getExpr(): [ReferenceFieldAccess] i -# 1539| Type = [IntType] int -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1539| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1539| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1539| ValueCategory = lvalue -# 1539| getInitializer(1): [ConstructorFieldInit] constructor init of field d -# 1539| Type = [DoubleType] double -# 1539| ValueCategory = prvalue -# 1539| getExpr(): [ReferenceFieldAccess] d -# 1539| Type = [DoubleType] double -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1539| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1539| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1539| ValueCategory = lvalue -# 1539| getInitializer(2): [ConstructorFieldInit] constructor init of field r -# 1539| Type = [LValueReferenceType] int & -# 1539| ValueCategory = prvalue -# 1539| getExpr(): [ReferenceFieldAccess] r -# 1539| Type = [LValueReferenceType] int & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier(): [VariableAccess] (unnamed parameter 0) -# 1539| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & -# 1539| ValueCategory = prvalue(load) -# 1539| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1539| Type = [SpecifiedType] const StructuredBindingTupleRefGet -# 1539| ValueCategory = lvalue -# 1539| getEntryPoint(): [BlockStmt] { ... } -# 1539| getStmt(0): [ReturnStmt] return ... -# 1539| [MoveConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet&&) -# 1539| : +# 1541| : +# 1541| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1541| Type = [IntType] int +# 1541| ValueCategory = prvalue +# 1541| getExpr(): [ReferenceFieldAccess] i +# 1541| Type = [IntType] int +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1541| ValueCategory = lvalue +# 1541| getInitializer(1): [ConstructorFieldInit] constructor init of field d +# 1541| Type = [DoubleType] double +# 1541| ValueCategory = prvalue +# 1541| getExpr(): [ReferenceFieldAccess] d +# 1541| Type = [DoubleType] double +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1541| ValueCategory = lvalue +# 1541| getInitializer(2): [ConstructorFieldInit] constructor init of field r +# 1541| Type = [LValueReferenceType] int & +# 1541| ValueCategory = prvalue +# 1541| getExpr(): [ReferenceFieldAccess] r +# 1541| Type = [LValueReferenceType] int & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 1541| Type = [LValueReferenceType] const StructuredBindingTupleRefGet & +# 1541| ValueCategory = prvalue(load) +# 1541| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1541| Type = [SpecifiedType] const StructuredBindingTupleRefGet +# 1541| ValueCategory = lvalue +# 1541| getEntryPoint(): [BlockStmt] { ... } +# 1541| getStmt(0): [ReturnStmt] return ... +# 1541| [MoveConstructor] void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet&&) +# 1541| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleRefGet && -# 1545| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get() -# 1545| : -# 1549| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) -# 1549| : +# 1547| [MemberFunction,TemplateFunction] type& StructuredBindingTupleRefGet::get() +# 1547| : +# 1551| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) +# 1551| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size & -# 1549| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) -# 1549| : +# 1551| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) +# 1551| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size && -# 1554| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1554| : +# 1556| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1556| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleRefGet> & -# 1554| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1554| : +# 1556| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1556| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleRefGet> && -# 1558| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1558| : +# 1560| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1560| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleRefGet> & -# 1558| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1558| : +# 1560| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1560| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleRefGet> && -# 1562| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1562| : +# 1564| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1564| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleRefGet> & -# 1562| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1562| : +# 1564| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1564| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleRefGet> && -# 1567| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1567| : -# 1567| getEntryPoint(): [BlockStmt] { ... } -# 1568| getStmt(0): [ReturnStmt] return ... -# 1568| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i -# 1568| Type = [IntType] int -# 1568| ValueCategory = lvalue -# 1568| getQualifier(): [ThisExpr] this -# 1568| Type = [PointerType] StructuredBindingTupleRefGet * -# 1568| ValueCategory = prvalue(load) +# 1569| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1569| : +# 1569| getEntryPoint(): [BlockStmt] { ... } +# 1570| getStmt(0): [ReturnStmt] return ... +# 1570| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i +# 1570| Type = [IntType] int +# 1570| ValueCategory = lvalue +# 1570| getQualifier(): [ThisExpr] this +# 1570| Type = [PointerType] StructuredBindingTupleRefGet * +# 1570| ValueCategory = prvalue(load) #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] int & #-----| ValueCategory = prvalue -# 1571| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1571| : -# 1571| getEntryPoint(): [BlockStmt] { ... } -# 1572| getStmt(0): [ReturnStmt] return ... -# 1572| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] d -# 1572| Type = [DoubleType] double -# 1572| ValueCategory = lvalue -# 1572| getQualifier(): [ThisExpr] this -# 1572| Type = [PointerType] StructuredBindingTupleRefGet * -# 1572| ValueCategory = prvalue(load) +# 1573| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1573| : +# 1573| getEntryPoint(): [BlockStmt] { ... } +# 1574| getStmt(0): [ReturnStmt] return ... +# 1574| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] d +# 1574| Type = [DoubleType] double +# 1574| ValueCategory = lvalue +# 1574| getQualifier(): [ThisExpr] this +# 1574| Type = [PointerType] StructuredBindingTupleRefGet * +# 1574| ValueCategory = prvalue(load) #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] double & #-----| ValueCategory = prvalue -# 1575| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1575| : -# 1575| getEntryPoint(): [BlockStmt] { ... } -# 1576| getStmt(0): [ReturnStmt] return ... -# 1576| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r -# 1576| Type = [LValueReferenceType] int & -# 1576| ValueCategory = prvalue(load) -# 1576| getQualifier(): [ThisExpr] this -# 1576| Type = [PointerType] StructuredBindingTupleRefGet * -# 1576| ValueCategory = prvalue(load) -# 1576| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1576| Type = [LValueReferenceType] int & -# 1576| ValueCategory = prvalue -# 1576| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1576| Type = [IntType] int -# 1576| ValueCategory = lvalue -# 1579| [TopLevelFunction] void tuple_structured_binding_ref_get() -# 1579| : -# 1579| getEntryPoint(): [BlockStmt] { ... } -# 1580| getStmt(0): [DeclStmt] declaration -# 1580| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t -# 1580| Type = [Struct] StructuredBindingTupleRefGet -# 1580| getVariable().getInitializer(): [Initializer] initializer for t -# 1580| getExpr(): [ConstructorCall] call to StructuredBindingTupleRefGet -# 1580| Type = [VoidType] void -# 1580| ValueCategory = prvalue -# 1582| getStmt(1): [BlockStmt] { ... } -# 1583| getStmt(0): [DeclStmt] declaration -# 1583| getDeclarationEntry(0): (no string representation) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1583| getExpr(): [VariableAccess] t -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = prvalue(load) -# 1583| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1583| Type = [LValueReferenceType] type & -#-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1583| getExpr(): [FunctionCall] call to get -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getQualifier(): [VariableAccess] (unnamed local variable) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = xvalue -# 1583| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1583| ValueCategory = lvalue -# 1583| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d -# 1583| Type = [LValueReferenceType] type & -#-----| getVariable().getInitializer(): [Initializer] initializer for d -# 1583| getExpr(): [FunctionCall] call to get -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getQualifier(): [VariableAccess] (unnamed local variable) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = xvalue -# 1583| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1583| Type = [LValueReferenceType] type & -# 1583| ValueCategory = prvalue -# 1583| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1583| ValueCategory = lvalue -# 1583| getDeclarationEntry(3): [VariableDeclarationEntry] definition of r -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -#-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1583| getExpr(): [FunctionCall] call to get -# 1583| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1583| ValueCategory = prvalue -# 1583| getQualifier(): [VariableAccess] (unnamed local variable) -# 1583| Type = [Struct] StructuredBindingTupleRefGet -# 1583| ValueCategory = xvalue -# 1583| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1583| Type = [LValueReferenceType] int & -# 1583| ValueCategory = prvalue -# 1583| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1583| Type = [IntType] int -# 1583| ValueCategory = lvalue -# 1584| getStmt(1): [ExprStmt] ExprStmt -# 1584| getExpr(): [AssignExpr] ... = ... -# 1584| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1584| ValueCategory = lvalue -# 1584| getLValue(): [VariableAccess] d -# 1584| Type = [LValueReferenceType] type & -# 1584| ValueCategory = prvalue(load) -# 1584| getRValue(): [Literal] 4.0 -# 1584| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1584| Value = [Literal] 4.0 -# 1584| ValueCategory = prvalue -# 1584| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1584| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1584| ValueCategory = lvalue -# 1585| getStmt(2): [DeclStmt] declaration -# 1585| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1585| Type = [LValueReferenceType] double & -# 1585| getVariable().getInitializer(): [Initializer] initializer for rd -# 1585| getExpr(): [VariableAccess] d -# 1585| Type = [LValueReferenceType] type & +# 1577| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1577| : +# 1577| getEntryPoint(): [BlockStmt] { ... } +# 1578| getStmt(0): [ReturnStmt] return ... +# 1578| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r +# 1578| Type = [LValueReferenceType] int & +# 1578| ValueCategory = prvalue(load) +# 1578| getQualifier(): [ThisExpr] this +# 1578| Type = [PointerType] StructuredBindingTupleRefGet * +# 1578| ValueCategory = prvalue(load) +# 1578| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1578| Type = [LValueReferenceType] int & +# 1578| ValueCategory = prvalue +# 1578| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1578| Type = [IntType] int +# 1578| ValueCategory = lvalue +# 1581| [TopLevelFunction] void tuple_structured_binding_ref_get() +# 1581| : +# 1581| getEntryPoint(): [BlockStmt] { ... } +# 1582| getStmt(0): [DeclStmt] declaration +# 1582| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 1582| Type = [Struct] StructuredBindingTupleRefGet +# 1582| getVariable().getInitializer(): [Initializer] initializer for t +# 1582| getExpr(): [ConstructorCall] call to StructuredBindingTupleRefGet +# 1582| Type = [VoidType] void +# 1582| ValueCategory = prvalue +# 1584| getStmt(1): [BlockStmt] { ... } +# 1585| getStmt(0): [DeclStmt] declaration +# 1585| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1585| getExpr(): [VariableAccess] t +# 1585| Type = [Struct] StructuredBindingTupleRefGet # 1585| ValueCategory = prvalue(load) +# 1585| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1585| Type = [LValueReferenceType] type & +#-----| getVariable().getInitializer(): [Initializer] initializer for i +# 1585| getExpr(): [FunctionCall] call to get +# 1585| Type = [LValueReferenceType] type & +# 1585| ValueCategory = prvalue +# 1585| getQualifier(): [VariableAccess] (unnamed local variable) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| ValueCategory = xvalue # 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) # 1585| Type = [LValueReferenceType] type & # 1585| ValueCategory = prvalue # 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) # 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1585| ValueCategory = lvalue -# 1586| getStmt(3): [DeclStmt] declaration -# 1586| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1586| Type = [IntType] int -# 1586| getVariable().getInitializer(): [Initializer] initializer for v -# 1586| getExpr(): [VariableAccess] i -# 1586| Type = [LValueReferenceType] type & -# 1586| ValueCategory = prvalue(load) -# 1586| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1586| ValueCategory = prvalue(load) -# 1587| getStmt(4): [ExprStmt] ExprStmt -# 1587| getExpr(): [AssignExpr] ... = ... -# 1587| Type = [IntType] int -# 1587| ValueCategory = lvalue -# 1587| getLValue(): [VariableAccess] r -# 1587| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1587| ValueCategory = prvalue(load) -# 1587| getRValue(): [Literal] 5 -# 1587| Type = [IntType] int -# 1587| Value = [Literal] 5 -# 1587| ValueCategory = prvalue -# 1587| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1587| Type = [IntType] int -# 1587| ValueCategory = lvalue -# 1588| getStmt(5): [DeclStmt] declaration -# 1588| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1588| Type = [LValueReferenceType] int & -# 1588| getVariable().getInitializer(): [Initializer] initializer for rr -# 1588| getExpr(): [VariableAccess] r +# 1585| getDeclarationEntry(2): [VariableDeclarationEntry] definition of d +# 1585| Type = [LValueReferenceType] type & +#-----| getVariable().getInitializer(): [Initializer] initializer for d +# 1585| getExpr(): [FunctionCall] call to get +# 1585| Type = [LValueReferenceType] type & +# 1585| ValueCategory = prvalue +# 1585| getQualifier(): [VariableAccess] (unnamed local variable) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| ValueCategory = xvalue +# 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1585| Type = [LValueReferenceType] type & +# 1585| ValueCategory = prvalue +# 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1585| ValueCategory = lvalue +# 1585| getDeclarationEntry(3): [VariableDeclarationEntry] definition of r +# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type +#-----| getVariable().getInitializer(): [Initializer] initializer for r +# 1585| getExpr(): [FunctionCall] call to get +# 1585| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1585| ValueCategory = prvalue +# 1585| getQualifier(): [VariableAccess] (unnamed local variable) +# 1585| Type = [Struct] StructuredBindingTupleRefGet +# 1585| ValueCategory = xvalue +# 1585| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1585| Type = [LValueReferenceType] int & +# 1585| ValueCategory = prvalue +# 1585| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1585| Type = [IntType] int +# 1585| ValueCategory = lvalue +# 1586| getStmt(1): [ExprStmt] ExprStmt +# 1586| getExpr(): [AssignExpr] ... = ... +# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1586| ValueCategory = lvalue +# 1586| getLValue(): [VariableAccess] d +# 1586| Type = [LValueReferenceType] type & +# 1586| ValueCategory = prvalue(load) +# 1586| getRValue(): [Literal] 4.0 +# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1586| Value = [Literal] 4.0 +# 1586| ValueCategory = prvalue +# 1586| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1586| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1586| ValueCategory = lvalue +# 1587| getStmt(2): [DeclStmt] declaration +# 1587| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1587| Type = [LValueReferenceType] double & +# 1587| getVariable().getInitializer(): [Initializer] initializer for rd +# 1587| getExpr(): [VariableAccess] d +# 1587| Type = [LValueReferenceType] type & +# 1587| ValueCategory = prvalue(load) +# 1587| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1587| Type = [LValueReferenceType] type & +# 1587| ValueCategory = prvalue +# 1587| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1587| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1587| ValueCategory = lvalue +# 1588| getStmt(3): [DeclStmt] declaration +# 1588| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1588| Type = [IntType] int +# 1588| getVariable().getInitializer(): [Initializer] initializer for v +# 1588| getExpr(): [VariableAccess] i +# 1588| Type = [LValueReferenceType] type & +# 1588| ValueCategory = prvalue(load) +# 1588| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1588| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1588| ValueCategory = prvalue(load) -# 1588| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1588| Type = [LValueReferenceType] int & -# 1588| ValueCategory = prvalue -# 1588| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1588| Type = [IntType] int -# 1588| ValueCategory = lvalue -# 1589| getStmt(6): [DeclStmt] declaration -# 1589| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1589| getStmt(4): [ExprStmt] ExprStmt +# 1589| getExpr(): [AssignExpr] ... = ... # 1589| Type = [IntType] int -# 1589| getVariable().getInitializer(): [Initializer] initializer for w -# 1589| getExpr(): [VariableAccess] r -# 1589| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1589| ValueCategory = prvalue(load) -# 1589| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1589| Type = [IntType] int -# 1589| ValueCategory = prvalue(load) -# 1592| getStmt(2): [BlockStmt] { ... } -# 1593| getStmt(0): [DeclStmt] declaration -# 1593| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1593| Type = [Struct] StructuredBindingTupleRefGet -# 1593| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1593| getExpr(): [VariableAccess] t -# 1593| Type = [Struct] StructuredBindingTupleRefGet -# 1593| ValueCategory = prvalue(load) -# 1594| getStmt(1): [DeclStmt] declaration -# 1594| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1594| Type = [LValueReferenceType] type & -# 1594| getVariable().getInitializer(): [Initializer] initializer for i -# 1594| getExpr(): [FunctionCall] call to get -# 1594| Type = [LValueReferenceType] type & -# 1594| ValueCategory = prvalue -# 1594| getQualifier(): [VariableAccess] unnamed_local_variable -# 1594| Type = [Struct] StructuredBindingTupleRefGet -# 1594| ValueCategory = lvalue -# 1594| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1594| Type = [LValueReferenceType] type & -# 1594| ValueCategory = prvalue -# 1594| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1594| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1594| ValueCategory = lvalue -# 1595| getStmt(2): [DeclStmt] declaration -# 1595| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1595| Type = [LValueReferenceType] type & -# 1595| getVariable().getInitializer(): [Initializer] initializer for d -# 1595| getExpr(): [FunctionCall] call to get -# 1595| Type = [LValueReferenceType] type & -# 1595| ValueCategory = prvalue -# 1595| getQualifier(): [VariableAccess] unnamed_local_variable -# 1595| Type = [Struct] StructuredBindingTupleRefGet -# 1595| ValueCategory = lvalue -# 1595| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1595| Type = [LValueReferenceType] type & -# 1595| ValueCategory = prvalue -# 1595| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1595| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1595| ValueCategory = lvalue -# 1596| getStmt(3): [DeclStmt] declaration -# 1596| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1596| Type = [LValueReferenceType] int & -# 1596| getVariable().getInitializer(): [Initializer] initializer for r +# 1589| ValueCategory = lvalue +# 1589| getLValue(): [VariableAccess] r +# 1589| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1589| ValueCategory = prvalue(load) +# 1589| getRValue(): [Literal] 5 +# 1589| Type = [IntType] int +# 1589| Value = [Literal] 5 +# 1589| ValueCategory = prvalue +# 1589| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1589| Type = [IntType] int +# 1589| ValueCategory = lvalue +# 1590| getStmt(5): [DeclStmt] declaration +# 1590| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1590| Type = [LValueReferenceType] int & +# 1590| getVariable().getInitializer(): [Initializer] initializer for rr +# 1590| getExpr(): [VariableAccess] r +# 1590| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1590| ValueCategory = prvalue(load) +# 1590| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1590| Type = [LValueReferenceType] int & +# 1590| ValueCategory = prvalue +# 1590| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1590| Type = [IntType] int +# 1590| ValueCategory = lvalue +# 1591| getStmt(6): [DeclStmt] declaration +# 1591| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1591| Type = [IntType] int +# 1591| getVariable().getInitializer(): [Initializer] initializer for w +# 1591| getExpr(): [VariableAccess] r +# 1591| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1591| ValueCategory = prvalue(load) +# 1591| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1591| Type = [IntType] int +# 1591| ValueCategory = prvalue(load) +# 1594| getStmt(2): [BlockStmt] { ... } +# 1595| getStmt(0): [DeclStmt] declaration +# 1595| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1595| Type = [Struct] StructuredBindingTupleRefGet +# 1595| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1595| getExpr(): [VariableAccess] t +# 1595| Type = [Struct] StructuredBindingTupleRefGet +# 1595| ValueCategory = prvalue(load) +# 1596| getStmt(1): [DeclStmt] declaration +# 1596| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1596| Type = [LValueReferenceType] type & +# 1596| getVariable().getInitializer(): [Initializer] initializer for i # 1596| getExpr(): [FunctionCall] call to get -# 1596| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1596| Type = [LValueReferenceType] type & # 1596| ValueCategory = prvalue # 1596| getQualifier(): [VariableAccess] unnamed_local_variable # 1596| Type = [Struct] StructuredBindingTupleRefGet # 1596| ValueCategory = lvalue # 1596| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1596| Type = [LValueReferenceType] int & +# 1596| Type = [LValueReferenceType] type & # 1596| ValueCategory = prvalue # 1596| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1596| Type = [IntType] int +# 1596| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1596| ValueCategory = lvalue -# 1597| getStmt(4): [ExprStmt] ExprStmt -# 1597| getExpr(): [AssignExpr] ... = ... -# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1597| ValueCategory = lvalue -# 1597| getLValue(): [VariableAccess] d -# 1597| Type = [LValueReferenceType] type & -# 1597| ValueCategory = prvalue(load) -# 1597| getRValue(): [Literal] 4.0 -# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1597| Value = [Literal] 4.0 -# 1597| ValueCategory = prvalue -# 1597| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1597| ValueCategory = lvalue -# 1598| getStmt(5): [DeclStmt] declaration -# 1598| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd -# 1598| Type = [LValueReferenceType] double & -# 1598| getVariable().getInitializer(): [Initializer] initializer for rd -# 1598| getExpr(): [VariableAccess] d -# 1598| Type = [LValueReferenceType] type & -# 1598| ValueCategory = prvalue(load) +# 1597| getStmt(2): [DeclStmt] declaration +# 1597| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 1597| Type = [LValueReferenceType] type & +# 1597| getVariable().getInitializer(): [Initializer] initializer for d +# 1597| getExpr(): [FunctionCall] call to get +# 1597| Type = [LValueReferenceType] type & +# 1597| ValueCategory = prvalue +# 1597| getQualifier(): [VariableAccess] unnamed_local_variable +# 1597| Type = [Struct] StructuredBindingTupleRefGet +# 1597| ValueCategory = lvalue +# 1597| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1597| Type = [LValueReferenceType] type & +# 1597| ValueCategory = prvalue +# 1597| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1597| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1597| ValueCategory = lvalue +# 1598| getStmt(3): [DeclStmt] declaration +# 1598| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1598| Type = [LValueReferenceType] int & +# 1598| getVariable().getInitializer(): [Initializer] initializer for r +# 1598| getExpr(): [FunctionCall] call to get +# 1598| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1598| ValueCategory = prvalue +# 1598| getQualifier(): [VariableAccess] unnamed_local_variable +# 1598| Type = [Struct] StructuredBindingTupleRefGet +# 1598| ValueCategory = lvalue # 1598| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1598| Type = [LValueReferenceType] type & +# 1598| Type = [LValueReferenceType] int & # 1598| ValueCategory = prvalue # 1598| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1598| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1598| Type = [IntType] int # 1598| ValueCategory = lvalue -# 1599| getStmt(6): [DeclStmt] declaration -# 1599| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1599| Type = [IntType] int -# 1599| getVariable().getInitializer(): [Initializer] initializer for v -# 1599| getExpr(): [VariableAccess] i -# 1599| Type = [LValueReferenceType] type & -# 1599| ValueCategory = prvalue(load) -# 1599| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1599| ValueCategory = prvalue(load) -# 1600| getStmt(7): [ExprStmt] ExprStmt -# 1600| getExpr(): [AssignExpr] ... = ... -# 1600| Type = [IntType] int -# 1600| ValueCategory = lvalue -# 1600| getLValue(): [VariableAccess] r -# 1600| Type = [LValueReferenceType] int & -# 1600| ValueCategory = prvalue(load) -# 1600| getRValue(): [Literal] 5 -# 1600| Type = [IntType] int -# 1600| Value = [Literal] 5 -# 1600| ValueCategory = prvalue -# 1600| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1600| Type = [IntType] int -# 1600| ValueCategory = lvalue -# 1601| getStmt(8): [DeclStmt] declaration -# 1601| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1601| Type = [LValueReferenceType] int & -# 1601| getVariable().getInitializer(): [Initializer] initializer for rr -# 1601| getExpr(): [VariableAccess] r -# 1601| Type = [LValueReferenceType] int & +# 1599| getStmt(4): [ExprStmt] ExprStmt +# 1599| getExpr(): [AssignExpr] ... = ... +# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1599| ValueCategory = lvalue +# 1599| getLValue(): [VariableAccess] d +# 1599| Type = [LValueReferenceType] type & +# 1599| ValueCategory = prvalue(load) +# 1599| getRValue(): [Literal] 4.0 +# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1599| Value = [Literal] 4.0 +# 1599| ValueCategory = prvalue +# 1599| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1599| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1599| ValueCategory = lvalue +# 1600| getStmt(5): [DeclStmt] declaration +# 1600| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rd +# 1600| Type = [LValueReferenceType] double & +# 1600| getVariable().getInitializer(): [Initializer] initializer for rd +# 1600| getExpr(): [VariableAccess] d +# 1600| Type = [LValueReferenceType] type & +# 1600| ValueCategory = prvalue(load) +# 1600| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1600| Type = [LValueReferenceType] type & +# 1600| ValueCategory = prvalue +# 1600| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1600| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1600| ValueCategory = lvalue +# 1601| getStmt(6): [DeclStmt] declaration +# 1601| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1601| Type = [IntType] int +# 1601| getVariable().getInitializer(): [Initializer] initializer for v +# 1601| getExpr(): [VariableAccess] i +# 1601| Type = [LValueReferenceType] type & # 1601| ValueCategory = prvalue(load) -# 1601| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1601| Type = [LValueReferenceType] int & -# 1601| ValueCategory = prvalue -# 1601| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1601| Type = [IntType] int -# 1601| ValueCategory = lvalue -# 1602| getStmt(9): [DeclStmt] declaration -# 1602| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1601| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1601| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1601| ValueCategory = prvalue(load) +# 1602| getStmt(7): [ExprStmt] ExprStmt +# 1602| getExpr(): [AssignExpr] ... = ... # 1602| Type = [IntType] int -# 1602| getVariable().getInitializer(): [Initializer] initializer for w -# 1602| getExpr(): [VariableAccess] r -# 1602| Type = [LValueReferenceType] int & -# 1602| ValueCategory = prvalue(load) -# 1602| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1602| Type = [IntType] int -# 1602| ValueCategory = prvalue(load) -# 1604| getStmt(3): [ReturnStmt] return ... -# 1606| [CopyAssignmentOperator] StructuredBindingTupleNoRefGet& StructuredBindingTupleNoRefGet::operator=(StructuredBindingTupleNoRefGet const&) -# 1606| : +# 1602| ValueCategory = lvalue +# 1602| getLValue(): [VariableAccess] r +# 1602| Type = [LValueReferenceType] int & +# 1602| ValueCategory = prvalue(load) +# 1602| getRValue(): [Literal] 5 +# 1602| Type = [IntType] int +# 1602| Value = [Literal] 5 +# 1602| ValueCategory = prvalue +# 1602| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1602| Type = [IntType] int +# 1602| ValueCategory = lvalue +# 1603| getStmt(8): [DeclStmt] declaration +# 1603| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1603| Type = [LValueReferenceType] int & +# 1603| getVariable().getInitializer(): [Initializer] initializer for rr +# 1603| getExpr(): [VariableAccess] r +# 1603| Type = [LValueReferenceType] int & +# 1603| ValueCategory = prvalue(load) +# 1603| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1603| Type = [LValueReferenceType] int & +# 1603| ValueCategory = prvalue +# 1603| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1603| Type = [IntType] int +# 1603| ValueCategory = lvalue +# 1604| getStmt(9): [DeclStmt] declaration +# 1604| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1604| Type = [IntType] int +# 1604| getVariable().getInitializer(): [Initializer] initializer for w +# 1604| getExpr(): [VariableAccess] r +# 1604| Type = [LValueReferenceType] int & +# 1604| ValueCategory = prvalue(load) +# 1604| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1604| Type = [IntType] int +# 1604| ValueCategory = prvalue(load) +# 1606| getStmt(3): [ReturnStmt] return ... +# 1608| [CopyAssignmentOperator] StructuredBindingTupleNoRefGet& StructuredBindingTupleNoRefGet::operator=(StructuredBindingTupleNoRefGet const&) +# 1608| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1606| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1606| : -# 1606| : -# 1606| getInitializer(0): [ConstructorFieldInit] constructor init of field i -# 1606| Type = [IntType] int -# 1606| ValueCategory = prvalue -# 1606| getInitializer(1): [ConstructorFieldInit] constructor init of field r -# 1606| Type = [LValueReferenceType] int & -# 1606| ValueCategory = prvalue -# 1606| getEntryPoint(): [BlockStmt] { ... } -# 1606| getStmt(0): [ReturnStmt] return ... -# 1606| [CopyConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet const&) -# 1606| : +# 1608| [Constructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1608| : +# 1608| : +# 1608| getInitializer(0): [ConstructorFieldInit] constructor init of field i +# 1608| Type = [IntType] int +# 1608| ValueCategory = prvalue +# 1608| getInitializer(1): [ConstructorFieldInit] constructor init of field r +# 1608| Type = [LValueReferenceType] int & +# 1608| ValueCategory = prvalue +# 1608| getEntryPoint(): [BlockStmt] { ... } +# 1608| getStmt(0): [ReturnStmt] return ... +# 1608| [CopyConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet const&) +# 1608| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const StructuredBindingTupleNoRefGet & -# 1606| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) -# 1606| : +# 1608| [MoveConstructor] void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet(StructuredBindingTupleNoRefGet&&) +# 1608| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] StructuredBindingTupleNoRefGet && -# 1611| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get() -# 1611| : -# 1615| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) -# 1615| : +# 1613| [MemberFunction,TemplateFunction] type StructuredBindingTupleNoRefGet::get() +# 1613| : +# 1617| [CopyAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size const&) +# 1617| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_size & -# 1615| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) -# 1615| : +# 1617| [MoveAssignmentOperator] std::tuple_size& std::tuple_size::operator=(std::tuple_size&&) +# 1617| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_size && -# 1620| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1620| : +# 1622| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1622| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<0, StructuredBindingTupleNoRefGet> & -# 1620| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1620| : +# 1622| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1622| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<0, StructuredBindingTupleNoRefGet> && -# 1624| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1624| : +# 1626| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1626| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<1, StructuredBindingTupleNoRefGet> & -# 1624| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1624| : +# 1626| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1626| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<1, StructuredBindingTupleNoRefGet> && -# 1628| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) -# 1628| : +# 1630| [CopyAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element const&) +# 1630| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const tuple_element<2, StructuredBindingTupleNoRefGet> & -# 1628| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) -# 1628| : +# 1630| [MoveAssignmentOperator] std::tuple_element& std::tuple_element::operator=(std::tuple_element&&) +# 1630| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] tuple_element<2, StructuredBindingTupleNoRefGet> && -# 1633| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1633| : -# 1633| getEntryPoint(): [BlockStmt] { ... } -# 1634| getStmt(0): [ReturnStmt] return ... -# 1634| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i -# 1634| Type = [IntType] int -# 1634| ValueCategory = prvalue(load) -# 1634| getQualifier(): [ThisExpr] this -# 1634| Type = [PointerType] StructuredBindingTupleNoRefGet * -# 1634| ValueCategory = prvalue(load) -# 1637| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1637| : -# 1637| getEntryPoint(): [BlockStmt] { ... } -# 1638| getStmt(0): [ReturnStmt] return ... -# 1638| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r -# 1638| Type = [LValueReferenceType] int & -# 1638| ValueCategory = prvalue(load) -# 1638| getQualifier(): [ThisExpr] this -# 1638| Type = [PointerType] StructuredBindingTupleNoRefGet * -# 1638| ValueCategory = prvalue(load) -# 1638| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1638| Type = [LValueReferenceType] int & -# 1638| ValueCategory = prvalue -# 1638| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1638| Type = [IntType] int -# 1638| ValueCategory = lvalue -# 1641| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1641| : -# 1641| getEntryPoint(): [BlockStmt] { ... } -# 1642| getStmt(0): [ReturnStmt] return ... -# 1642| getExpr(): [Literal] 5 -# 1642| Type = [IntType] int -# 1642| Value = [Literal] 5 -# 1642| ValueCategory = prvalue -# 1642| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1642| Type = [LValueReferenceType] int & -# 1642| ValueCategory = prvalue -# 1642| getExpr(): [TemporaryObjectExpr] temporary object -# 1642| Type = [IntType] int -# 1642| ValueCategory = lvalue -# 1645| [TopLevelFunction] void tuple_structured_binding_no_ref_get() -# 1645| : -# 1645| getEntryPoint(): [BlockStmt] { ... } -# 1646| getStmt(0): [DeclStmt] declaration -# 1646| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t -# 1646| Type = [Struct] StructuredBindingTupleNoRefGet -# 1646| getVariable().getInitializer(): [Initializer] initializer for t -# 1646| getExpr(): [ConstructorCall] call to StructuredBindingTupleNoRefGet -# 1646| Type = [VoidType] void -# 1646| ValueCategory = prvalue -# 1648| getStmt(1): [BlockStmt] { ... } -# 1649| getStmt(0): [DeclStmt] declaration -# 1649| getDeclarationEntry(0): (no string representation) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1649| getExpr(): [VariableAccess] t -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue -# 1649| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i -# 1649| Type = [RValueReferenceType] type && +# 1635| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1635| : +# 1635| getEntryPoint(): [BlockStmt] { ... } +# 1636| getStmt(0): [ReturnStmt] return ... +# 1636| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i +# 1636| Type = [IntType] int +# 1636| ValueCategory = prvalue(load) +# 1636| getQualifier(): [ThisExpr] this +# 1636| Type = [PointerType] StructuredBindingTupleNoRefGet * +# 1636| ValueCategory = prvalue(load) +# 1639| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1639| : +# 1639| getEntryPoint(): [BlockStmt] { ... } +# 1640| getStmt(0): [ReturnStmt] return ... +# 1640| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r +# 1640| Type = [LValueReferenceType] int & +# 1640| ValueCategory = prvalue(load) +# 1640| getQualifier(): [ThisExpr] this +# 1640| Type = [PointerType] StructuredBindingTupleNoRefGet * +# 1640| ValueCategory = prvalue(load) +# 1640| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1640| Type = [LValueReferenceType] int & +# 1640| ValueCategory = prvalue +# 1640| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1640| Type = [IntType] int +# 1640| ValueCategory = lvalue +# 1643| [FunctionTemplateSpecialization,MemberFunction] std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1643| : +# 1643| getEntryPoint(): [BlockStmt] { ... } +# 1644| getStmt(0): [ReturnStmt] return ... +# 1644| getExpr(): [Literal] 5 +# 1644| Type = [IntType] int +# 1644| Value = [Literal] 5 +# 1644| ValueCategory = prvalue +# 1644| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1644| Type = [LValueReferenceType] int & +# 1644| ValueCategory = prvalue +# 1644| getExpr(): [TemporaryObjectExpr] temporary object +# 1644| Type = [IntType] int +# 1644| ValueCategory = lvalue +# 1647| [TopLevelFunction] void tuple_structured_binding_no_ref_get() +# 1647| : +# 1647| getEntryPoint(): [BlockStmt] { ... } +# 1648| getStmt(0): [DeclStmt] declaration +# 1648| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 1648| Type = [Struct] StructuredBindingTupleNoRefGet +# 1648| getVariable().getInitializer(): [Initializer] initializer for t +# 1648| getExpr(): [ConstructorCall] call to StructuredBindingTupleNoRefGet +# 1648| Type = [VoidType] void +# 1648| ValueCategory = prvalue +# 1650| getStmt(1): [BlockStmt] { ... } +# 1651| getStmt(0): [DeclStmt] declaration +# 1651| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1651| getExpr(): [VariableAccess] t +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue +# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue +# 1651| getDeclarationEntry(1): [VariableDeclarationEntry] definition of i +# 1651| Type = [RValueReferenceType] type && #-----| getVariable().getInitializer(): [Initializer] initializer for i -# 1649| getExpr(): [FunctionCall] call to get -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = prvalue -# 1649| getQualifier(): [VariableAccess] (unnamed local variable) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue(load) -# 1649| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] type & -# 1649| ValueCategory = prvalue -# 1649| getExpr(): [TemporaryObjectExpr] temporary object -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = lvalue -# 1649| getDeclarationEntry(2): [VariableDeclarationEntry] definition of r -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -#-----| getVariable().getInitializer(): [Initializer] initializer for r -# 1649| getExpr(): [FunctionCall] call to get -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = prvalue -# 1649| getQualifier(): [VariableAccess] (unnamed local variable) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue(load) -# 1649| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] int & -# 1649| ValueCategory = prvalue -# 1649| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [IntType] int -# 1649| ValueCategory = lvalue -# 1649| getDeclarationEntry(3): [VariableDeclarationEntry] definition of rv -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -#-----| getVariable().getInitializer(): [Initializer] initializer for rv -# 1649| getExpr(): [FunctionCall] call to get -# 1649| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1649| ValueCategory = prvalue -# 1649| getQualifier(): [VariableAccess] (unnamed local variable) -# 1649| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1649| ValueCategory = prvalue(load) -# 1649| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [Struct] StructuredBindingTupleNoRefGet -# 1649| ValueCategory = lvalue -# 1649| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1649| Type = [LValueReferenceType] int & -# 1649| ValueCategory = prvalue -# 1649| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1649| Type = [IntType] int -# 1649| ValueCategory = xvalue -# 1650| getStmt(1): [ExprStmt] ExprStmt -# 1650| getExpr(): [AssignExpr] ... = ... -# 1650| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1650| ValueCategory = lvalue -# 1650| getLValue(): [VariableAccess] i -# 1650| Type = [RValueReferenceType] type && -# 1650| ValueCategory = prvalue(load) -# 1650| getRValue(): [Literal] 4 -# 1650| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1650| Value = [Literal] 4 -# 1650| ValueCategory = prvalue -# 1650| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1650| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1650| ValueCategory = lvalue -# 1651| getStmt(2): [DeclStmt] declaration -# 1651| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri -# 1651| Type = [LValueReferenceType] int & -# 1651| getVariable().getInitializer(): [Initializer] initializer for ri -# 1651| getExpr(): [VariableAccess] i -# 1651| Type = [RValueReferenceType] type && -# 1651| ValueCategory = prvalue(load) +# 1651| getExpr(): [FunctionCall] call to get +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1651| ValueCategory = prvalue +# 1651| getQualifier(): [VariableAccess] (unnamed local variable) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue(load) +# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue # 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) # 1651| Type = [LValueReferenceType] type & # 1651| ValueCategory = prvalue -# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| getExpr(): [TemporaryObjectExpr] temporary object # 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1651| ValueCategory = lvalue -# 1652| getStmt(3): [DeclStmt] declaration -# 1652| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1652| Type = [IntType] int -# 1652| getVariable().getInitializer(): [Initializer] initializer for v -# 1652| getExpr(): [VariableAccess] i -# 1652| Type = [RValueReferenceType] type && -# 1652| ValueCategory = prvalue(load) -# 1652| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1652| ValueCategory = prvalue(load) -# 1653| getStmt(4): [ExprStmt] ExprStmt -# 1653| getExpr(): [AssignExpr] ... = ... -# 1653| Type = [IntType] int -# 1653| ValueCategory = lvalue -# 1653| getLValue(): [VariableAccess] r -# 1653| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1653| ValueCategory = prvalue(load) -# 1653| getRValue(): [Literal] 5 -# 1653| Type = [IntType] int -# 1653| Value = [Literal] 5 -# 1653| ValueCategory = prvalue -# 1653| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1653| Type = [IntType] int -# 1653| ValueCategory = lvalue -# 1654| getStmt(5): [DeclStmt] declaration -# 1654| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1654| Type = [LValueReferenceType] int & -# 1654| getVariable().getInitializer(): [Initializer] initializer for rr -# 1654| getExpr(): [VariableAccess] r +# 1651| getDeclarationEntry(2): [VariableDeclarationEntry] definition of r +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +#-----| getVariable().getInitializer(): [Initializer] initializer for r +# 1651| getExpr(): [FunctionCall] call to get +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1651| ValueCategory = prvalue +# 1651| getQualifier(): [VariableAccess] (unnamed local variable) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue(load) +# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue +# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1651| Type = [LValueReferenceType] int & +# 1651| ValueCategory = prvalue +# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [IntType] int +# 1651| ValueCategory = lvalue +# 1651| getDeclarationEntry(3): [VariableDeclarationEntry] definition of rv +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +#-----| getVariable().getInitializer(): [Initializer] initializer for rv +# 1651| getExpr(): [FunctionCall] call to get +# 1651| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1651| ValueCategory = prvalue +# 1651| getQualifier(): [VariableAccess] (unnamed local variable) +# 1651| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1651| ValueCategory = prvalue(load) +# 1651| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [Struct] StructuredBindingTupleNoRefGet +# 1651| ValueCategory = lvalue +# 1651| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1651| Type = [LValueReferenceType] int & +# 1651| ValueCategory = prvalue +# 1651| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1651| Type = [IntType] int +# 1651| ValueCategory = xvalue +# 1652| getStmt(1): [ExprStmt] ExprStmt +# 1652| getExpr(): [AssignExpr] ... = ... +# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1652| ValueCategory = lvalue +# 1652| getLValue(): [VariableAccess] i +# 1652| Type = [RValueReferenceType] type && +# 1652| ValueCategory = prvalue(load) +# 1652| getRValue(): [Literal] 4 +# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1652| Value = [Literal] 4 +# 1652| ValueCategory = prvalue +# 1652| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1652| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1652| ValueCategory = lvalue +# 1653| getStmt(2): [DeclStmt] declaration +# 1653| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri +# 1653| Type = [LValueReferenceType] int & +# 1653| getVariable().getInitializer(): [Initializer] initializer for ri +# 1653| getExpr(): [VariableAccess] i +# 1653| Type = [RValueReferenceType] type && +# 1653| ValueCategory = prvalue(load) +# 1653| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1653| Type = [LValueReferenceType] type & +# 1653| ValueCategory = prvalue +# 1653| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1653| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1653| ValueCategory = lvalue +# 1654| getStmt(3): [DeclStmt] declaration +# 1654| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1654| Type = [IntType] int +# 1654| getVariable().getInitializer(): [Initializer] initializer for v +# 1654| getExpr(): [VariableAccess] i +# 1654| Type = [RValueReferenceType] type && +# 1654| ValueCategory = prvalue(load) +# 1654| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1654| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1654| ValueCategory = prvalue(load) -# 1654| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1654| Type = [LValueReferenceType] int & -# 1654| ValueCategory = prvalue -# 1654| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1654| Type = [IntType] int -# 1654| ValueCategory = lvalue -# 1655| getStmt(6): [DeclStmt] declaration -# 1655| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1655| getStmt(4): [ExprStmt] ExprStmt +# 1655| getExpr(): [AssignExpr] ... = ... # 1655| Type = [IntType] int -# 1655| getVariable().getInitializer(): [Initializer] initializer for w -# 1655| getExpr(): [VariableAccess] r -# 1655| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1655| ValueCategory = prvalue(load) -# 1655| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1655| Type = [IntType] int -# 1655| ValueCategory = prvalue(load) -# 1658| getStmt(2): [BlockStmt] { ... } -# 1659| getStmt(0): [DeclStmt] declaration -# 1659| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable -# 1659| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1659| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable -# 1659| getExpr(): [VariableAccess] t -# 1659| Type = [Struct] StructuredBindingTupleNoRefGet -# 1659| ValueCategory = lvalue -# 1659| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1659| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1659| ValueCategory = prvalue -# 1660| getStmt(1): [DeclStmt] declaration -# 1660| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1660| Type = [RValueReferenceType] type && -# 1660| getVariable().getInitializer(): [Initializer] initializer for i -# 1660| getExpr(): [FunctionCall] call to get -# 1660| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1660| ValueCategory = prvalue -# 1660| getQualifier(): [VariableAccess] unnamed_local_variable -# 1660| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1660| ValueCategory = prvalue(load) -# 1660| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1660| Type = [Struct] StructuredBindingTupleNoRefGet -# 1660| ValueCategory = lvalue -# 1660| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1660| Type = [LValueReferenceType] type & -# 1660| ValueCategory = prvalue -# 1660| getExpr(): [TemporaryObjectExpr] temporary object -# 1660| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1660| ValueCategory = lvalue -# 1661| getStmt(2): [DeclStmt] declaration -# 1661| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r -# 1661| Type = [LValueReferenceType] int & -# 1661| getVariable().getInitializer(): [Initializer] initializer for r -# 1661| getExpr(): [FunctionCall] call to get -# 1661| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1661| ValueCategory = prvalue -# 1661| getQualifier(): [VariableAccess] unnamed_local_variable -# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & -# 1661| ValueCategory = prvalue(load) -# 1661| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1661| Type = [Struct] StructuredBindingTupleNoRefGet -# 1661| ValueCategory = lvalue +# 1655| ValueCategory = lvalue +# 1655| getLValue(): [VariableAccess] r +# 1655| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1655| ValueCategory = prvalue(load) +# 1655| getRValue(): [Literal] 5 +# 1655| Type = [IntType] int +# 1655| Value = [Literal] 5 +# 1655| ValueCategory = prvalue +# 1655| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1655| Type = [IntType] int +# 1655| ValueCategory = lvalue +# 1656| getStmt(5): [DeclStmt] declaration +# 1656| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1656| Type = [LValueReferenceType] int & +# 1656| getVariable().getInitializer(): [Initializer] initializer for rr +# 1656| getExpr(): [VariableAccess] r +# 1656| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1656| ValueCategory = prvalue(load) +# 1656| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1656| Type = [LValueReferenceType] int & +# 1656| ValueCategory = prvalue +# 1656| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1656| Type = [IntType] int +# 1656| ValueCategory = lvalue +# 1657| getStmt(6): [DeclStmt] declaration +# 1657| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1657| Type = [IntType] int +# 1657| getVariable().getInitializer(): [Initializer] initializer for w +# 1657| getExpr(): [VariableAccess] r +# 1657| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1657| ValueCategory = prvalue(load) +# 1657| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1657| Type = [IntType] int +# 1657| ValueCategory = prvalue(load) +# 1660| getStmt(2): [BlockStmt] { ... } +# 1661| getStmt(0): [DeclStmt] declaration +# 1661| getDeclarationEntry(0): [VariableDeclarationEntry] definition of unnamed_local_variable +# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1661| getVariable().getInitializer(): [Initializer] initializer for unnamed_local_variable +# 1661| getExpr(): [VariableAccess] t +# 1661| Type = [Struct] StructuredBindingTupleNoRefGet +# 1661| ValueCategory = lvalue # 1661| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1661| Type = [LValueReferenceType] int & +# 1661| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & # 1661| ValueCategory = prvalue -# 1661| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1661| Type = [IntType] int -# 1661| ValueCategory = lvalue -# 1662| getStmt(3): [DeclStmt] declaration -# 1662| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rv -# 1662| Type = [RValueReferenceType] int && -# 1662| getVariable().getInitializer(): [Initializer] initializer for rv +# 1662| getStmt(1): [DeclStmt] declaration +# 1662| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1662| Type = [RValueReferenceType] type && +# 1662| getVariable().getInitializer(): [Initializer] initializer for i # 1662| getExpr(): [FunctionCall] call to get # 1662| Type = [NestedTypedefType,UsingAliasTypedefType] type # 1662| ValueCategory = prvalue @@ -13061,113 +13176,151 @@ ir.cpp: # 1662| Type = [Struct] StructuredBindingTupleNoRefGet # 1662| ValueCategory = lvalue # 1662| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1662| Type = [LValueReferenceType] int & +# 1662| Type = [LValueReferenceType] type & # 1662| ValueCategory = prvalue -# 1662| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1662| Type = [IntType] int -# 1662| ValueCategory = xvalue -# 1663| getStmt(4): [ExprStmt] ExprStmt -# 1663| getExpr(): [AssignExpr] ... = ... -# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1663| ValueCategory = lvalue -# 1663| getLValue(): [VariableAccess] i -# 1663| Type = [RValueReferenceType] type && -# 1663| ValueCategory = prvalue(load) -# 1663| getRValue(): [Literal] 4 -# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1663| Value = [Literal] 4 -# 1663| ValueCategory = prvalue -# 1663| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1663| ValueCategory = lvalue -# 1664| getStmt(5): [DeclStmt] declaration -# 1664| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri -# 1664| Type = [LValueReferenceType] int & -# 1664| getVariable().getInitializer(): [Initializer] initializer for ri -# 1664| getExpr(): [VariableAccess] i -# 1664| Type = [RValueReferenceType] type && -# 1664| ValueCategory = prvalue(load) +# 1662| getExpr(): [TemporaryObjectExpr] temporary object +# 1662| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1662| ValueCategory = lvalue +# 1663| getStmt(2): [DeclStmt] declaration +# 1663| getDeclarationEntry(0): [VariableDeclarationEntry] definition of r +# 1663| Type = [LValueReferenceType] int & +# 1663| getVariable().getInitializer(): [Initializer] initializer for r +# 1663| getExpr(): [FunctionCall] call to get +# 1663| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1663| ValueCategory = prvalue +# 1663| getQualifier(): [VariableAccess] unnamed_local_variable +# 1663| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1663| ValueCategory = prvalue(load) +# 1663| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1663| Type = [Struct] StructuredBindingTupleNoRefGet +# 1663| ValueCategory = lvalue +# 1663| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1663| Type = [LValueReferenceType] int & +# 1663| ValueCategory = prvalue +# 1663| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1663| Type = [IntType] int +# 1663| ValueCategory = lvalue +# 1664| getStmt(3): [DeclStmt] declaration +# 1664| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rv +# 1664| Type = [RValueReferenceType] int && +# 1664| getVariable().getInitializer(): [Initializer] initializer for rv +# 1664| getExpr(): [FunctionCall] call to get +# 1664| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1664| ValueCategory = prvalue +# 1664| getQualifier(): [VariableAccess] unnamed_local_variable +# 1664| Type = [LValueReferenceType] StructuredBindingTupleNoRefGet & +# 1664| ValueCategory = prvalue(load) +# 1664| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1664| Type = [Struct] StructuredBindingTupleNoRefGet +# 1664| ValueCategory = lvalue # 1664| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1664| Type = [LValueReferenceType] type & +# 1664| Type = [LValueReferenceType] int & # 1664| ValueCategory = prvalue # 1664| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1664| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1664| ValueCategory = lvalue -# 1665| getStmt(6): [DeclStmt] declaration -# 1665| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1665| Type = [IntType] int -# 1665| getVariable().getInitializer(): [Initializer] initializer for v -# 1665| getExpr(): [VariableAccess] i -# 1665| Type = [RValueReferenceType] type && -# 1665| ValueCategory = prvalue(load) -# 1665| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type -# 1665| ValueCategory = prvalue(load) -# 1666| getStmt(7): [ExprStmt] ExprStmt -# 1666| getExpr(): [AssignExpr] ... = ... -# 1666| Type = [IntType] int -# 1666| ValueCategory = lvalue -# 1666| getLValue(): [VariableAccess] r -# 1666| Type = [LValueReferenceType] int & -# 1666| ValueCategory = prvalue(load) -# 1666| getRValue(): [Literal] 5 -# 1666| Type = [IntType] int -# 1666| Value = [Literal] 5 -# 1666| ValueCategory = prvalue -# 1666| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1666| Type = [IntType] int -# 1666| ValueCategory = lvalue -# 1667| getStmt(8): [DeclStmt] declaration -# 1667| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr -# 1667| Type = [LValueReferenceType] int & -# 1667| getVariable().getInitializer(): [Initializer] initializer for rr -# 1667| getExpr(): [VariableAccess] r -# 1667| Type = [LValueReferenceType] int & +# 1664| Type = [IntType] int +# 1664| ValueCategory = xvalue +# 1665| getStmt(4): [ExprStmt] ExprStmt +# 1665| getExpr(): [AssignExpr] ... = ... +# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1665| ValueCategory = lvalue +# 1665| getLValue(): [VariableAccess] i +# 1665| Type = [RValueReferenceType] type && +# 1665| ValueCategory = prvalue(load) +# 1665| getRValue(): [Literal] 4 +# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1665| Value = [Literal] 4 +# 1665| ValueCategory = prvalue +# 1665| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1665| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1665| ValueCategory = lvalue +# 1666| getStmt(5): [DeclStmt] declaration +# 1666| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ri +# 1666| Type = [LValueReferenceType] int & +# 1666| getVariable().getInitializer(): [Initializer] initializer for ri +# 1666| getExpr(): [VariableAccess] i +# 1666| Type = [RValueReferenceType] type && +# 1666| ValueCategory = prvalue(load) +# 1666| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1666| Type = [LValueReferenceType] type & +# 1666| ValueCategory = prvalue +# 1666| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1666| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1666| ValueCategory = lvalue +# 1667| getStmt(6): [DeclStmt] declaration +# 1667| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1667| Type = [IntType] int +# 1667| getVariable().getInitializer(): [Initializer] initializer for v +# 1667| getExpr(): [VariableAccess] i +# 1667| Type = [RValueReferenceType] type && # 1667| ValueCategory = prvalue(load) -# 1667| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1667| Type = [LValueReferenceType] int & -# 1667| ValueCategory = prvalue -# 1667| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1667| Type = [IntType] int -# 1667| ValueCategory = lvalue -# 1668| getStmt(9): [DeclStmt] declaration -# 1668| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1667| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1667| Type = [NestedTypedefType,UsingAliasTypedefType] type +# 1667| ValueCategory = prvalue(load) +# 1668| getStmt(7): [ExprStmt] ExprStmt +# 1668| getExpr(): [AssignExpr] ... = ... # 1668| Type = [IntType] int -# 1668| getVariable().getInitializer(): [Initializer] initializer for w -# 1668| getExpr(): [VariableAccess] r -# 1668| Type = [LValueReferenceType] int & -# 1668| ValueCategory = prvalue(load) -# 1668| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1668| Type = [IntType] int -# 1668| ValueCategory = prvalue(load) -# 1670| getStmt(3): [ReturnStmt] return ... -# 1672| [TopLevelFunction] void array_structured_binding_non_ref_init() -# 1672| : -# 1672| getEntryPoint(): [BlockStmt] { ... } -# 1673| getStmt(0): [DeclStmt] declaration -# 1673| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs -# 1673| Type = [ArrayType] int[2] -# 1673| getVariable().getInitializer(): [Initializer] initializer for xs -# 1673| getExpr(): [ArrayAggregateLiteral] {...} -# 1673| Type = [ArrayType] int[2] -# 1673| ValueCategory = prvalue -# 1673| getAnElementExpr(0): [Literal] 1 -# 1673| Type = [IntType] int -# 1673| Value = [Literal] 1 -# 1673| ValueCategory = prvalue -# 1673| getAnElementExpr(1): [Literal] 2 -# 1673| Type = [IntType] int -# 1673| Value = [Literal] 2 -# 1673| ValueCategory = prvalue -# 1674| getStmt(1): [DeclStmt] declaration -# 1674| getDeclarationEntry(0): (no string representation) -# 1674| Type = [ArrayType] int[2] -# 1674| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) -# 1674| getExpr(): [VariableAccess] xs -# 1674| Type = [ArrayType] int[2] -# 1674| ValueCategory = prvalue(load) -# 1674| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 -# 1674| Type = [IntType] int +# 1668| ValueCategory = lvalue +# 1668| getLValue(): [VariableAccess] r +# 1668| Type = [LValueReferenceType] int & +# 1668| ValueCategory = prvalue(load) +# 1668| getRValue(): [Literal] 5 +# 1668| Type = [IntType] int +# 1668| Value = [Literal] 5 +# 1668| ValueCategory = prvalue +# 1668| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1668| Type = [IntType] int +# 1668| ValueCategory = lvalue +# 1669| getStmt(8): [DeclStmt] declaration +# 1669| getDeclarationEntry(0): [VariableDeclarationEntry] definition of rr +# 1669| Type = [LValueReferenceType] int & +# 1669| getVariable().getInitializer(): [Initializer] initializer for rr +# 1669| getExpr(): [VariableAccess] r +# 1669| Type = [LValueReferenceType] int & +# 1669| ValueCategory = prvalue(load) +# 1669| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1669| Type = [LValueReferenceType] int & +# 1669| ValueCategory = prvalue +# 1669| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1669| Type = [IntType] int +# 1669| ValueCategory = lvalue +# 1670| getStmt(9): [DeclStmt] declaration +# 1670| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1670| Type = [IntType] int +# 1670| getVariable().getInitializer(): [Initializer] initializer for w +# 1670| getExpr(): [VariableAccess] r +# 1670| Type = [LValueReferenceType] int & +# 1670| ValueCategory = prvalue(load) +# 1670| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1670| Type = [IntType] int +# 1670| ValueCategory = prvalue(load) +# 1672| getStmt(3): [ReturnStmt] return ... +# 1674| [TopLevelFunction] void array_structured_binding_non_ref_init() +# 1674| : +# 1674| getEntryPoint(): [BlockStmt] { ... } +# 1675| getStmt(0): [DeclStmt] declaration +# 1675| getDeclarationEntry(0): [VariableDeclarationEntry] definition of xs +# 1675| Type = [ArrayType] int[2] +# 1675| getVariable().getInitializer(): [Initializer] initializer for xs +# 1675| getExpr(): [ArrayAggregateLiteral] {...} +# 1675| Type = [ArrayType] int[2] +# 1675| ValueCategory = prvalue +# 1675| getAnElementExpr(0): [Literal] 1 +# 1675| Type = [IntType] int +# 1675| Value = [Literal] 1 +# 1675| ValueCategory = prvalue +# 1675| getAnElementExpr(1): [Literal] 2 +# 1675| Type = [IntType] int +# 1675| Value = [Literal] 2 +# 1675| ValueCategory = prvalue +# 1676| getStmt(1): [DeclStmt] declaration +# 1676| getDeclarationEntry(0): [VariableDeclarationEntry] definition of (unnamed local variable) +# 1676| Type = [ArrayType] int[2] +# 1676| getVariable().getInitializer(): [Initializer] initializer for (unnamed local variable) +# 1676| getExpr(): [VariableAccess] xs +# 1676| Type = [ArrayType] int[2] +# 1676| ValueCategory = prvalue(load) +# 1676| getDeclarationEntry(1): [VariableDeclarationEntry] definition of x0 +# 1676| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x0 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -13182,8 +13335,8 @@ ir.cpp: #-----| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion #-----| Type = [IntPointerType] int * #-----| ValueCategory = prvalue -# 1674| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 -# 1674| Type = [IntType] int +# 1676| getDeclarationEntry(2): [VariableDeclarationEntry] definition of x1 +# 1676| Type = [IntType] int #-----| getVariable().getInitializer(): [Initializer] initializer for x1 #-----| getExpr(): [ArrayExpr] access to array #-----| Type = [IntType] int @@ -13198,351 +13351,351 @@ ir.cpp: #-----| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion #-----| Type = [IntPointerType] int * #-----| ValueCategory = prvalue -# 1675| getStmt(2): [ReturnStmt] return ... -# 1677| [CopyAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj const&) -# 1677| : +# 1677| getStmt(2): [ReturnStmt] return ... +# 1679| [CopyAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj const&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1677| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) -# 1677| : +# 1679| [MoveAssignmentOperator] CapturedLambdaMyObj& CapturedLambdaMyObj::operator=(CapturedLambdaMyObj&&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1677| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) -# 1677| : +# 1679| [CopyConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj const&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1677| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) -# 1677| : +# 1679| [MoveConstructor] void CapturedLambdaMyObj::CapturedLambdaMyObj(CapturedLambdaMyObj&&) +# 1679| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CapturedLambdaMyObj && -# 1680| [Constructor] void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1680| : -# 1680| : -# 1680| getEntryPoint(): [BlockStmt] { ... } -# 1680| getStmt(0): [ReturnStmt] return ... -# 1683| [TopLevelFunction] void captured_lambda(int, int&, int&&) -# 1683| : -# 1683| getParameter(0): [Parameter] x -# 1683| Type = [IntType] int -# 1683| getParameter(1): [Parameter] y -# 1683| Type = [LValueReferenceType] int & -# 1683| getParameter(2): [Parameter] z -# 1683| Type = [RValueReferenceType] int && -# 1684| getEntryPoint(): [BlockStmt] { ... } -# 1685| getStmt(0): [DeclStmt] declaration -# 1685| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj1 -# 1685| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1685| getVariable().getInitializer(): [Initializer] initializer for obj1 -# 1685| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj -# 1685| Type = [VoidType] void -# 1685| ValueCategory = prvalue -# 1685| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1685| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1685| ValueCategory = prvalue -# 1685| getExpr(): [CStyleCast] (const CapturedLambdaMyObj)... -# 1685| Conversion = [GlvalueConversion] glvalue conversion -# 1685| Type = [SpecifiedType] const CapturedLambdaMyObj -# 1685| ValueCategory = lvalue -# 1685| getExpr(): [TemporaryObjectExpr] temporary object -# 1685| Type = [Class] CapturedLambdaMyObj -# 1685| ValueCategory = lvalue -# 1686| getStmt(1): [DeclStmt] declaration -# 1686| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj2 -# 1686| Type = [Class] CapturedLambdaMyObj -# 1686| getVariable().getInitializer(): [Initializer] initializer for obj2 -# 1686| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj -# 1686| Type = [VoidType] void -# 1686| ValueCategory = prvalue -# 1688| getStmt(2): [DeclStmt] declaration -# 1688| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_outer -# 1688| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1688| getVariable().getInitializer(): [Initializer] initializer for lambda_outer -# 1688| getExpr(): [LambdaExpression] [...](...){...} -# 1688| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1682| [Constructor] void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1682| : +# 1682| : +# 1682| getEntryPoint(): [BlockStmt] { ... } +# 1682| getStmt(0): [ReturnStmt] return ... +# 1685| [TopLevelFunction] void captured_lambda(int, int&, int&&) +# 1685| : +# 1685| getParameter(0): [Parameter] x +# 1685| Type = [IntType] int +# 1685| getParameter(1): [Parameter] y +# 1685| Type = [LValueReferenceType] int & +# 1685| getParameter(2): [Parameter] z +# 1685| Type = [RValueReferenceType] int && +# 1686| getEntryPoint(): [BlockStmt] { ... } +# 1687| getStmt(0): [DeclStmt] declaration +# 1687| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj1 +# 1687| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1687| getVariable().getInitializer(): [Initializer] initializer for obj1 +# 1687| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj +# 1687| Type = [VoidType] void +# 1687| ValueCategory = prvalue +# 1687| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1687| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1687| ValueCategory = prvalue +# 1687| getExpr(): [CStyleCast] (const CapturedLambdaMyObj)... +# 1687| Conversion = [GlvalueConversion] glvalue conversion +# 1687| Type = [SpecifiedType] const CapturedLambdaMyObj +# 1687| ValueCategory = lvalue +# 1687| getExpr(): [TemporaryObjectExpr] temporary object +# 1687| Type = [Class] CapturedLambdaMyObj +# 1687| ValueCategory = lvalue +# 1688| getStmt(1): [DeclStmt] declaration +# 1688| getDeclarationEntry(0): [VariableDeclarationEntry] definition of obj2 +# 1688| Type = [Class] CapturedLambdaMyObj +# 1688| getVariable().getInitializer(): [Initializer] initializer for obj2 +# 1688| getExpr(): [ConstructorCall] call to CapturedLambdaMyObj +# 1688| Type = [VoidType] void # 1688| ValueCategory = prvalue -# 1688| getInitializer(): [ClassAggregateLiteral] {...} -# 1688| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1688| ValueCategory = prvalue -# 1688| getAFieldExpr(obj1): [VariableAccess] obj1 -# 1688| Type = [LValueReferenceType] const CapturedLambdaMyObj & -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(obj2): [VariableAccess] obj2 -# 1688| Type = [Class] CapturedLambdaMyObj -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(x): [VariableAccess] x -# 1688| Type = [IntType] int -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(y): [VariableAccess] y -# 1688| Type = [LValueReferenceType] int & -# 1688| ValueCategory = prvalue(load) -# 1688| getAFieldExpr(z): [VariableAccess] z -# 1688| Type = [RValueReferenceType] int && -# 1688| ValueCategory = prvalue(load) +# 1690| getStmt(2): [DeclStmt] declaration +# 1690| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_outer +# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1690| getVariable().getInitializer(): [Initializer] initializer for lambda_outer +# 1690| getExpr(): [LambdaExpression] [...](...){...} +# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1690| ValueCategory = prvalue +# 1690| getInitializer(): [ClassAggregateLiteral] {...} +# 1690| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1690| ValueCategory = prvalue +# 1690| getAFieldExpr(obj1): [VariableAccess] obj1 +# 1690| Type = [LValueReferenceType] const CapturedLambdaMyObj & +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(obj2): [VariableAccess] obj2 +# 1690| Type = [Class] CapturedLambdaMyObj +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(x): [VariableAccess] x +# 1690| Type = [IntType] int +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(y): [VariableAccess] y +# 1690| Type = [LValueReferenceType] int & +# 1690| ValueCategory = prvalue(load) +# 1690| getAFieldExpr(z): [VariableAccess] z +# 1690| Type = [RValueReferenceType] int && +# 1690| ValueCategory = prvalue(load) #-----| getAFieldExpr(obj1).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const CapturedLambdaMyObj #-----| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(y).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1690| Type = [IntType] int -# 1690| ValueCategory = prvalue(load) -# 1690| getAFieldExpr(z).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1690| Type = [IntType] int -# 1690| ValueCategory = prvalue(load) -# 1691| getStmt(3): [ReturnStmt] return ... -# 1688| [CopyAssignmentOperator] (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)& (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator=((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25) const&) -# 1688| : +# 1692| getAFieldExpr(y).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1692| Type = [IntType] int +# 1692| ValueCategory = prvalue(load) +# 1692| getAFieldExpr(z).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1692| Type = [IntType] int +# 1692| ValueCategory = prvalue(load) +# 1693| getStmt(3): [ReturnStmt] return ... +# 1690| [CopyAssignmentOperator] (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)& (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator=((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25) const&) +# 1690| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1688, col. 25 & -# 1688| [CopyConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25) const&) -# 1688| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1690, col. 25 & +# 1690| [CopyConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25) const&) +# 1690| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1688, col. 25 & -# 1688| [MoveConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)&&) -# 1688| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1690, col. 25 & +# 1690| [MoveConstructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)((void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)&&) +# 1690| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1688, col. 25 && -# 1688| [Constructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::(unnamed constructor)() -# 1688| : -# 1688| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const -# 1688| : -# 1688| getEntryPoint(): [BlockStmt] { ... } -# 1689| getStmt(0): [DeclStmt] declaration -# 1689| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_inner -# 1689| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1689| getVariable().getInitializer(): [Initializer] initializer for lambda_inner -# 1689| getExpr(): [LambdaExpression] [...](...){...} -# 1689| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1689| ValueCategory = prvalue -# 1689| getInitializer(): [ClassAggregateLiteral] {...} -# 1689| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1689| ValueCategory = prvalue -# 1689| getAFieldExpr(obj1): [PointerFieldAccess] obj1 -# 1689| Type = [SpecifiedType] const CapturedLambdaMyObj -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] lambda [] type at line 1689, col. 29 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(obj2): [PointerFieldAccess] obj2 -# 1689| Type = [Class] CapturedLambdaMyObj -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] lambda [] type at line 1689, col. 29 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(x): [PointerFieldAccess] x -# 1689| Type = [IntType] int -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] const lambda [] type at line 1688, col. 25 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(y): [PointerFieldAccess] y -# 1689| Type = [IntType] int -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] const lambda [] type at line 1688, col. 25 * -# 1689| ValueCategory = prvalue(load) -# 1689| getAFieldExpr(z): [PointerFieldAccess] z -# 1689| Type = [IntType] int -# 1689| ValueCategory = prvalue(load) -# 1689| getQualifier(): [ThisExpr] this -# 1689| Type = [PointerType] const lambda [] type at line 1688, col. 25 * -# 1689| ValueCategory = prvalue(load) -# 1690| getStmt(1): [ReturnStmt] return ... -# 1689| [CopyAssignmentOperator] (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)& (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator=((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29) const&) -# 1689| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1690, col. 25 && +# 1690| [Constructor] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::(unnamed constructor)() +# 1690| : +# 1690| [ConstMemberFunction] void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const +# 1690| : +# 1690| getEntryPoint(): [BlockStmt] { ... } +# 1691| getStmt(0): [DeclStmt] declaration +# 1691| getDeclarationEntry(0): [VariableDeclarationEntry] definition of lambda_inner +# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1691| getVariable().getInitializer(): [Initializer] initializer for lambda_inner +# 1691| getExpr(): [LambdaExpression] [...](...){...} +# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1691| ValueCategory = prvalue +# 1691| getInitializer(): [ClassAggregateLiteral] {...} +# 1691| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1691| ValueCategory = prvalue +# 1691| getAFieldExpr(obj1): [PointerFieldAccess] obj1 +# 1691| Type = [SpecifiedType] const CapturedLambdaMyObj +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] lambda [] type at line 1691, col. 29 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(obj2): [PointerFieldAccess] obj2 +# 1691| Type = [Class] CapturedLambdaMyObj +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] lambda [] type at line 1691, col. 29 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(x): [PointerFieldAccess] x +# 1691| Type = [IntType] int +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(y): [PointerFieldAccess] y +# 1691| Type = [IntType] int +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * +# 1691| ValueCategory = prvalue(load) +# 1691| getAFieldExpr(z): [PointerFieldAccess] z +# 1691| Type = [IntType] int +# 1691| ValueCategory = prvalue(load) +# 1691| getQualifier(): [ThisExpr] this +# 1691| Type = [PointerType] const lambda [] type at line 1690, col. 25 * +# 1691| ValueCategory = prvalue(load) +# 1692| getStmt(1): [ReturnStmt] return ... +# 1691| [CopyAssignmentOperator] (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)& (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator=((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29) const&) +# 1691| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1689, col. 29 & -# 1689| [CopyConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29) const&) -# 1689| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1691, col. 29 & +# 1691| [CopyConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29) const&) +# 1691| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1689, col. 29 & -# 1689| [MoveConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)&&) -# 1689| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1691, col. 29 & +# 1691| [MoveConstructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)((void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)&&) +# 1691| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1689, col. 29 && -# 1689| [Constructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::(unnamed constructor)() -# 1689| : -# 1689| [ConstMemberFunction] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator()() const -# 1689| : -# 1689| getEntryPoint(): [BlockStmt] { ... } -# 1689| getStmt(0): [EmptyStmt] ; -# 1689| getStmt(1): [ReturnStmt] return ... -# 1693| [TopLevelFunction] int goto_on_same_line() -# 1693| : -# 1693| getEntryPoint(): [BlockStmt] { ... } -# 1694| getStmt(0): [DeclStmt] declaration -# 1694| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1694| Type = [IntType] int -# 1694| getVariable().getInitializer(): [Initializer] initializer for x -# 1694| getExpr(): [Literal] 42 -# 1694| Type = [IntType] int -# 1694| Value = [Literal] 42 -# 1694| ValueCategory = prvalue -# 1695| getStmt(1): [GotoStmt] goto ... -# 1695| getStmt(2): [LabelStmt] label ...: -# 1696| getStmt(3): [ReturnStmt] return ... -# 1696| getExpr(): [VariableAccess] x +#-----| Type = [RValueReferenceType] lambda [] type at line 1691, col. 29 && +# 1691| [Constructor] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::(unnamed constructor)() +# 1691| : +# 1691| [ConstMemberFunction] void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const +# 1691| : +# 1691| getEntryPoint(): [BlockStmt] { ... } +# 1691| getStmt(0): [EmptyStmt] ; +# 1691| getStmt(1): [ReturnStmt] return ... +# 1695| [TopLevelFunction] int goto_on_same_line() +# 1695| : +# 1695| getEntryPoint(): [BlockStmt] { ... } +# 1696| getStmt(0): [DeclStmt] declaration +# 1696| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1696| Type = [IntType] int -# 1696| ValueCategory = prvalue(load) -# 1699| [CopyAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass const&) -# 1699| : +# 1696| getVariable().getInitializer(): [Initializer] initializer for x +# 1696| getExpr(): [Literal] 42 +# 1696| Type = [IntType] int +# 1696| Value = [Literal] 42 +# 1696| ValueCategory = prvalue +# 1697| getStmt(1): [GotoStmt] goto ... +# 1697| getStmt(2): [LabelStmt] label ...: +# 1698| getStmt(3): [ReturnStmt] return ... +# 1698| getExpr(): [VariableAccess] x +# 1698| Type = [IntType] int +# 1698| ValueCategory = prvalue(load) +# 1701| [CopyAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass const&) +# 1701| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1699| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) -# 1699| : +# 1701| [MoveAssignmentOperator] TrivialLambdaClass& TrivialLambdaClass::operator=(TrivialLambdaClass&&) +# 1701| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TrivialLambdaClass && -# 1701| [ConstMemberFunction] void TrivialLambdaClass::m() const -# 1701| : -# 1701| getEntryPoint(): [BlockStmt] { ... } -# 1702| getStmt(0): [DeclStmt] declaration -# 1702| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_outer -# 1702| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1702| getVariable().getInitializer(): [Initializer] initializer for l_m_outer -# 1702| getExpr(): [LambdaExpression] [...](...){...} -# 1702| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1702| ValueCategory = prvalue -# 1702| getInitializer(): [ClassAggregateLiteral] {...} -# 1702| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1702| ValueCategory = prvalue -# 1702| getAFieldExpr((captured this)): [PointerDereferenceExpr] * ... -# 1702| Type = [SpecifiedType] const TrivialLambdaClass -# 1702| ValueCategory = prvalue(load) -# 1702| getOperand(): [ThisExpr] this -# 1702| Type = [SpecifiedType] const TrivialLambdaClass *const -# 1702| ValueCategory = prvalue(load) +# 1703| [ConstMemberFunction] void TrivialLambdaClass::m() const +# 1703| : +# 1703| getEntryPoint(): [BlockStmt] { ... } +# 1704| getStmt(0): [DeclStmt] declaration +# 1704| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_outer +# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1704| getVariable().getInitializer(): [Initializer] initializer for l_m_outer +# 1704| getExpr(): [LambdaExpression] [...](...){...} +# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1704| ValueCategory = prvalue +# 1704| getInitializer(): [ClassAggregateLiteral] {...} +# 1704| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1704| ValueCategory = prvalue +# 1704| getAFieldExpr((captured this)): [PointerDereferenceExpr] * ... +# 1704| Type = [SpecifiedType] const TrivialLambdaClass +# 1704| ValueCategory = prvalue(load) +# 1704| getOperand(): [ThisExpr] this +# 1704| Type = [SpecifiedType] const TrivialLambdaClass *const +# 1704| ValueCategory = prvalue(load) +# 1711| getStmt(1): [ReturnStmt] return ... +# 1704| [CopyAssignmentOperator] (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)& (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator=((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26) const&) +# 1704| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1704, col. 26 & +# 1704| [CopyConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26) const&) +# 1704| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1704, col. 26 & +# 1704| [MoveConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)&&) +# 1704| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] lambda [] type at line 1704, col. 26 && +# 1704| [Constructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::(unnamed constructor)() +# 1704| : +# 1704| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const +# 1704| : +# 1704| getEntryPoint(): [BlockStmt] { ... } +# 1705| getStmt(0): [ExprStmt] ExprStmt +# 1705| getExpr(): [FunctionCall] call to m +# 1705| Type = [VoidType] void +# 1705| ValueCategory = prvalue +# 1705| getQualifier(): [AddressOfExpr] & ... +# 1705| Type = [PointerType] const TrivialLambdaClass * +# 1705| ValueCategory = prvalue +# 1705| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) +# 1705| Type = [SpecifiedType] const TrivialLambdaClass +# 1705| ValueCategory = lvalue +# 1705| getQualifier(): [ThisExpr] this +# 1705| Type = [PointerType] const lambda [] type at line 1704, col. 26 * +# 1705| ValueCategory = prvalue(load) +# 1707| getStmt(1): [DeclStmt] declaration +# 1707| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_inner +# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1707| getVariable().getInitializer(): [Initializer] initializer for l_m_inner +# 1707| getExpr(): [LambdaExpression] [...](...){...} +# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1707| ValueCategory = prvalue +# 1707| getInitializer(): [ClassAggregateLiteral] {...} +# 1707| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1707| ValueCategory = prvalue +# 1707| getAFieldExpr((captured this)): [PointerFieldAccess] (captured this) +# 1707| Type = [SpecifiedType] const TrivialLambdaClass +# 1707| ValueCategory = prvalue(load) +# 1707| getQualifier(): [ThisExpr] this +# 1707| Type = [PointerType] lambda [] type at line 1707, col. 30 * +# 1707| ValueCategory = prvalue(load) +# 1710| getStmt(2): [ReturnStmt] return ... +# 1707| [CopyAssignmentOperator] (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)& (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator=((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30) const&) +# 1707| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1707, col. 30 & +# 1707| [CopyConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30) const&) +# 1707| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const lambda [] type at line 1707, col. 30 & +# 1707| [MoveConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)&&) +# 1707| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] lambda [] type at line 1707, col. 30 && +# 1707| [Constructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::(unnamed constructor)() +# 1707| : +# 1707| [ConstMemberFunction] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const +# 1707| : +# 1707| getEntryPoint(): [BlockStmt] { ... } +# 1708| getStmt(0): [ExprStmt] ExprStmt +# 1708| getExpr(): [FunctionCall] call to m +# 1708| Type = [VoidType] void +# 1708| ValueCategory = prvalue +# 1708| getQualifier(): [AddressOfExpr] & ... +# 1708| Type = [PointerType] const TrivialLambdaClass * +# 1708| ValueCategory = prvalue +# 1708| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) +# 1708| Type = [SpecifiedType] const TrivialLambdaClass +# 1708| ValueCategory = lvalue +# 1708| getQualifier(): [ThisExpr] this +# 1708| Type = [PointerType] const lambda [] type at line 1707, col. 30 * +# 1708| ValueCategory = prvalue(load) # 1709| getStmt(1): [ReturnStmt] return ... -# 1702| [CopyAssignmentOperator] (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)& (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator=((void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26) const&) -# 1702| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1702, col. 26 & -# 1702| [CopyConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26) const&) -# 1702| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1702, col. 26 & -# 1702| [MoveConstructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::(unnamed constructor)((void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)&&) -# 1702| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1702, col. 26 && -# 1702| [Constructor] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::(unnamed constructor)() -# 1702| : -# 1702| [ConstMemberFunction] void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const -# 1702| : -# 1702| getEntryPoint(): [BlockStmt] { ... } -# 1703| getStmt(0): [ExprStmt] ExprStmt -# 1703| getExpr(): [FunctionCall] call to m -# 1703| Type = [VoidType] void -# 1703| ValueCategory = prvalue -# 1703| getQualifier(): [AddressOfExpr] & ... -# 1703| Type = [PointerType] const TrivialLambdaClass * -# 1703| ValueCategory = prvalue -# 1703| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) -# 1703| Type = [SpecifiedType] const TrivialLambdaClass -# 1703| ValueCategory = lvalue -# 1703| getQualifier(): [ThisExpr] this -# 1703| Type = [PointerType] const lambda [] type at line 1702, col. 26 * -# 1703| ValueCategory = prvalue(load) -# 1705| getStmt(1): [DeclStmt] declaration -# 1705| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_m_inner -# 1705| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1705| getVariable().getInitializer(): [Initializer] initializer for l_m_inner -# 1705| getExpr(): [LambdaExpression] [...](...){...} -# 1705| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1705| ValueCategory = prvalue -# 1705| getInitializer(): [ClassAggregateLiteral] {...} -# 1705| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1705| ValueCategory = prvalue -# 1705| getAFieldExpr((captured this)): [PointerFieldAccess] (captured this) -# 1705| Type = [SpecifiedType] const TrivialLambdaClass -# 1705| ValueCategory = prvalue(load) -# 1705| getQualifier(): [ThisExpr] this -# 1705| Type = [PointerType] lambda [] type at line 1705, col. 30 * -# 1705| ValueCategory = prvalue(load) -# 1708| getStmt(2): [ReturnStmt] return ... -# 1705| [CopyAssignmentOperator] (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)& (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator=((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30) const&) -# 1705| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1705, col. 30 & -# 1705| [CopyConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30) const&) -# 1705| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1705, col. 30 & -# 1705| [MoveConstructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::(unnamed constructor)((void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)&&) -# 1705| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1705, col. 30 && -# 1705| [Constructor] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::(unnamed constructor)() -# 1705| : -# 1705| [ConstMemberFunction] void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator()() const -# 1705| : -# 1705| getEntryPoint(): [BlockStmt] { ... } -# 1706| getStmt(0): [ExprStmt] ExprStmt -# 1706| getExpr(): [FunctionCall] call to m -# 1706| Type = [VoidType] void -# 1706| ValueCategory = prvalue -# 1706| getQualifier(): [AddressOfExpr] & ... -# 1706| Type = [PointerType] const TrivialLambdaClass * -# 1706| ValueCategory = prvalue -# 1706| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this) -# 1706| Type = [SpecifiedType] const TrivialLambdaClass -# 1706| ValueCategory = lvalue -# 1706| getQualifier(): [ThisExpr] this -# 1706| Type = [PointerType] const lambda [] type at line 1705, col. 30 * -# 1706| ValueCategory = prvalue(load) -# 1707| getStmt(1): [ReturnStmt] return ... -# 1712| [TopLevelFunction] void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1712| : -# 1712| getParameter(0): [Parameter] p1 -# 1712| Type = [Class] TrivialLambdaClass -# 1712| getParameter(1): [Parameter] p2 -# 1712| Type = [LValueReferenceType] TrivialLambdaClass & -# 1712| getParameter(2): [Parameter] p3 -# 1712| Type = [RValueReferenceType] TrivialLambdaClass && -# 1712| getEntryPoint(): [BlockStmt] { ... } -# 1713| getStmt(0): [DeclStmt] declaration -# 1713| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l1 -# 1713| Type = [SpecifiedType] const TrivialLambdaClass -# 1714| getStmt(1): [DeclStmt] declaration -# 1714| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l2 -# 1714| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1714| getVariable().getInitializer(): [Initializer] initializer for l2 -# 1714| getExpr(): [Literal] 0 -# 1714| Type = [Class] TrivialLambdaClass -# 1714| Value = [Literal] 0 -# 1714| ValueCategory = prvalue -# 1714| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1714| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1714| ValueCategory = prvalue -# 1714| getExpr(): [CStyleCast] (const TrivialLambdaClass)... -# 1714| Conversion = [GlvalueConversion] glvalue conversion -# 1714| Type = [SpecifiedType] const TrivialLambdaClass -# 1714| ValueCategory = lvalue -# 1714| getExpr(): [TemporaryObjectExpr] temporary object -# 1714| Type = [Class] TrivialLambdaClass -# 1714| ValueCategory = lvalue -# 1716| getStmt(2): [DeclStmt] declaration -# 1716| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_outer1 -# 1716| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1716| getVariable().getInitializer(): [Initializer] initializer for l_outer1 -# 1716| getExpr(): [LambdaExpression] [...](...){...} -# 1716| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1714| [TopLevelFunction] void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1714| : +# 1714| getParameter(0): [Parameter] p1 +# 1714| Type = [Class] TrivialLambdaClass +# 1714| getParameter(1): [Parameter] p2 +# 1714| Type = [LValueReferenceType] TrivialLambdaClass & +# 1714| getParameter(2): [Parameter] p3 +# 1714| Type = [RValueReferenceType] TrivialLambdaClass && +# 1714| getEntryPoint(): [BlockStmt] { ... } +# 1715| getStmt(0): [DeclStmt] declaration +# 1715| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l1 +# 1715| Type = [SpecifiedType] const TrivialLambdaClass +# 1716| getStmt(1): [DeclStmt] declaration +# 1716| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l2 +# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1716| getVariable().getInitializer(): [Initializer] initializer for l2 +# 1716| getExpr(): [Literal] 0 +# 1716| Type = [Class] TrivialLambdaClass +# 1716| Value = [Literal] 0 # 1716| ValueCategory = prvalue -# 1716| getInitializer(): [ClassAggregateLiteral] {...} -# 1716| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1716| ValueCategory = prvalue -# 1716| getAFieldExpr(p1): [VariableAccess] p1 +# 1716| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1716| ValueCategory = prvalue +# 1716| getExpr(): [CStyleCast] (const TrivialLambdaClass)... +# 1716| Conversion = [GlvalueConversion] glvalue conversion +# 1716| Type = [SpecifiedType] const TrivialLambdaClass +# 1716| ValueCategory = lvalue +# 1716| getExpr(): [TemporaryObjectExpr] temporary object # 1716| Type = [Class] TrivialLambdaClass -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(p2): [VariableAccess] p2 -# 1716| Type = [LValueReferenceType] TrivialLambdaClass & -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(p3): [VariableAccess] p3 -# 1716| Type = [RValueReferenceType] TrivialLambdaClass && -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(l1): [VariableAccess] l1 -# 1716| Type = [SpecifiedType] const TrivialLambdaClass -# 1716| ValueCategory = prvalue(load) -# 1716| getAFieldExpr(l2): [VariableAccess] l2 -# 1716| Type = [LValueReferenceType] const TrivialLambdaClass & -# 1716| ValueCategory = prvalue(load) +# 1716| ValueCategory = lvalue +# 1718| getStmt(2): [DeclStmt] declaration +# 1718| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_outer1 +# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1718| getVariable().getInitializer(): [Initializer] initializer for l_outer1 +# 1718| getExpr(): [LambdaExpression] [...](...){...} +# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1718| ValueCategory = prvalue +# 1718| getInitializer(): [ClassAggregateLiteral] {...} +# 1718| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1718| ValueCategory = prvalue +# 1718| getAFieldExpr(p1): [VariableAccess] p1 +# 1718| Type = [Class] TrivialLambdaClass +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(p2): [VariableAccess] p2 +# 1718| Type = [LValueReferenceType] TrivialLambdaClass & +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(p3): [VariableAccess] p3 +# 1718| Type = [RValueReferenceType] TrivialLambdaClass && +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(l1): [VariableAccess] l1 +# 1718| Type = [SpecifiedType] const TrivialLambdaClass +# 1718| ValueCategory = prvalue(load) +# 1718| getAFieldExpr(l2): [VariableAccess] l2 +# 1718| Type = [LValueReferenceType] const TrivialLambdaClass & +# 1718| ValueCategory = prvalue(load) #-----| getAFieldExpr(p2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [Class] TrivialLambdaClass #-----| ValueCategory = prvalue(load) @@ -13552,723 +13705,723 @@ ir.cpp: #-----| getAFieldExpr(l2).getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [SpecifiedType] const TrivialLambdaClass #-----| ValueCategory = prvalue(load) -# 1719| getStmt(3): [ReturnStmt] return ... -# 1716| [CopyAssignmentOperator] (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)& (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator=((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21) const&) -# 1716| : +# 1721| getStmt(3): [ReturnStmt] return ... +# 1718| [CopyAssignmentOperator] (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)& (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator=((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21) const&) +# 1718| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1716, col. 21 & -# 1716| [CopyConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21) const&) -# 1716| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1718, col. 21 & +# 1718| [CopyConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21) const&) +# 1718| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1716, col. 21 & -# 1716| [MoveConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)&&) -# 1716| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1718, col. 21 & +# 1718| [MoveConstructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)((void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)&&) +# 1718| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1716, col. 21 && -# 1716| [Constructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::(unnamed constructor)() -# 1716| : -# 1716| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const -# 1716| : -# 1716| getEntryPoint(): [BlockStmt] { ... } -# 1717| getStmt(0): [DeclStmt] declaration -# 1717| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_inner1 -# 1717| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1717| getVariable().getInitializer(): [Initializer] initializer for l_inner1 -# 1717| getExpr(): [LambdaExpression] [...](...){...} -# 1717| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1717| ValueCategory = prvalue -# 1717| getInitializer(): [ClassAggregateLiteral] {...} -# 1717| Type = [Closure,LocalClass] decltype([...](...){...}) -# 1717| ValueCategory = prvalue -# 1717| getAFieldExpr(p1): [PointerFieldAccess] p1 -# 1717| Type = [Class] TrivialLambdaClass -# 1717| ValueCategory = prvalue(load) -# 1717| getQualifier(): [ThisExpr] this -# 1717| Type = [PointerType] lambda [] type at line 1717, col. 25 * -# 1717| ValueCategory = prvalue(load) -# 1718| getStmt(1): [ReturnStmt] return ... -# 1717| [CopyAssignmentOperator] (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)& (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator=((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25) const&) -# 1717| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1718, col. 21 && +# 1718| [Constructor] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::(unnamed constructor)() +# 1718| : +# 1718| [ConstMemberFunction] void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const +# 1718| : +# 1718| getEntryPoint(): [BlockStmt] { ... } +# 1719| getStmt(0): [DeclStmt] declaration +# 1719| getDeclarationEntry(0): [VariableDeclarationEntry] definition of l_inner1 +# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1719| getVariable().getInitializer(): [Initializer] initializer for l_inner1 +# 1719| getExpr(): [LambdaExpression] [...](...){...} +# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1719| ValueCategory = prvalue +# 1719| getInitializer(): [ClassAggregateLiteral] {...} +# 1719| Type = [Closure,LocalClass] decltype([...](...){...}) +# 1719| ValueCategory = prvalue +# 1719| getAFieldExpr(p1): [PointerFieldAccess] p1 +# 1719| Type = [Class] TrivialLambdaClass +# 1719| ValueCategory = prvalue(load) +# 1719| getQualifier(): [ThisExpr] this +# 1719| Type = [PointerType] lambda [] type at line 1719, col. 25 * +# 1719| ValueCategory = prvalue(load) +# 1720| getStmt(1): [ReturnStmt] return ... +# 1719| [CopyAssignmentOperator] (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)& (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator=((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25) const&) +# 1719| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1717, col. 25 & -# 1717| [CopyConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25) const&) -# 1717| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1719, col. 25 & +# 1719| [CopyConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25) const&) +# 1719| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const lambda [] type at line 1717, col. 25 & -# 1717| [MoveConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)&&) -# 1717| : +#-----| Type = [LValueReferenceType] const lambda [] type at line 1719, col. 25 & +# 1719| [MoveConstructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)((void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)&&) +# 1719| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [RValueReferenceType] lambda [] type at line 1717, col. 25 && -# 1717| [Constructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::(unnamed constructor)() -# 1717| : -# 1717| [ConstMemberFunction] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator()() const -# 1717| : -# 1717| getEntryPoint(): [BlockStmt] { ... } -# 1717| getStmt(0): [ReturnStmt] return ... -# 1721| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) -# 1721| : +#-----| Type = [RValueReferenceType] lambda [] type at line 1719, col. 25 && +# 1719| [Constructor] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::(unnamed constructor)() +# 1719| : +# 1719| [ConstMemberFunction] void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const +# 1719| : +# 1719| getEntryPoint(): [BlockStmt] { ... } +# 1719| getStmt(0): [ReturnStmt] return ... +# 1723| [CopyAssignmentOperator] CopyConstructorWithImplicitArgumentClass& CopyConstructorWithImplicitArgumentClass::operator=(CopyConstructorWithImplicitArgumentClass const&) +# 1723| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1724| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1724| : -# 1724| : -# 1724| getEntryPoint(): [BlockStmt] { ... } -# 1724| getStmt(0): [ReturnStmt] return ... -# 1725| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1725| : -# 1725| getParameter(0): [Parameter] c -# 1725| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1725| : -# 1725| getEntryPoint(): [BlockStmt] { ... } -# 1726| getStmt(0): [ExprStmt] ExprStmt -# 1726| getExpr(): [AssignExpr] ... = ... -# 1726| Type = [IntType] int -# 1726| ValueCategory = lvalue -# 1726| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x -# 1726| Type = [IntType] int -# 1726| ValueCategory = lvalue -# 1726| getQualifier(): [ThisExpr] this -# 1726| Type = [PointerType] CopyConstructorWithImplicitArgumentClass * -# 1726| ValueCategory = prvalue(load) -# 1726| getRValue(): [ReferenceFieldAccess] x -# 1726| Type = [IntType] int -# 1726| ValueCategory = prvalue(load) -# 1726| getQualifier(): [VariableAccess] c -# 1726| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1726| ValueCategory = prvalue(load) -# 1726| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1726| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1726| ValueCategory = lvalue -# 1727| getStmt(1): [ReturnStmt] return ... -# 1730| [CopyAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass const&) -# 1730| : +# 1726| [Constructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1726| : +# 1726| : +# 1726| getEntryPoint(): [BlockStmt] { ... } +# 1726| getStmt(0): [ReturnStmt] return ... +# 1727| [CopyConstructor] void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1727| : +# 1727| getParameter(0): [Parameter] c +# 1727| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1727| : +# 1727| getEntryPoint(): [BlockStmt] { ... } +# 1728| getStmt(0): [ExprStmt] ExprStmt +# 1728| getExpr(): [AssignExpr] ... = ... +# 1728| Type = [IntType] int +# 1728| ValueCategory = lvalue +# 1728| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 1728| Type = [IntType] int +# 1728| ValueCategory = lvalue +# 1728| getQualifier(): [ThisExpr] this +# 1728| Type = [PointerType] CopyConstructorWithImplicitArgumentClass * +# 1728| ValueCategory = prvalue(load) +# 1728| getRValue(): [ReferenceFieldAccess] x +# 1728| Type = [IntType] int +# 1728| ValueCategory = prvalue(load) +# 1728| getQualifier(): [VariableAccess] c +# 1728| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1728| ValueCategory = prvalue(load) +# 1728| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1728| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1728| ValueCategory = lvalue +# 1729| getStmt(1): [ReturnStmt] return ... +# 1732| [CopyAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass const&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1730| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) -# 1730| : +# 1732| [MoveAssignmentOperator] CopyConstructorWithBitwiseCopyClass& CopyConstructorWithBitwiseCopyClass::operator=(CopyConstructorWithBitwiseCopyClass&&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1730| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) -# 1730| : +# 1732| [CopyConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass const&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorWithBitwiseCopyClass & -# 1730| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) -# 1730| : +# 1732| [MoveConstructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass(CopyConstructorWithBitwiseCopyClass&&) +# 1732| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorWithBitwiseCopyClass && -# 1733| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1733| : -# 1733| : -# 1733| getEntryPoint(): [BlockStmt] { ... } -# 1733| getStmt(0): [ReturnStmt] return ... -# 1736| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) -# 1736| : +# 1735| [Constructor] void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1735| : +# 1735| : +# 1735| getEntryPoint(): [BlockStmt] { ... } +# 1735| getStmt(0): [ReturnStmt] return ... +# 1738| [CopyAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass const&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1736| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) -# 1736| : +# 1738| [MoveAssignmentOperator] CopyConstructorTestNonVirtualClass& CopyConstructorTestNonVirtualClass::operator=(CopyConstructorTestNonVirtualClass&&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1736| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1736| : +# 1738| [CopyConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1736| : -# 1736| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass -# 1736| Type = [VoidType] void -# 1736| ValueCategory = prvalue -# 1736| getArgument(0): [VariableAccess] (unnamed parameter 0) -# 1736| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1736| ValueCategory = prvalue(load) -# 1736| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1736| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1736| ValueCategory = prvalue -# 1736| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... -# 1736| Conversion = [BaseClassConversion] base class conversion -# 1736| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1736| ValueCategory = lvalue -# 1736| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1736| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass -# 1736| ValueCategory = lvalue -# 1736| getInitializer(1): (no string representation) -# 1736| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass -# 1736| ValueCategory = prvalue -# 1736| getEntryPoint(): [BlockStmt] { ... } -# 1736| getStmt(0): [ReturnStmt] return ... -# 1736| [MoveConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass&&) -# 1736| : +# 1738| : +# 1738| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1738| Type = [VoidType] void +# 1738| ValueCategory = prvalue +# 1738| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1738| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1738| ValueCategory = prvalue(load) +# 1738| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1738| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1738| ValueCategory = prvalue +# 1738| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1738| Conversion = [BaseClassConversion] base class conversion +# 1738| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1738| ValueCategory = lvalue +# 1738| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1738| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1738| ValueCategory = lvalue +# 1738| getInitializer(1): (no string representation) +# 1738| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1738| ValueCategory = prvalue +# 1738| getEntryPoint(): [BlockStmt] { ... } +# 1738| getStmt(0): [ReturnStmt] return ... +# 1738| [MoveConstructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass&&) +# 1738| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestNonVirtualClass && -# 1740| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1740| : -# 1740| : -# 1740| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass -# 1740| Type = [VoidType] void -# 1740| ValueCategory = prvalue -# 1740| getInitializer(1): [ConstructorDirectInit] call to CopyConstructorWithBitwiseCopyClass -# 1740| Type = [VoidType] void -# 1740| ValueCategory = prvalue -# 1740| getEntryPoint(): [BlockStmt] { ... } -# 1740| getStmt(0): [ReturnStmt] return ... -# 1743| [CopyAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass const&) -# 1743| : +# 1742| [Constructor] void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1742| : +# 1742| : +# 1742| getInitializer(0): [ConstructorDirectInit] call to CopyConstructorWithImplicitArgumentClass +# 1742| Type = [VoidType] void +# 1742| ValueCategory = prvalue +# 1742| getInitializer(1): [ConstructorDirectInit] call to CopyConstructorWithBitwiseCopyClass +# 1742| Type = [VoidType] void +# 1742| ValueCategory = prvalue +# 1742| getEntryPoint(): [BlockStmt] { ... } +# 1742| getStmt(0): [ReturnStmt] return ... +# 1745| [CopyAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass const&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1743| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) -# 1743| : +# 1745| [MoveAssignmentOperator] CopyConstructorTestVirtualClass& CopyConstructorTestVirtualClass::operator=(CopyConstructorTestVirtualClass&&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1743| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1743| : +# 1745| [CopyConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1743| : -# 1743| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass -# 1743| Type = [VoidType] void -# 1743| ValueCategory = prvalue -# 1743| getArgument(0): [VariableAccess] (unnamed parameter 0) -# 1743| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1743| ValueCategory = prvalue(load) -# 1743| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1743| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & -# 1743| ValueCategory = prvalue -# 1743| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... -# 1743| Conversion = [BaseClassConversion] base class conversion -# 1743| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass -# 1743| ValueCategory = lvalue -# 1743| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1743| Type = [SpecifiedType] const CopyConstructorTestVirtualClass -# 1743| ValueCategory = lvalue -# 1743| getInitializer(1): (no string representation) -# 1743| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass -# 1743| ValueCategory = prvalue -# 1743| getEntryPoint(): [BlockStmt] { ... } -# 1743| getStmt(0): [ReturnStmt] return ... -# 1743| [MoveConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass&&) -# 1743| : +# 1745| : +# 1745| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1745| Type = [VoidType] void +# 1745| ValueCategory = prvalue +# 1745| getArgument(0): [VariableAccess] (unnamed parameter 0) +# 1745| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1745| ValueCategory = prvalue(load) +# 1745| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1745| Type = [LValueReferenceType] const CopyConstructorWithImplicitArgumentClass & +# 1745| ValueCategory = prvalue +# 1745| getExpr(): [CStyleCast] (const CopyConstructorWithImplicitArgumentClass)... +# 1745| Conversion = [BaseClassConversion] base class conversion +# 1745| Type = [SpecifiedType] const CopyConstructorWithImplicitArgumentClass +# 1745| ValueCategory = lvalue +# 1745| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1745| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1745| ValueCategory = lvalue +# 1745| getInitializer(1): (no string representation) +# 1745| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass +# 1745| ValueCategory = prvalue +# 1745| getEntryPoint(): [BlockStmt] { ... } +# 1745| getStmt(0): [ReturnStmt] return ... +# 1745| [MoveConstructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass&&) +# 1745| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] CopyConstructorTestVirtualClass && -# 1747| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1747| : -# 1747| : -# 1747| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass -# 1747| Type = [VoidType] void -# 1747| ValueCategory = prvalue -# 1747| getInitializer(1): [ConstructorVirtualInit] call to CopyConstructorWithBitwiseCopyClass -# 1747| Type = [VoidType] void -# 1747| ValueCategory = prvalue -# 1747| getEntryPoint(): [BlockStmt] { ... } -# 1747| getStmt(0): [ReturnStmt] return ... -# 1750| [TopLevelFunction] int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1750| : -# 1751| getParameter(0): [Parameter] x -# 1751| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1752| getParameter(1): [Parameter] y -# 1752| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1752| getEntryPoint(): [BlockStmt] { ... } -# 1753| getStmt(0): [DeclStmt] declaration -# 1753| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cx -# 1753| Type = [Class] CopyConstructorTestNonVirtualClass -# 1753| getVariable().getInitializer(): [Initializer] initializer for cx -# 1753| getExpr(): [ConstructorCall] call to CopyConstructorTestNonVirtualClass -# 1753| Type = [VoidType] void -# 1753| ValueCategory = prvalue -# 1753| getArgument(0): [VariableAccess] x -# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1753| ValueCategory = prvalue(load) -# 1753| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & -# 1753| ValueCategory = prvalue -# 1753| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1753| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass -# 1753| ValueCategory = lvalue -# 1754| getStmt(1): [DeclStmt] declaration -# 1754| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cy -# 1754| Type = [Class] CopyConstructorTestVirtualClass -# 1754| getVariable().getInitializer(): [Initializer] initializer for cy -# 1754| getExpr(): [ConstructorCall] call to CopyConstructorTestVirtualClass -# 1754| Type = [VoidType] void -# 1754| ValueCategory = prvalue -# 1754| getArgument(0): [VariableAccess] y -# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1754| ValueCategory = prvalue(load) -# 1754| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & -# 1754| ValueCategory = prvalue -# 1754| getExpr(): [ReferenceDereferenceExpr] (reference dereference) -# 1754| Type = [SpecifiedType] const CopyConstructorTestVirtualClass -# 1754| ValueCategory = lvalue -# 1755| getStmt(2): [ReturnStmt] return ... -# 1757| [TopLevelFunction] void if_initialization(int) -# 1757| : -# 1757| getParameter(0): [Parameter] x -# 1757| Type = [IntType] int -# 1757| getEntryPoint(): [BlockStmt] { ... } -# 1758| getStmt(0): [IfStmt] if (...) ... -# 1758| getInitialization(): [DeclStmt] declaration -# 1758| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1758| Type = [IntType] int -# 1758| getVariable().getInitializer(): [Initializer] initializer for y -# 1758| getExpr(): [VariableAccess] x -# 1758| Type = [IntType] int -# 1758| ValueCategory = prvalue(load) -# 1758| getCondition(): [AddExpr] ... + ... -# 1758| Type = [IntType] int -# 1758| ValueCategory = prvalue -# 1758| getLeftOperand(): [VariableAccess] x -# 1758| Type = [IntType] int -# 1758| ValueCategory = prvalue(load) -# 1758| getRightOperand(): [Literal] 1 -# 1758| Type = [IntType] int -# 1758| Value = [Literal] 1 -# 1758| ValueCategory = prvalue -# 1758| getThen(): [BlockStmt] { ... } -# 1759| getStmt(0): [ExprStmt] ExprStmt -# 1759| getExpr(): [AssignExpr] ... = ... -# 1759| Type = [IntType] int -# 1759| ValueCategory = lvalue -# 1759| getLValue(): [VariableAccess] x -# 1759| Type = [IntType] int -# 1759| ValueCategory = lvalue -# 1759| getRValue(): [AddExpr] ... + ... -# 1759| Type = [IntType] int -# 1759| ValueCategory = prvalue -# 1759| getLeftOperand(): [VariableAccess] x -# 1759| Type = [IntType] int -# 1759| ValueCategory = prvalue(load) -# 1759| getRightOperand(): [VariableAccess] y -# 1759| Type = [IntType] int -# 1759| ValueCategory = prvalue(load) -# 1758| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1758| Conversion = [BoolConversion] conversion to bool -# 1758| Type = [BoolType] bool -# 1758| ValueCategory = prvalue -# 1762| getStmt(1): [DeclStmt] declaration -# 1762| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1762| Type = [IntType] int -# 1763| getStmt(2): [IfStmt] if (...) ... -# 1763| getInitialization(): [ExprStmt] ExprStmt -# 1763| getExpr(): [AssignExpr] ... = ... -# 1763| Type = [IntType] int -# 1763| ValueCategory = lvalue -# 1763| getLValue(): [VariableAccess] w -# 1763| Type = [IntType] int -# 1763| ValueCategory = lvalue -# 1763| getRValue(): [VariableAccess] x -# 1763| Type = [IntType] int -# 1763| ValueCategory = prvalue(load) -# 1763| getCondition(): [AddExpr] ... + ... -# 1763| Type = [IntType] int -# 1763| ValueCategory = prvalue -# 1763| getLeftOperand(): [VariableAccess] x -# 1763| Type = [IntType] int -# 1763| ValueCategory = prvalue(load) -# 1763| getRightOperand(): [Literal] 1 -# 1763| Type = [IntType] int -# 1763| Value = [Literal] 1 -# 1763| ValueCategory = prvalue -# 1763| getThen(): [BlockStmt] { ... } -# 1764| getStmt(0): [ExprStmt] ExprStmt -# 1764| getExpr(): [AssignExpr] ... = ... -# 1764| Type = [IntType] int -# 1764| ValueCategory = lvalue -# 1764| getLValue(): [VariableAccess] x -# 1764| Type = [IntType] int -# 1764| ValueCategory = lvalue -# 1764| getRValue(): [AddExpr] ... + ... -# 1764| Type = [IntType] int -# 1764| ValueCategory = prvalue -# 1764| getLeftOperand(): [VariableAccess] x -# 1764| Type = [IntType] int -# 1764| ValueCategory = prvalue(load) -# 1764| getRightOperand(): [VariableAccess] w -# 1764| Type = [IntType] int -# 1764| ValueCategory = prvalue(load) -# 1763| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1763| Conversion = [BoolConversion] conversion to bool -# 1763| Type = [BoolType] bool -# 1763| ValueCategory = prvalue -# 1767| getStmt(3): [IfStmt] if (...) ... -# 1767| getInitialization(): [ExprStmt] ExprStmt -# 1767| getExpr(): [AssignExpr] ... = ... -# 1767| Type = [IntType] int -# 1767| ValueCategory = lvalue -# 1767| getLValue(): [VariableAccess] w -# 1767| Type = [IntType] int -# 1767| ValueCategory = lvalue -# 1767| getRValue(): [VariableAccess] x -# 1767| Type = [IntType] int -# 1767| ValueCategory = prvalue(load) -# 1767| getCondition(): [ConditionDeclExpr] (condition decl) -# 1767| Type = [BoolType] bool -# 1767| ValueCategory = prvalue -# 1767| getVariableAccess(): [VariableAccess] w2 -# 1767| Type = [IntType] int -# 1767| ValueCategory = prvalue(load) -# 1767| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1767| Conversion = [BoolConversion] conversion to bool -# 1767| Type = [BoolType] bool -# 1767| ValueCategory = prvalue -# 1767| getThen(): [BlockStmt] { ... } -# 1768| getStmt(0): [ExprStmt] ExprStmt -# 1768| getExpr(): [AssignExpr] ... = ... -# 1768| Type = [IntType] int -# 1768| ValueCategory = lvalue -# 1768| getLValue(): [VariableAccess] x -# 1768| Type = [IntType] int -# 1768| ValueCategory = lvalue -# 1768| getRValue(): [AddExpr] ... + ... -# 1768| Type = [IntType] int -# 1768| ValueCategory = prvalue -# 1768| getLeftOperand(): [VariableAccess] x -# 1768| Type = [IntType] int -# 1768| ValueCategory = prvalue(load) -# 1768| getRightOperand(): [VariableAccess] w -# 1768| Type = [IntType] int -# 1768| ValueCategory = prvalue(load) -# 1771| getStmt(4): [IfStmt] if (...) ... -# 1771| getInitialization(): [DeclStmt] declaration -# 1771| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1771| Type = [IntType] int -# 1771| getVariable().getInitializer(): [Initializer] initializer for v -# 1771| getExpr(): [VariableAccess] x -# 1771| Type = [IntType] int -# 1771| ValueCategory = prvalue(load) -# 1771| getCondition(): [ConditionDeclExpr] (condition decl) -# 1771| Type = [BoolType] bool -# 1771| ValueCategory = prvalue -# 1771| getVariableAccess(): [VariableAccess] v2 -# 1771| Type = [IntType] int -# 1771| ValueCategory = prvalue(load) -# 1771| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1771| Conversion = [BoolConversion] conversion to bool -# 1771| Type = [BoolType] bool -# 1771| ValueCategory = prvalue -# 1771| getThen(): [BlockStmt] { ... } -# 1772| getStmt(0): [ExprStmt] ExprStmt -# 1772| getExpr(): [AssignExpr] ... = ... -# 1772| Type = [IntType] int -# 1772| ValueCategory = lvalue -# 1772| getLValue(): [VariableAccess] x -# 1772| Type = [IntType] int -# 1772| ValueCategory = lvalue -# 1772| getRValue(): [AddExpr] ... + ... -# 1772| Type = [IntType] int -# 1772| ValueCategory = prvalue -# 1772| getLeftOperand(): [VariableAccess] x -# 1772| Type = [IntType] int -# 1772| ValueCategory = prvalue(load) -# 1772| getRightOperand(): [VariableAccess] v -# 1772| Type = [IntType] int -# 1772| ValueCategory = prvalue(load) -# 1775| getStmt(5): [DeclStmt] declaration -# 1775| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1775| Type = [IntType] int -# 1775| getVariable().getInitializer(): [Initializer] initializer for z -# 1775| getExpr(): [VariableAccess] x -# 1775| Type = [IntType] int -# 1775| ValueCategory = prvalue(load) -# 1776| getStmt(6): [IfStmt] if (...) ... -# 1776| getCondition(): [VariableAccess] z -# 1776| Type = [IntType] int -# 1776| ValueCategory = prvalue(load) -# 1776| getThen(): [BlockStmt] { ... } -# 1777| getStmt(0): [ExprStmt] ExprStmt -# 1777| getExpr(): [AssignExpr] ... = ... +# 1749| [Constructor] void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1749| : +# 1749| : +# 1749| getInitializer(0): [ConstructorVirtualInit] call to CopyConstructorWithImplicitArgumentClass +# 1749| Type = [VoidType] void +# 1749| ValueCategory = prvalue +# 1749| getInitializer(1): [ConstructorVirtualInit] call to CopyConstructorWithBitwiseCopyClass +# 1749| Type = [VoidType] void +# 1749| ValueCategory = prvalue +# 1749| getEntryPoint(): [BlockStmt] { ... } +# 1749| getStmt(0): [ReturnStmt] return ... +# 1752| [TopLevelFunction] int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1752| : +# 1753| getParameter(0): [Parameter] x +# 1753| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1754| getParameter(1): [Parameter] y +# 1754| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1754| getEntryPoint(): [BlockStmt] { ... } +# 1755| getStmt(0): [DeclStmt] declaration +# 1755| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cx +# 1755| Type = [Class] CopyConstructorTestNonVirtualClass +# 1755| getVariable().getInitializer(): [Initializer] initializer for cx +# 1755| getExpr(): [ConstructorCall] call to CopyConstructorTestNonVirtualClass +# 1755| Type = [VoidType] void +# 1755| ValueCategory = prvalue +# 1755| getArgument(0): [VariableAccess] x +# 1755| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1755| ValueCategory = prvalue(load) +# 1755| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1755| Type = [LValueReferenceType] const CopyConstructorTestNonVirtualClass & +# 1755| ValueCategory = prvalue +# 1755| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1755| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass +# 1755| ValueCategory = lvalue +# 1756| getStmt(1): [DeclStmt] declaration +# 1756| getDeclarationEntry(0): [VariableDeclarationEntry] definition of cy +# 1756| Type = [Class] CopyConstructorTestVirtualClass +# 1756| getVariable().getInitializer(): [Initializer] initializer for cy +# 1756| getExpr(): [ConstructorCall] call to CopyConstructorTestVirtualClass +# 1756| Type = [VoidType] void +# 1756| ValueCategory = prvalue +# 1756| getArgument(0): [VariableAccess] y +# 1756| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1756| ValueCategory = prvalue(load) +# 1756| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1756| Type = [LValueReferenceType] const CopyConstructorTestVirtualClass & +# 1756| ValueCategory = prvalue +# 1756| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 1756| Type = [SpecifiedType] const CopyConstructorTestVirtualClass +# 1756| ValueCategory = lvalue +# 1757| getStmt(2): [ReturnStmt] return ... +# 1759| [TopLevelFunction] void if_initialization(int) +# 1759| : +# 1759| getParameter(0): [Parameter] x +# 1759| Type = [IntType] int +# 1759| getEntryPoint(): [BlockStmt] { ... } +# 1760| getStmt(0): [IfStmt] if (...) ... +# 1760| getInitialization(): [DeclStmt] declaration +# 1760| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1760| Type = [IntType] int +# 1760| getVariable().getInitializer(): [Initializer] initializer for y +# 1760| getExpr(): [VariableAccess] x +# 1760| Type = [IntType] int +# 1760| ValueCategory = prvalue(load) +# 1760| getCondition(): [AddExpr] ... + ... +# 1760| Type = [IntType] int +# 1760| ValueCategory = prvalue +# 1760| getLeftOperand(): [VariableAccess] x +# 1760| Type = [IntType] int +# 1760| ValueCategory = prvalue(load) +# 1760| getRightOperand(): [Literal] 1 +# 1760| Type = [IntType] int +# 1760| Value = [Literal] 1 +# 1760| ValueCategory = prvalue +# 1760| getThen(): [BlockStmt] { ... } +# 1761| getStmt(0): [ExprStmt] ExprStmt +# 1761| getExpr(): [AssignExpr] ... = ... +# 1761| Type = [IntType] int +# 1761| ValueCategory = lvalue +# 1761| getLValue(): [VariableAccess] x +# 1761| Type = [IntType] int +# 1761| ValueCategory = lvalue +# 1761| getRValue(): [AddExpr] ... + ... +# 1761| Type = [IntType] int +# 1761| ValueCategory = prvalue +# 1761| getLeftOperand(): [VariableAccess] x +# 1761| Type = [IntType] int +# 1761| ValueCategory = prvalue(load) +# 1761| getRightOperand(): [VariableAccess] y +# 1761| Type = [IntType] int +# 1761| ValueCategory = prvalue(load) +# 1760| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1760| Conversion = [BoolConversion] conversion to bool +# 1760| Type = [BoolType] bool +# 1760| ValueCategory = prvalue +# 1764| getStmt(1): [DeclStmt] declaration +# 1764| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1764| Type = [IntType] int +# 1765| getStmt(2): [IfStmt] if (...) ... +# 1765| getInitialization(): [ExprStmt] ExprStmt +# 1765| getExpr(): [AssignExpr] ... = ... +# 1765| Type = [IntType] int +# 1765| ValueCategory = lvalue +# 1765| getLValue(): [VariableAccess] w +# 1765| Type = [IntType] int +# 1765| ValueCategory = lvalue +# 1765| getRValue(): [VariableAccess] x +# 1765| Type = [IntType] int +# 1765| ValueCategory = prvalue(load) +# 1765| getCondition(): [AddExpr] ... + ... +# 1765| Type = [IntType] int +# 1765| ValueCategory = prvalue +# 1765| getLeftOperand(): [VariableAccess] x +# 1765| Type = [IntType] int +# 1765| ValueCategory = prvalue(load) +# 1765| getRightOperand(): [Literal] 1 +# 1765| Type = [IntType] int +# 1765| Value = [Literal] 1 +# 1765| ValueCategory = prvalue +# 1765| getThen(): [BlockStmt] { ... } +# 1766| getStmt(0): [ExprStmt] ExprStmt +# 1766| getExpr(): [AssignExpr] ... = ... +# 1766| Type = [IntType] int +# 1766| ValueCategory = lvalue +# 1766| getLValue(): [VariableAccess] x +# 1766| Type = [IntType] int +# 1766| ValueCategory = lvalue +# 1766| getRValue(): [AddExpr] ... + ... +# 1766| Type = [IntType] int +# 1766| ValueCategory = prvalue +# 1766| getLeftOperand(): [VariableAccess] x +# 1766| Type = [IntType] int +# 1766| ValueCategory = prvalue(load) +# 1766| getRightOperand(): [VariableAccess] w +# 1766| Type = [IntType] int +# 1766| ValueCategory = prvalue(load) +# 1765| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1765| Conversion = [BoolConversion] conversion to bool +# 1765| Type = [BoolType] bool +# 1765| ValueCategory = prvalue +# 1769| getStmt(3): [IfStmt] if (...) ... +# 1769| getInitialization(): [ExprStmt] ExprStmt +# 1769| getExpr(): [AssignExpr] ... = ... +# 1769| Type = [IntType] int +# 1769| ValueCategory = lvalue +# 1769| getLValue(): [VariableAccess] w +# 1769| Type = [IntType] int +# 1769| ValueCategory = lvalue +# 1769| getRValue(): [VariableAccess] x +# 1769| Type = [IntType] int +# 1769| ValueCategory = prvalue(load) +# 1769| getCondition(): [ConditionDeclExpr] (condition decl) +# 1769| Type = [BoolType] bool +# 1769| ValueCategory = prvalue +# 1769| getVariableAccess(): [VariableAccess] w2 +# 1769| Type = [IntType] int +# 1769| ValueCategory = prvalue(load) +# 1769| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1769| Conversion = [BoolConversion] conversion to bool +# 1769| Type = [BoolType] bool +# 1769| ValueCategory = prvalue +# 1769| getThen(): [BlockStmt] { ... } +# 1770| getStmt(0): [ExprStmt] ExprStmt +# 1770| getExpr(): [AssignExpr] ... = ... +# 1770| Type = [IntType] int +# 1770| ValueCategory = lvalue +# 1770| getLValue(): [VariableAccess] x +# 1770| Type = [IntType] int +# 1770| ValueCategory = lvalue +# 1770| getRValue(): [AddExpr] ... + ... +# 1770| Type = [IntType] int +# 1770| ValueCategory = prvalue +# 1770| getLeftOperand(): [VariableAccess] x +# 1770| Type = [IntType] int +# 1770| ValueCategory = prvalue(load) +# 1770| getRightOperand(): [VariableAccess] w +# 1770| Type = [IntType] int +# 1770| ValueCategory = prvalue(load) +# 1773| getStmt(4): [IfStmt] if (...) ... +# 1773| getInitialization(): [DeclStmt] declaration +# 1773| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1773| Type = [IntType] int +# 1773| getVariable().getInitializer(): [Initializer] initializer for v +# 1773| getExpr(): [VariableAccess] x +# 1773| Type = [IntType] int +# 1773| ValueCategory = prvalue(load) +# 1773| getCondition(): [ConditionDeclExpr] (condition decl) +# 1773| Type = [BoolType] bool +# 1773| ValueCategory = prvalue +# 1773| getVariableAccess(): [VariableAccess] v2 +# 1773| Type = [IntType] int +# 1773| ValueCategory = prvalue(load) +# 1773| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1773| Conversion = [BoolConversion] conversion to bool +# 1773| Type = [BoolType] bool +# 1773| ValueCategory = prvalue +# 1773| getThen(): [BlockStmt] { ... } +# 1774| getStmt(0): [ExprStmt] ExprStmt +# 1774| getExpr(): [AssignExpr] ... = ... +# 1774| Type = [IntType] int +# 1774| ValueCategory = lvalue +# 1774| getLValue(): [VariableAccess] x +# 1774| Type = [IntType] int +# 1774| ValueCategory = lvalue +# 1774| getRValue(): [AddExpr] ... + ... +# 1774| Type = [IntType] int +# 1774| ValueCategory = prvalue +# 1774| getLeftOperand(): [VariableAccess] x +# 1774| Type = [IntType] int +# 1774| ValueCategory = prvalue(load) +# 1774| getRightOperand(): [VariableAccess] v +# 1774| Type = [IntType] int +# 1774| ValueCategory = prvalue(load) +# 1777| getStmt(5): [DeclStmt] declaration +# 1777| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1777| Type = [IntType] int +# 1777| getVariable().getInitializer(): [Initializer] initializer for z +# 1777| getExpr(): [VariableAccess] x # 1777| Type = [IntType] int -# 1777| ValueCategory = lvalue -# 1777| getLValue(): [VariableAccess] x -# 1777| Type = [IntType] int -# 1777| ValueCategory = lvalue -# 1777| getRValue(): [AddExpr] ... + ... -# 1777| Type = [IntType] int -# 1777| ValueCategory = prvalue -# 1777| getLeftOperand(): [VariableAccess] x -# 1777| Type = [IntType] int -# 1777| ValueCategory = prvalue(load) -# 1777| getRightOperand(): [VariableAccess] z -# 1777| Type = [IntType] int -# 1777| ValueCategory = prvalue(load) -# 1776| getCondition().getFullyConverted(): [CStyleCast] (bool)... -# 1776| Conversion = [BoolConversion] conversion to bool -# 1776| Type = [BoolType] bool -# 1776| ValueCategory = prvalue -# 1780| getStmt(7): [IfStmt] if (...) ... -# 1780| getCondition(): [ConditionDeclExpr] (condition decl) -# 1780| Type = [BoolType] bool -# 1780| ValueCategory = prvalue -# 1780| getVariableAccess(): [VariableAccess] z2 -# 1780| Type = [IntType] int -# 1780| ValueCategory = prvalue(load) -# 1780| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... -# 1780| Conversion = [BoolConversion] conversion to bool -# 1780| Type = [BoolType] bool -# 1780| ValueCategory = prvalue -# 1780| getThen(): [BlockStmt] { ... } -# 1781| getStmt(0): [ExprStmt] ExprStmt -# 1781| getExpr(): [AssignAddExpr] ... += ... -# 1781| Type = [IntType] int -# 1781| ValueCategory = lvalue -# 1781| getLValue(): [VariableAccess] x -# 1781| Type = [IntType] int -# 1781| ValueCategory = lvalue -# 1781| getRValue(): [VariableAccess] z2 -# 1781| Type = [IntType] int -# 1781| ValueCategory = prvalue(load) -# 1783| getStmt(8): [ReturnStmt] return ... -# 1785| [TopLevelFunction] void switch_initialization(int) -# 1785| : -# 1785| getParameter(0): [Parameter] x -# 1785| Type = [IntType] int -# 1785| getEntryPoint(): [BlockStmt] { ... } -# 1786| getStmt(0): [SwitchStmt] switch (...) ... -# 1786| getInitialization(): [DeclStmt] declaration -# 1786| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 1786| Type = [IntType] int -# 1786| getVariable().getInitializer(): [Initializer] initializer for y -# 1786| getExpr(): [VariableAccess] x -# 1786| Type = [IntType] int -# 1786| ValueCategory = prvalue(load) -# 1786| getExpr(): [AddExpr] ... + ... -# 1786| Type = [IntType] int -# 1786| ValueCategory = prvalue -# 1786| getLeftOperand(): [VariableAccess] x -# 1786| Type = [IntType] int -# 1786| ValueCategory = prvalue(load) -# 1786| getRightOperand(): [Literal] 1 -# 1786| Type = [IntType] int -# 1786| Value = [Literal] 1 -# 1786| ValueCategory = prvalue -# 1786| getStmt(): [BlockStmt] { ... } -# 1787| getStmt(0): [SwitchCase] default: -# 1788| getStmt(1): [ExprStmt] ExprStmt -# 1788| getExpr(): [AssignExpr] ... = ... -# 1788| Type = [IntType] int -# 1788| ValueCategory = lvalue -# 1788| getLValue(): [VariableAccess] x +# 1777| ValueCategory = prvalue(load) +# 1778| getStmt(6): [IfStmt] if (...) ... +# 1778| getCondition(): [VariableAccess] z +# 1778| Type = [IntType] int +# 1778| ValueCategory = prvalue(load) +# 1778| getThen(): [BlockStmt] { ... } +# 1779| getStmt(0): [ExprStmt] ExprStmt +# 1779| getExpr(): [AssignExpr] ... = ... +# 1779| Type = [IntType] int +# 1779| ValueCategory = lvalue +# 1779| getLValue(): [VariableAccess] x +# 1779| Type = [IntType] int +# 1779| ValueCategory = lvalue +# 1779| getRValue(): [AddExpr] ... + ... +# 1779| Type = [IntType] int +# 1779| ValueCategory = prvalue +# 1779| getLeftOperand(): [VariableAccess] x +# 1779| Type = [IntType] int +# 1779| ValueCategory = prvalue(load) +# 1779| getRightOperand(): [VariableAccess] z +# 1779| Type = [IntType] int +# 1779| ValueCategory = prvalue(load) +# 1778| getCondition().getFullyConverted(): [CStyleCast] (bool)... +# 1778| Conversion = [BoolConversion] conversion to bool +# 1778| Type = [BoolType] bool +# 1778| ValueCategory = prvalue +# 1782| getStmt(7): [IfStmt] if (...) ... +# 1782| getCondition(): [ConditionDeclExpr] (condition decl) +# 1782| Type = [BoolType] bool +# 1782| ValueCategory = prvalue +# 1782| getVariableAccess(): [VariableAccess] z2 +# 1782| Type = [IntType] int +# 1782| ValueCategory = prvalue(load) +# 1782| getVariableAccess().getFullyConverted(): [CStyleCast] (bool)... +# 1782| Conversion = [BoolConversion] conversion to bool +# 1782| Type = [BoolType] bool +# 1782| ValueCategory = prvalue +# 1782| getThen(): [BlockStmt] { ... } +# 1783| getStmt(0): [ExprStmt] ExprStmt +# 1783| getExpr(): [AssignAddExpr] ... += ... +# 1783| Type = [IntType] int +# 1783| ValueCategory = lvalue +# 1783| getLValue(): [VariableAccess] x +# 1783| Type = [IntType] int +# 1783| ValueCategory = lvalue +# 1783| getRValue(): [VariableAccess] z2 +# 1783| Type = [IntType] int +# 1783| ValueCategory = prvalue(load) +# 1785| getStmt(8): [ReturnStmt] return ... +# 1787| [TopLevelFunction] void switch_initialization(int) +# 1787| : +# 1787| getParameter(0): [Parameter] x +# 1787| Type = [IntType] int +# 1787| getEntryPoint(): [BlockStmt] { ... } +# 1788| getStmt(0): [SwitchStmt] switch (...) ... +# 1788| getInitialization(): [DeclStmt] declaration +# 1788| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1788| Type = [IntType] int +# 1788| getVariable().getInitializer(): [Initializer] initializer for y +# 1788| getExpr(): [VariableAccess] x # 1788| Type = [IntType] int -# 1788| ValueCategory = lvalue -# 1788| getRValue(): [AddExpr] ... + ... -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue -# 1788| getLeftOperand(): [VariableAccess] x -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue(load) -# 1788| getRightOperand(): [VariableAccess] y -# 1788| Type = [IntType] int -# 1788| ValueCategory = prvalue(load) -# 1791| getStmt(1): [DeclStmt] declaration -# 1791| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w -# 1791| Type = [IntType] int -# 1792| getStmt(2): [SwitchStmt] switch (...) ... -# 1792| getInitialization(): [ExprStmt] ExprStmt -# 1792| getExpr(): [AssignExpr] ... = ... -# 1792| Type = [IntType] int -# 1792| ValueCategory = lvalue -# 1792| getLValue(): [VariableAccess] w -# 1792| Type = [IntType] int -# 1792| ValueCategory = lvalue -# 1792| getRValue(): [VariableAccess] x -# 1792| Type = [IntType] int -# 1792| ValueCategory = prvalue(load) -# 1792| getExpr(): [AddExpr] ... + ... -# 1792| Type = [IntType] int -# 1792| ValueCategory = prvalue -# 1792| getLeftOperand(): [VariableAccess] x -# 1792| Type = [IntType] int -# 1792| ValueCategory = prvalue(load) -# 1792| getRightOperand(): [Literal] 1 -# 1792| Type = [IntType] int -# 1792| Value = [Literal] 1 -# 1792| ValueCategory = prvalue -# 1792| getStmt(): [BlockStmt] { ... } -# 1793| getStmt(0): [SwitchCase] default: -# 1794| getStmt(1): [ExprStmt] ExprStmt -# 1794| getExpr(): [AssignExpr] ... = ... +# 1788| ValueCategory = prvalue(load) +# 1788| getExpr(): [AddExpr] ... + ... +# 1788| Type = [IntType] int +# 1788| ValueCategory = prvalue +# 1788| getLeftOperand(): [VariableAccess] x +# 1788| Type = [IntType] int +# 1788| ValueCategory = prvalue(load) +# 1788| getRightOperand(): [Literal] 1 +# 1788| Type = [IntType] int +# 1788| Value = [Literal] 1 +# 1788| ValueCategory = prvalue +# 1788| getStmt(): [BlockStmt] { ... } +# 1789| getStmt(0): [SwitchCase] default: +# 1790| getStmt(1): [ExprStmt] ExprStmt +# 1790| getExpr(): [AssignExpr] ... = ... +# 1790| Type = [IntType] int +# 1790| ValueCategory = lvalue +# 1790| getLValue(): [VariableAccess] x +# 1790| Type = [IntType] int +# 1790| ValueCategory = lvalue +# 1790| getRValue(): [AddExpr] ... + ... +# 1790| Type = [IntType] int +# 1790| ValueCategory = prvalue +# 1790| getLeftOperand(): [VariableAccess] x +# 1790| Type = [IntType] int +# 1790| ValueCategory = prvalue(load) +# 1790| getRightOperand(): [VariableAccess] y +# 1790| Type = [IntType] int +# 1790| ValueCategory = prvalue(load) +# 1793| getStmt(1): [DeclStmt] declaration +# 1793| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 1793| Type = [IntType] int +# 1794| getStmt(2): [SwitchStmt] switch (...) ... +# 1794| getInitialization(): [ExprStmt] ExprStmt +# 1794| getExpr(): [AssignExpr] ... = ... +# 1794| Type = [IntType] int +# 1794| ValueCategory = lvalue +# 1794| getLValue(): [VariableAccess] w # 1794| Type = [IntType] int # 1794| ValueCategory = lvalue -# 1794| getLValue(): [VariableAccess] x -# 1794| Type = [IntType] int -# 1794| ValueCategory = lvalue -# 1794| getRValue(): [AddExpr] ... + ... -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue -# 1794| getLeftOperand(): [VariableAccess] x -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue(load) -# 1794| getRightOperand(): [VariableAccess] w -# 1794| Type = [IntType] int -# 1794| ValueCategory = prvalue(load) -# 1797| getStmt(3): [SwitchStmt] switch (...) ... -# 1797| getInitialization(): [ExprStmt] ExprStmt -# 1797| getExpr(): [AssignExpr] ... = ... -# 1797| Type = [IntType] int -# 1797| ValueCategory = lvalue -# 1797| getLValue(): [VariableAccess] w -# 1797| Type = [IntType] int -# 1797| ValueCategory = lvalue -# 1797| getRValue(): [VariableAccess] x -# 1797| Type = [IntType] int -# 1797| ValueCategory = prvalue(load) -# 1797| getExpr(): [ConditionDeclExpr] (condition decl) -# 1797| Type = [IntType] int -# 1797| ValueCategory = prvalue -# 1797| getVariableAccess(): [VariableAccess] w2 -# 1797| Type = [IntType] int -# 1797| ValueCategory = prvalue(load) -# 1797| getStmt(): [BlockStmt] { ... } -# 1798| getStmt(0): [SwitchCase] default: -# 1799| getStmt(1): [ExprStmt] ExprStmt -# 1799| getExpr(): [AssignExpr] ... = ... +# 1794| getRValue(): [VariableAccess] x +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue(load) +# 1794| getExpr(): [AddExpr] ... + ... +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue +# 1794| getLeftOperand(): [VariableAccess] x +# 1794| Type = [IntType] int +# 1794| ValueCategory = prvalue(load) +# 1794| getRightOperand(): [Literal] 1 +# 1794| Type = [IntType] int +# 1794| Value = [Literal] 1 +# 1794| ValueCategory = prvalue +# 1794| getStmt(): [BlockStmt] { ... } +# 1795| getStmt(0): [SwitchCase] default: +# 1796| getStmt(1): [ExprStmt] ExprStmt +# 1796| getExpr(): [AssignExpr] ... = ... +# 1796| Type = [IntType] int +# 1796| ValueCategory = lvalue +# 1796| getLValue(): [VariableAccess] x +# 1796| Type = [IntType] int +# 1796| ValueCategory = lvalue +# 1796| getRValue(): [AddExpr] ... + ... +# 1796| Type = [IntType] int +# 1796| ValueCategory = prvalue +# 1796| getLeftOperand(): [VariableAccess] x +# 1796| Type = [IntType] int +# 1796| ValueCategory = prvalue(load) +# 1796| getRightOperand(): [VariableAccess] w +# 1796| Type = [IntType] int +# 1796| ValueCategory = prvalue(load) +# 1799| getStmt(3): [SwitchStmt] switch (...) ... +# 1799| getInitialization(): [ExprStmt] ExprStmt +# 1799| getExpr(): [AssignExpr] ... = ... +# 1799| Type = [IntType] int +# 1799| ValueCategory = lvalue +# 1799| getLValue(): [VariableAccess] w # 1799| Type = [IntType] int # 1799| ValueCategory = lvalue -# 1799| getLValue(): [VariableAccess] x -# 1799| Type = [IntType] int -# 1799| ValueCategory = lvalue -# 1799| getRValue(): [AddExpr] ... + ... -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue -# 1799| getLeftOperand(): [VariableAccess] x -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue(load) -# 1799| getRightOperand(): [VariableAccess] w -# 1799| Type = [IntType] int -# 1799| ValueCategory = prvalue(load) -# 1802| getStmt(4): [SwitchStmt] switch (...) ... -# 1802| getInitialization(): [DeclStmt] declaration -# 1802| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1802| Type = [IntType] int -# 1802| getVariable().getInitializer(): [Initializer] initializer for v -# 1802| getExpr(): [VariableAccess] x -# 1802| Type = [IntType] int -# 1802| ValueCategory = prvalue(load) -# 1802| getExpr(): [ConditionDeclExpr] (condition decl) -# 1802| Type = [IntType] int -# 1802| ValueCategory = prvalue -# 1802| getVariableAccess(): [VariableAccess] v2 -# 1802| Type = [IntType] int -# 1802| ValueCategory = prvalue(load) -# 1802| getStmt(): [BlockStmt] { ... } -# 1803| getStmt(0): [SwitchCase] default: -# 1804| getStmt(1): [ExprStmt] ExprStmt -# 1804| getExpr(): [AssignExpr] ... = ... -# 1804| Type = [IntType] int -# 1804| ValueCategory = lvalue -# 1804| getLValue(): [VariableAccess] x +# 1799| getRValue(): [VariableAccess] x +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue(load) +# 1799| getExpr(): [ConditionDeclExpr] (condition decl) +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue +# 1799| getVariableAccess(): [VariableAccess] w2 +# 1799| Type = [IntType] int +# 1799| ValueCategory = prvalue(load) +# 1799| getStmt(): [BlockStmt] { ... } +# 1800| getStmt(0): [SwitchCase] default: +# 1801| getStmt(1): [ExprStmt] ExprStmt +# 1801| getExpr(): [AssignExpr] ... = ... +# 1801| Type = [IntType] int +# 1801| ValueCategory = lvalue +# 1801| getLValue(): [VariableAccess] x +# 1801| Type = [IntType] int +# 1801| ValueCategory = lvalue +# 1801| getRValue(): [AddExpr] ... + ... +# 1801| Type = [IntType] int +# 1801| ValueCategory = prvalue +# 1801| getLeftOperand(): [VariableAccess] x +# 1801| Type = [IntType] int +# 1801| ValueCategory = prvalue(load) +# 1801| getRightOperand(): [VariableAccess] w +# 1801| Type = [IntType] int +# 1801| ValueCategory = prvalue(load) +# 1804| getStmt(4): [SwitchStmt] switch (...) ... +# 1804| getInitialization(): [DeclStmt] declaration +# 1804| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1804| Type = [IntType] int +# 1804| getVariable().getInitializer(): [Initializer] initializer for v +# 1804| getExpr(): [VariableAccess] x # 1804| Type = [IntType] int -# 1804| ValueCategory = lvalue -# 1804| getRValue(): [AddExpr] ... + ... -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue -# 1804| getLeftOperand(): [VariableAccess] x -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue(load) -# 1804| getRightOperand(): [VariableAccess] v -# 1804| Type = [IntType] int -# 1804| ValueCategory = prvalue(load) -# 1807| getStmt(5): [DeclStmt] declaration -# 1807| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z -# 1807| Type = [IntType] int -# 1807| getVariable().getInitializer(): [Initializer] initializer for z -# 1807| getExpr(): [VariableAccess] x -# 1807| Type = [IntType] int -# 1807| ValueCategory = prvalue(load) -# 1808| getStmt(6): [SwitchStmt] switch (...) ... -# 1808| getExpr(): [VariableAccess] z -# 1808| Type = [IntType] int -# 1808| ValueCategory = prvalue(load) -# 1808| getStmt(): [BlockStmt] { ... } -# 1809| getStmt(0): [SwitchCase] default: -# 1810| getStmt(1): [ExprStmt] ExprStmt -# 1810| getExpr(): [AssignExpr] ... = ... -# 1810| Type = [IntType] int -# 1810| ValueCategory = lvalue -# 1810| getLValue(): [VariableAccess] x -# 1810| Type = [IntType] int -# 1810| ValueCategory = lvalue -# 1810| getRValue(): [AddExpr] ... + ... -# 1810| Type = [IntType] int -# 1810| ValueCategory = prvalue -# 1810| getLeftOperand(): [VariableAccess] x -# 1810| Type = [IntType] int -# 1810| ValueCategory = prvalue(load) -# 1810| getRightOperand(): [VariableAccess] z -# 1810| Type = [IntType] int -# 1810| ValueCategory = prvalue(load) -# 1813| getStmt(7): [SwitchStmt] switch (...) ... -# 1813| getExpr(): [ConditionDeclExpr] (condition decl) -# 1813| Type = [IntType] int -# 1813| ValueCategory = prvalue -# 1813| getVariableAccess(): [VariableAccess] z2 -# 1813| Type = [IntType] int -# 1813| ValueCategory = prvalue(load) -# 1813| getStmt(): [BlockStmt] { ... } -# 1814| getStmt(0): [SwitchCase] default: -# 1815| getStmt(1): [ExprStmt] ExprStmt -# 1815| getExpr(): [AssignAddExpr] ... += ... -# 1815| Type = [IntType] int -# 1815| ValueCategory = lvalue -# 1815| getLValue(): [VariableAccess] x -# 1815| Type = [IntType] int -# 1815| ValueCategory = lvalue -# 1815| getRValue(): [VariableAccess] z2 -# 1815| Type = [IntType] int -# 1815| ValueCategory = prvalue(load) -# 1817| getStmt(8): [ReturnStmt] return ... -# 1821| [GlobalVariable] int global_2 -# 1821| getInitializer(): [Initializer] initializer for global_2 -# 1821| getExpr(): [Literal] 1 -# 1821| Type = [IntType] int -# 1821| Value = [Literal] 1 -# 1821| ValueCategory = prvalue -# 1823| [GlobalVariable] int const global_3 -# 1823| getInitializer(): [Initializer] initializer for global_3 -# 1823| getExpr(): [Literal] 2 +# 1804| ValueCategory = prvalue(load) +# 1804| getExpr(): [ConditionDeclExpr] (condition decl) +# 1804| Type = [IntType] int +# 1804| ValueCategory = prvalue +# 1804| getVariableAccess(): [VariableAccess] v2 +# 1804| Type = [IntType] int +# 1804| ValueCategory = prvalue(load) +# 1804| getStmt(): [BlockStmt] { ... } +# 1805| getStmt(0): [SwitchCase] default: +# 1806| getStmt(1): [ExprStmt] ExprStmt +# 1806| getExpr(): [AssignExpr] ... = ... +# 1806| Type = [IntType] int +# 1806| ValueCategory = lvalue +# 1806| getLValue(): [VariableAccess] x +# 1806| Type = [IntType] int +# 1806| ValueCategory = lvalue +# 1806| getRValue(): [AddExpr] ... + ... +# 1806| Type = [IntType] int +# 1806| ValueCategory = prvalue +# 1806| getLeftOperand(): [VariableAccess] x +# 1806| Type = [IntType] int +# 1806| ValueCategory = prvalue(load) +# 1806| getRightOperand(): [VariableAccess] v +# 1806| Type = [IntType] int +# 1806| ValueCategory = prvalue(load) +# 1809| getStmt(5): [DeclStmt] declaration +# 1809| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1809| Type = [IntType] int +# 1809| getVariable().getInitializer(): [Initializer] initializer for z +# 1809| getExpr(): [VariableAccess] x +# 1809| Type = [IntType] int +# 1809| ValueCategory = prvalue(load) +# 1810| getStmt(6): [SwitchStmt] switch (...) ... +# 1810| getExpr(): [VariableAccess] z +# 1810| Type = [IntType] int +# 1810| ValueCategory = prvalue(load) +# 1810| getStmt(): [BlockStmt] { ... } +# 1811| getStmt(0): [SwitchCase] default: +# 1812| getStmt(1): [ExprStmt] ExprStmt +# 1812| getExpr(): [AssignExpr] ... = ... +# 1812| Type = [IntType] int +# 1812| ValueCategory = lvalue +# 1812| getLValue(): [VariableAccess] x +# 1812| Type = [IntType] int +# 1812| ValueCategory = lvalue +# 1812| getRValue(): [AddExpr] ... + ... +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue +# 1812| getLeftOperand(): [VariableAccess] x +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue(load) +# 1812| getRightOperand(): [VariableAccess] z +# 1812| Type = [IntType] int +# 1812| ValueCategory = prvalue(load) +# 1815| getStmt(7): [SwitchStmt] switch (...) ... +# 1815| getExpr(): [ConditionDeclExpr] (condition decl) +# 1815| Type = [IntType] int +# 1815| ValueCategory = prvalue +# 1815| getVariableAccess(): [VariableAccess] z2 +# 1815| Type = [IntType] int +# 1815| ValueCategory = prvalue(load) +# 1815| getStmt(): [BlockStmt] { ... } +# 1816| getStmt(0): [SwitchCase] default: +# 1817| getStmt(1): [ExprStmt] ExprStmt +# 1817| getExpr(): [AssignAddExpr] ... += ... +# 1817| Type = [IntType] int +# 1817| ValueCategory = lvalue +# 1817| getLValue(): [VariableAccess] x +# 1817| Type = [IntType] int +# 1817| ValueCategory = lvalue +# 1817| getRValue(): [VariableAccess] z2 +# 1817| Type = [IntType] int +# 1817| ValueCategory = prvalue(load) +# 1819| getStmt(8): [ReturnStmt] return ... +# 1823| [GlobalVariable] int global_2 +# 1823| getInitializer(): [Initializer] initializer for global_2 +# 1823| getExpr(): [Literal] 1 # 1823| Type = [IntType] int -# 1823| Value = [Literal] 2 +# 1823| Value = [Literal] 1 # 1823| ValueCategory = prvalue -# 1825| [GlobalVariable] constructor_only global_4 -# 1825| getInitializer(): [Initializer] initializer for global_4 -# 1825| getExpr(): [ConstructorCall] call to constructor_only -# 1825| Type = [VoidType] void +# 1825| [GlobalVariable] int const global_3 +# 1825| getInitializer(): [Initializer] initializer for global_3 +# 1825| getExpr(): [Literal] 2 +# 1825| Type = [IntType] int +# 1825| Value = [Literal] 2 # 1825| ValueCategory = prvalue -# 1825| getArgument(0): [Literal] 1 -# 1825| Type = [IntType] int -# 1825| Value = [Literal] 1 -# 1825| ValueCategory = prvalue -# 1827| [GlobalVariable] constructor_only global_5 -# 1827| getInitializer(): [Initializer] initializer for global_5 +# 1827| [GlobalVariable] constructor_only global_4 +# 1827| getInitializer(): [Initializer] initializer for global_4 # 1827| getExpr(): [ConstructorCall] call to constructor_only # 1827| Type = [VoidType] void # 1827| ValueCategory = prvalue -# 1827| getArgument(0): [Literal] 2 +# 1827| getArgument(0): [Literal] 1 # 1827| Type = [IntType] int -# 1827| Value = [Literal] 2 +# 1827| Value = [Literal] 1 # 1827| ValueCategory = prvalue -# 1829| [GlobalVariable] char* global_string -# 1829| getInitializer(): [Initializer] initializer for global_string -# 1829| getExpr(): global string -# 1829| Type = [ArrayType] const char[14] -# 1829| Value = [StringLiteral] "global string" -# 1829| ValueCategory = lvalue -# 1829| getExpr().getFullyConverted(): [CStyleCast] (char *)... -# 1829| Conversion = [PointerConversion] pointer conversion -# 1829| Type = [CharPointerType] char * +# 1829| [GlobalVariable] constructor_only global_5 +# 1829| getInitializer(): [Initializer] initializer for global_5 +# 1829| getExpr(): [ConstructorCall] call to constructor_only +# 1829| Type = [VoidType] void # 1829| ValueCategory = prvalue -# 1829| getExpr(): [ArrayToPointerConversion] array to pointer conversion -# 1829| Type = [PointerType] const char * +# 1829| getArgument(0): [Literal] 2 +# 1829| Type = [IntType] int +# 1829| Value = [Literal] 2 # 1829| ValueCategory = prvalue -# 1831| [GlobalVariable] int global_6 -# 1831| getInitializer(): [Initializer] initializer for global_6 -# 1831| getExpr(): [VariableAccess] global_2 -# 1831| Type = [IntType] int -# 1831| ValueCategory = prvalue(load) -# 1834| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&) -# 1834| : +# 1831| [GlobalVariable] char* global_string +# 1831| getInitializer(): [Initializer] initializer for global_string +# 1831| getExpr(): global string +# 1831| Type = [ArrayType] const char[14] +# 1831| Value = [StringLiteral] "global string" +# 1831| ValueCategory = lvalue +# 1831| getExpr().getFullyConverted(): [CStyleCast] (char *)... +# 1831| Conversion = [PointerConversion] pointer conversion +# 1831| Type = [CharPointerType] char * +# 1831| ValueCategory = prvalue +# 1831| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 1831| Type = [PointerType] const char * +# 1831| ValueCategory = prvalue +# 1833| [GlobalVariable] int global_6 +# 1833| getInitializer(): [Initializer] initializer for global_6 +# 1833| getExpr(): [VariableAccess] global_2 +# 1833| Type = [IntType] int +# 1833| ValueCategory = prvalue(load) +# 1836| [CopyAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A const&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1834| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1834| : +# 1836| [MoveAssignmentOperator] block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && #-----| getEntryPoint(): [BlockStmt] { ... } @@ -14301,43 +14454,43 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] A & #-----| ValueCategory = prvalue -# 1834| [Constructor] void block_assignment::A::A() -# 1834| : -# 1834| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) -# 1834| : +# 1836| [Constructor] void block_assignment::A::A() +# 1836| : +# 1836| [CopyConstructor] void block_assignment::A::A(block_assignment::A const&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const A & -# 1834| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) -# 1834| : +# 1836| [MoveConstructor] void block_assignment::A::A(block_assignment::A&&) +# 1836| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] A && -# 1836| [VirtualFunction] void block_assignment::A::f() -# 1836| : -# 1839| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) -# 1839| : +# 1838| [VirtualFunction] void block_assignment::A::f() +# 1838| : +# 1841| [CopyAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B const&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1839| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1839| : +# 1841| [MoveAssignmentOperator] block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] B && #-----| getEntryPoint(): [BlockStmt] { ... } #-----| getStmt(0): [ExprStmt] ExprStmt -# 1839| getExpr(): [FunctionCall] call to operator= -# 1839| Type = [LValueReferenceType] A & -# 1839| ValueCategory = prvalue -# 1839| getQualifier(): [ThisExpr] this -# 1839| Type = [PointerType] B * -# 1839| ValueCategory = prvalue(load) -# 1839| getArgument(0): [PointerDereferenceExpr] * ... -# 1839| Type = [Class] A -# 1839| ValueCategory = xvalue -# 1839| getOperand(): [AddressOfExpr] & ... -# 1839| Type = [PointerType] B * -# 1839| ValueCategory = prvalue -# 1839| getOperand(): [VariableAccess] (unnamed parameter 0) -# 1839| Type = [RValueReferenceType] B && -# 1839| ValueCategory = prvalue(load) +# 1841| getExpr(): [FunctionCall] call to operator= +# 1841| Type = [LValueReferenceType] A & +# 1841| ValueCategory = prvalue +# 1841| getQualifier(): [ThisExpr] this +# 1841| Type = [PointerType] B * +# 1841| ValueCategory = prvalue(load) +# 1841| getArgument(0): [PointerDereferenceExpr] * ... +# 1841| Type = [Class] A +# 1841| ValueCategory = xvalue +# 1841| getOperand(): [AddressOfExpr] & ... +# 1841| Type = [PointerType] B * +# 1841| ValueCategory = prvalue +# 1841| getOperand(): [VariableAccess] (unnamed parameter 0) +# 1841| Type = [RValueReferenceType] B && +# 1841| ValueCategory = prvalue(load) #-----| getOperand().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) #-----| Type = [Struct] B #-----| ValueCategory = lvalue @@ -14365,746 +14518,708 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] B & #-----| ValueCategory = prvalue -# 1839| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&) -# 1839| : +# 1841| [CopyConstructor] void block_assignment::B::B(block_assignment::B const&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const B & -# 1839| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) -# 1839| : +# 1841| [MoveConstructor] void block_assignment::B::B(block_assignment::B&&) +# 1841| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] B && -# 1840| [Constructor] void block_assignment::B::B(block_assignment::A*) -# 1840| : -# 1840| getParameter(0): [Parameter] (unnamed parameter 0) -# 1840| Type = [PointerType] A * -# 1843| [TopLevelFunction] void block_assignment::foo() -# 1843| : -# 1843| getEntryPoint(): [BlockStmt] { ... } -# 1844| getStmt(0): [DeclStmt] declaration -# 1844| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v -# 1844| Type = [Struct] B -# 1844| getVariable().getInitializer(): [Initializer] initializer for v -# 1844| getExpr(): [ConstructorCall] call to B -# 1844| Type = [VoidType] void -# 1844| ValueCategory = prvalue -# 1844| getArgument(0): [Literal] 0 -# 1844| Type = [IntType] int -# 1844| Value = [Literal] 0 -# 1844| ValueCategory = prvalue -# 1844| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... -# 1844| Conversion = [IntegralToPointerConversion] integral to pointer conversion -# 1844| Type = [PointerType] A * -# 1844| Value = [CStyleCast] 0 -# 1844| ValueCategory = prvalue -# 1845| getStmt(1): [ExprStmt] ExprStmt -# 1845| getExpr(): [FunctionCall] call to operator= -# 1845| Type = [LValueReferenceType] B & -# 1845| ValueCategory = prvalue -# 1845| getQualifier(): [VariableAccess] v -# 1845| Type = [Struct] B -# 1845| ValueCategory = lvalue -# 1845| getArgument(0): [ConstructorCall] call to B -# 1845| Type = [VoidType] void -# 1845| ValueCategory = prvalue -# 1845| getArgument(0): [Literal] 0 -# 1845| Type = [IntType] int -# 1845| Value = [Literal] 0 -# 1845| ValueCategory = prvalue -# 1845| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... -# 1845| Conversion = [IntegralToPointerConversion] integral to pointer conversion -# 1845| Type = [PointerType] A * -# 1845| Value = [CStyleCast] 0 -# 1845| ValueCategory = prvalue -# 1845| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 1845| Type = [LValueReferenceType] B & -# 1845| ValueCategory = prvalue -# 1845| getExpr(): [TemporaryObjectExpr] temporary object -# 1845| Type = [Struct] B -# 1845| ValueCategory = lvalue -# 1845| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1845| Type = [Struct] B -# 1845| ValueCategory = lvalue -# 1846| getStmt(2): [ReturnStmt] return ... -# 1849| [TopLevelFunction] void magicvars() -# 1849| : -# 1849| getEntryPoint(): [BlockStmt] { ... } -# 1850| getStmt(0): [DeclStmt] declaration -# 1850| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pf -# 1850| Type = [PointerType] const char * -# 1850| getVariable().getInitializer(): [Initializer] initializer for pf -# 1850| getExpr(): [VariableAccess] __PRETTY_FUNCTION__ -# 1850| Type = [ArrayType] const char[17] -# 1850| ValueCategory = lvalue -# 1850| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1850| Type = [PointerType] const char * -# 1850| ValueCategory = prvalue -# 1851| getStmt(1): [DeclStmt] declaration -# 1851| getDeclarationEntry(0): [VariableDeclarationEntry] definition of strfunc -# 1851| Type = [PointerType] const char * -# 1851| getVariable().getInitializer(): [Initializer] initializer for strfunc -# 1851| getExpr(): [VariableAccess] __func__ -# 1851| Type = [ArrayType] const char[10] -# 1851| ValueCategory = lvalue -# 1851| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1851| Type = [PointerType] const char * -# 1851| ValueCategory = prvalue -# 1852| getStmt(2): [ReturnStmt] return ... -# 1855| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&) -# 1855| : +# 1842| [Constructor] void block_assignment::B::B(block_assignment::A*) +# 1842| : +# 1842| getParameter(0): [Parameter] (unnamed parameter 0) +# 1842| Type = [PointerType] A * +# 1845| [TopLevelFunction] void block_assignment::foo() +# 1845| : +# 1845| getEntryPoint(): [BlockStmt] { ... } +# 1846| getStmt(0): [DeclStmt] declaration +# 1846| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 1846| Type = [Struct] B +# 1846| getVariable().getInitializer(): [Initializer] initializer for v +# 1846| getExpr(): [ConstructorCall] call to B +# 1846| Type = [VoidType] void +# 1846| ValueCategory = prvalue +# 1846| getArgument(0): [Literal] 0 +# 1846| Type = [IntType] int +# 1846| Value = [Literal] 0 +# 1846| ValueCategory = prvalue +# 1846| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... +# 1846| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 1846| Type = [PointerType] A * +# 1846| Value = [CStyleCast] 0 +# 1846| ValueCategory = prvalue +# 1847| getStmt(1): [ExprStmt] ExprStmt +# 1847| getExpr(): [FunctionCall] call to operator= +# 1847| Type = [LValueReferenceType] B & +# 1847| ValueCategory = prvalue +# 1847| getQualifier(): [VariableAccess] v +# 1847| Type = [Struct] B +# 1847| ValueCategory = lvalue +# 1847| getArgument(0): [ConstructorCall] call to B +# 1847| Type = [VoidType] void +# 1847| ValueCategory = prvalue +# 1847| getArgument(0): [Literal] 0 +# 1847| Type = [IntType] int +# 1847| Value = [Literal] 0 +# 1847| ValueCategory = prvalue +# 1847| getArgument(0).getFullyConverted(): [CStyleCast] (A *)... +# 1847| Conversion = [IntegralToPointerConversion] integral to pointer conversion +# 1847| Type = [PointerType] A * +# 1847| Value = [CStyleCast] 0 +# 1847| ValueCategory = prvalue +# 1847| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 1847| Type = [LValueReferenceType] B & +# 1847| ValueCategory = prvalue +# 1847| getExpr(): [TemporaryObjectExpr] temporary object +# 1847| Type = [Struct] B +# 1847| ValueCategory = lvalue +# 1847| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1847| Type = [Struct] B +# 1847| ValueCategory = lvalue +# 1848| getStmt(2): [ReturnStmt] return ... +# 1851| [TopLevelFunction] void magicvars() +# 1851| : +# 1851| getEntryPoint(): [BlockStmt] { ... } +# 1852| getStmt(0): [DeclStmt] declaration +# 1852| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pf +# 1852| Type = [PointerType] const char * +# 1852| getVariable().getInitializer(): [Initializer] initializer for pf +# 1852| getExpr(): [VariableAccess] __PRETTY_FUNCTION__ +# 1852| Type = [ArrayType] const char[17] +# 1852| ValueCategory = lvalue +# 1852| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1852| Type = [PointerType] const char * +# 1852| ValueCategory = prvalue +# 1853| getStmt(1): [DeclStmt] declaration +# 1853| getDeclarationEntry(0): [VariableDeclarationEntry] definition of strfunc +# 1853| Type = [PointerType] const char * +# 1853| getVariable().getInitializer(): [Initializer] initializer for strfunc +# 1853| getExpr(): [VariableAccess] __func__ +# 1853| Type = [ArrayType] const char[10] +# 1853| ValueCategory = lvalue +# 1853| getExpr().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1853| Type = [PointerType] const char * +# 1853| ValueCategory = prvalue +# 1854| getStmt(2): [ReturnStmt] return ... +# 1857| [CopyAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S const&) +# 1857| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const S & -# 1855| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&) -# 1855| : +# 1857| [MoveAssignmentOperator] missing_declaration_entries::S& missing_declaration_entries::S::operator=(missing_declaration_entries::S&&) +# 1857| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] S && -# 1859| [CopyAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1 const&) -# 1859| : +# 1861| [CopyAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1 const&) +# 1861| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar1 & -# 1859| [MoveAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1&&) -# 1859| : +# 1861| [MoveAssignmentOperator] missing_declaration_entries::Bar1& missing_declaration_entries::Bar1::operator=(missing_declaration_entries::Bar1&&) +# 1861| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar1 && -# 1862| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| : -# 1862| getParameter(0): [Parameter] p -# 1862| Type = [CTypedefType,NestedTypedefType] pointer -# 1862| getEntryPoint(): [BlockStmt] { ... } -# 1863| getStmt(0): [DeclStmt] declaration -# 1863| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res -# 1863| Type = [CTypedefType,LocalTypedefType] _Res -# 1864| getStmt(1): [ReturnStmt] return ... -# 1864| getExpr(): [VariableAccess] p -# 1864| Type = [CTypedefType,NestedTypedefType] pointer -# 1864| ValueCategory = prvalue(load) -# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)... -# 1864| Conversion = [PointerConversion] pointer conversion -# 1864| Type = [VoidPointerType] void * -# 1864| ValueCategory = prvalue -# 1862| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| : -# 1862| getParameter(0): [Parameter] p -# 1862| Type = [CTypedefType,NestedTypedefType] pointer -# 1862| getEntryPoint(): [BlockStmt] { ... } -# 1863| getStmt(0): [DeclStmt] declaration -# 1864| getStmt(1): [ReturnStmt] return ... -# 1864| getExpr(): [VariableAccess] p -# 1864| Type = [CTypedefType,NestedTypedefType] pointer -# 1864| ValueCategory = prvalue(load) -# 1864| getExpr().getFullyConverted(): [CStyleCast] (void *)... -# 1864| Conversion = [PointerConversion] pointer conversion -# 1864| Type = [VoidPointerType] void * -# 1864| ValueCategory = prvalue -# 1868| [TopLevelFunction] void missing_declaration_entries::test1() -# 1868| : -# 1868| getEntryPoint(): [BlockStmt] { ... } -# 1869| getStmt(0): [DeclStmt] declaration -# 1869| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1869| Type = [ClassTemplateInstantiation,Struct] Bar1 -# 1870| getStmt(1): [ExprStmt] ExprStmt -# 1870| getExpr(): [FunctionCall] call to missing_type_decl_entry -# 1870| Type = [VoidPointerType] void * -# 1870| ValueCategory = prvalue -# 1870| getQualifier(): [VariableAccess] b -# 1870| Type = [ClassTemplateInstantiation,Struct] Bar1 -# 1870| ValueCategory = lvalue -# 1870| getArgument(0): [Literal] 0 -# 1870| Type = [NullPointerType] decltype(nullptr) -# 1870| Value = [Literal] 0 -# 1870| ValueCategory = prvalue -# 1870| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)... -# 1870| Conversion = [PointerConversion] pointer conversion -# 1870| Type = [CTypedefType,NestedTypedefType] pointer -# 1870| Value = [CStyleCast] 0 -# 1870| ValueCategory = prvalue -# 1871| getStmt(2): [ReturnStmt] return ... -# 1873| [CopyAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2 const&) -# 1873| : +# 1864| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| : +# 1864| getParameter(0): [Parameter] p +# 1864| Type = [CTypedefType,NestedTypedefType] pointer +# 1864| getEntryPoint(): [BlockStmt] { ... } +# 1865| getStmt(0): [DeclStmt] declaration +# 1865| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of _Res +# 1865| Type = [CTypedefType,LocalTypedefType] _Res +# 1866| getStmt(1): [ReturnStmt] return ... +# 1866| getExpr(): [VariableAccess] p +# 1866| Type = [CTypedefType,NestedTypedefType] pointer +# 1866| ValueCategory = prvalue(load) +# 1866| getExpr().getFullyConverted(): [CStyleCast] (void *)... +# 1866| Conversion = [PointerConversion] pointer conversion +# 1866| Type = [VoidPointerType] void * +# 1866| ValueCategory = prvalue +# 1864| [MemberFunction] void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| : +# 1864| getParameter(0): [Parameter] p +# 1864| Type = [CTypedefType,NestedTypedefType] pointer +# 1864| getEntryPoint(): [BlockStmt] { ... } +# 1865| getStmt(0): [DeclStmt] declaration +# 1866| getStmt(1): [ReturnStmt] return ... +# 1866| getExpr(): [VariableAccess] p +# 1866| Type = [CTypedefType,NestedTypedefType] pointer +# 1866| ValueCategory = prvalue(load) +# 1866| getExpr().getFullyConverted(): [CStyleCast] (void *)... +# 1866| Conversion = [PointerConversion] pointer conversion +# 1866| Type = [VoidPointerType] void * +# 1866| ValueCategory = prvalue +# 1870| [TopLevelFunction] void missing_declaration_entries::test1() +# 1870| : +# 1870| getEntryPoint(): [BlockStmt] { ... } +# 1871| getStmt(0): [DeclStmt] declaration +# 1871| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1871| Type = [ClassTemplateInstantiation,Struct] Bar1 +# 1872| getStmt(1): [ExprStmt] ExprStmt +# 1872| getExpr(): [FunctionCall] call to missing_type_decl_entry +# 1872| Type = [VoidPointerType] void * +# 1872| ValueCategory = prvalue +# 1872| getQualifier(): [VariableAccess] b +# 1872| Type = [ClassTemplateInstantiation,Struct] Bar1 +# 1872| ValueCategory = lvalue +# 1872| getArgument(0): [Literal] 0 +# 1872| Type = [NullPointerType] decltype(nullptr) +# 1872| Value = [Literal] 0 +# 1872| ValueCategory = prvalue +# 1872| getArgument(0).getFullyConverted(): [CStyleCast] (pointer)... +# 1872| Conversion = [PointerConversion] pointer conversion +# 1872| Type = [CTypedefType,NestedTypedefType] pointer +# 1872| Value = [CStyleCast] 0 +# 1872| ValueCategory = prvalue +# 1873| getStmt(2): [ReturnStmt] return ... +# 1875| [CopyAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2 const&) +# 1875| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Bar2 & -# 1873| [MoveAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2&&) -# 1873| : +# 1875| [MoveAssignmentOperator] missing_declaration_entries::Bar2& missing_declaration_entries::Bar2::operator=(missing_declaration_entries::Bar2&&) +# 1875| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] Bar2 && -# 1875| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| : -# 1875| getEntryPoint(): [BlockStmt] { ... } -# 1876| getStmt(0): [DeclStmt] declaration -# 1876| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1876| Type = [ArrayType] int[10] -# 1876| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y -# 1876| Type = [ArrayType] int[10] -# 1877| getStmt(1): [ExprStmt] ExprStmt -# 1877| getExpr(): [AssignExpr] ... = ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getLValue(): [PointerDereferenceExpr] * ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getOperand(): [VariableAccess] x -# 1877| Type = [ArrayType] int[10] -# 1877| ValueCategory = lvalue -# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1877| Type = [IntPointerType] int * -# 1877| ValueCategory = prvalue -# 1877| getRValue(): [Literal] 10 -# 1877| Type = [IntType] int -# 1877| Value = [Literal] 10 -# 1877| ValueCategory = prvalue -# 1878| getStmt(2): [ExprStmt] ExprStmt -# 1878| getExpr(): [AssignExpr] ... = ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getLValue(): [PointerDereferenceExpr] * ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getOperand(): [VariableAccess] y -# 1878| Type = [ArrayType] int[10] -# 1878| ValueCategory = lvalue -# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1878| Type = [IntPointerType] int * -# 1878| ValueCategory = prvalue -# 1878| getRValue(): [Literal] 10 -# 1878| Type = [IntType] int -# 1878| Value = [Literal] 10 -# 1878| ValueCategory = prvalue -# 1879| getStmt(3): [ReturnStmt] return ... -# 1879| getExpr(): [AddExpr] ... + ... +# 1877| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| : +# 1877| getEntryPoint(): [BlockStmt] { ... } +# 1878| getStmt(0): [DeclStmt] declaration +# 1878| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1878| Type = [ArrayType] int[10] +# 1878| getDeclarationEntry(1): [VariableDeclarationEntry] definition of y +# 1878| Type = [ArrayType] int[10] +# 1879| getStmt(1): [ExprStmt] ExprStmt +# 1879| getExpr(): [AssignExpr] ... = ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue -# 1879| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1879| ValueCategory = lvalue +# 1879| getLValue(): [PointerDereferenceExpr] * ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) +# 1879| ValueCategory = lvalue # 1879| getOperand(): [VariableAccess] x # 1879| Type = [ArrayType] int[10] # 1879| ValueCategory = lvalue # 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1879| Type = [IntPointerType] int * # 1879| ValueCategory = prvalue -# 1879| getRightOperand(): [PointerDereferenceExpr] * ... +# 1879| getRValue(): [Literal] 10 # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) -# 1879| getOperand(): [VariableAccess] y -# 1879| Type = [ArrayType] int[10] -# 1879| ValueCategory = lvalue -# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1879| Type = [IntPointerType] int * -# 1879| ValueCategory = prvalue -# 1875| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| : -# 1875| getEntryPoint(): [BlockStmt] { ... } -# 1876| getStmt(0): [DeclStmt] declaration -# 1877| getStmt(1): [ExprStmt] ExprStmt -# 1877| getExpr(): [AssignExpr] ... = ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getLValue(): [PointerDereferenceExpr] * ... -# 1877| Type = [IntType] int -# 1877| ValueCategory = lvalue -# 1877| getOperand(): [VariableAccess] x -# 1877| Type = [ArrayType] int[10] -# 1877| ValueCategory = lvalue -# 1877| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1877| Type = [IntPointerType] int * -# 1877| ValueCategory = prvalue -# 1877| getRValue(): [Literal] 10 -# 1877| Type = [IntType] int -# 1877| Value = [Literal] 10 -# 1877| ValueCategory = prvalue -# 1878| getStmt(2): [ExprStmt] ExprStmt -# 1878| getExpr(): [AssignExpr] ... = ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getLValue(): [PointerDereferenceExpr] * ... -# 1878| Type = [IntType] int -# 1878| ValueCategory = lvalue -# 1878| getOperand(): [VariableAccess] y -# 1878| Type = [ArrayType] int[10] -# 1878| ValueCategory = lvalue -# 1878| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1878| Type = [IntPointerType] int * -# 1878| ValueCategory = prvalue -# 1878| getRValue(): [Literal] 10 -# 1878| Type = [IntType] int -# 1878| Value = [Literal] 10 -# 1878| ValueCategory = prvalue -# 1879| getStmt(3): [ReturnStmt] return ... -# 1879| getExpr(): [AddExpr] ... + ... +# 1879| Value = [Literal] 10 +# 1879| ValueCategory = prvalue +# 1880| getStmt(2): [ExprStmt] ExprStmt +# 1880| getExpr(): [AssignExpr] ... = ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getLValue(): [PointerDereferenceExpr] * ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getOperand(): [VariableAccess] y +# 1880| Type = [ArrayType] int[10] +# 1880| ValueCategory = lvalue +# 1880| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1880| Type = [IntPointerType] int * +# 1880| ValueCategory = prvalue +# 1880| getRValue(): [Literal] 10 +# 1880| Type = [IntType] int +# 1880| Value = [Literal] 10 +# 1880| ValueCategory = prvalue +# 1881| getStmt(3): [ReturnStmt] return ... +# 1881| getExpr(): [AddExpr] ... + ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue +# 1881| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] x +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1881| getRightOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] y +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1877| [MemberFunction] int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| : +# 1877| getEntryPoint(): [BlockStmt] { ... } +# 1878| getStmt(0): [DeclStmt] declaration +# 1879| getStmt(1): [ExprStmt] ExprStmt +# 1879| getExpr(): [AssignExpr] ... = ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue -# 1879| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1879| ValueCategory = lvalue +# 1879| getLValue(): [PointerDereferenceExpr] * ... # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) +# 1879| ValueCategory = lvalue # 1879| getOperand(): [VariableAccess] x # 1879| Type = [ArrayType] int[10] # 1879| ValueCategory = lvalue # 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion # 1879| Type = [IntPointerType] int * # 1879| ValueCategory = prvalue -# 1879| getRightOperand(): [PointerDereferenceExpr] * ... +# 1879| getRValue(): [Literal] 10 # 1879| Type = [IntType] int -# 1879| ValueCategory = prvalue(load) -# 1879| getOperand(): [VariableAccess] y -# 1879| Type = [ArrayType] int[10] -# 1879| ValueCategory = lvalue -# 1879| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion -# 1879| Type = [IntPointerType] int * -# 1879| ValueCategory = prvalue -# 1883| [TopLevelFunction] void missing_declaration_entries::test2() -# 1883| : -# 1883| getEntryPoint(): [BlockStmt] { ... } -# 1884| getStmt(0): [DeclStmt] declaration -# 1884| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b -# 1884| Type = [ClassTemplateInstantiation,Struct] Bar2 -# 1885| getStmt(1): [ExprStmt] ExprStmt -# 1885| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries -# 1885| Type = [IntType] int -# 1885| ValueCategory = prvalue -# 1885| getQualifier(): [VariableAccess] b -# 1885| Type = [ClassTemplateInstantiation,Struct] Bar2 -# 1885| ValueCategory = lvalue -# 1886| getStmt(2): [ReturnStmt] return ... -# 1889| [GlobalVariable] char global_template -# 1889| getInitializer(): [Initializer] initializer for global_template -# 1889| getExpr(): [Literal] 42 -# 1889| Type = [IntType] int -# 1889| Value = [Literal] 42 -# 1889| ValueCategory = prvalue -# 1889| getExpr().getFullyConverted(): [CStyleCast] (char)... -# 1889| Conversion = [IntegralConversion] integral conversion -# 1889| Type = [PlainCharType] char -# 1889| Value = [CStyleCast] 42 -# 1889| ValueCategory = prvalue -# 1889| [GlobalVariable] int global_template -# 1889| getInitializer(): [Initializer] initializer for global_template -# 1889| getExpr(): [Literal] 42 -# 1889| Type = [IntType] int -# 1889| Value = [Literal] 42 -# 1889| ValueCategory = prvalue -# 1891| [TopLevelFunction] int test_global_template_int() -# 1891| : -# 1891| getEntryPoint(): [BlockStmt] { ... } -# 1892| getStmt(0): [DeclStmt] declaration -# 1892| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int -# 1892| Type = [IntType] int -# 1892| getVariable().getInitializer(): [Initializer] initializer for local_int -# 1892| getExpr(): [VariableAccess] global_template -# 1892| Type = [IntType] int -# 1892| ValueCategory = prvalue(load) -# 1893| getStmt(1): [DeclStmt] declaration -# 1893| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char -# 1893| Type = [PlainCharType] char -# 1893| getVariable().getInitializer(): [Initializer] initializer for local_char -# 1893| getExpr(): [VariableAccess] global_template -# 1893| Type = [PlainCharType] char -# 1893| ValueCategory = prvalue(load) -# 1894| getStmt(2): [ReturnStmt] return ... -# 1894| getExpr(): [AddExpr] ... + ... +# 1879| Value = [Literal] 10 +# 1879| ValueCategory = prvalue +# 1880| getStmt(2): [ExprStmt] ExprStmt +# 1880| getExpr(): [AssignExpr] ... = ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getLValue(): [PointerDereferenceExpr] * ... +# 1880| Type = [IntType] int +# 1880| ValueCategory = lvalue +# 1880| getOperand(): [VariableAccess] y +# 1880| Type = [ArrayType] int[10] +# 1880| ValueCategory = lvalue +# 1880| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1880| Type = [IntPointerType] int * +# 1880| ValueCategory = prvalue +# 1880| getRValue(): [Literal] 10 +# 1880| Type = [IntType] int +# 1880| Value = [Literal] 10 +# 1880| ValueCategory = prvalue +# 1881| getStmt(3): [ReturnStmt] return ... +# 1881| getExpr(): [AddExpr] ... + ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue +# 1881| getLeftOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] x +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1881| getRightOperand(): [PointerDereferenceExpr] * ... +# 1881| Type = [IntType] int +# 1881| ValueCategory = prvalue(load) +# 1881| getOperand(): [VariableAccess] y +# 1881| Type = [ArrayType] int[10] +# 1881| ValueCategory = lvalue +# 1881| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 1881| Type = [IntPointerType] int * +# 1881| ValueCategory = prvalue +# 1885| [TopLevelFunction] void missing_declaration_entries::test2() +# 1885| : +# 1885| getEntryPoint(): [BlockStmt] { ... } +# 1886| getStmt(0): [DeclStmt] declaration +# 1886| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b +# 1886| Type = [ClassTemplateInstantiation,Struct] Bar2 +# 1887| getStmt(1): [ExprStmt] ExprStmt +# 1887| getExpr(): [FunctionCall] call to two_missing_variable_declaration_entries +# 1887| Type = [IntType] int +# 1887| ValueCategory = prvalue +# 1887| getQualifier(): [VariableAccess] b +# 1887| Type = [ClassTemplateInstantiation,Struct] Bar2 +# 1887| ValueCategory = lvalue +# 1888| getStmt(2): [ReturnStmt] return ... +# 1891| [GlobalVariable] char global_template +# 1891| getInitializer(): [Initializer] initializer for global_template +# 1891| getExpr(): [Literal] 42 +# 1891| Type = [IntType] int +# 1891| Value = [Literal] 42 +# 1891| ValueCategory = prvalue +# 1891| getExpr().getFullyConverted(): [CStyleCast] (char)... +# 1891| Conversion = [IntegralConversion] integral conversion +# 1891| Type = [PlainCharType] char +# 1891| Value = [CStyleCast] 42 +# 1891| ValueCategory = prvalue +# 1891| [GlobalVariable] int global_template +# 1891| getInitializer(): [Initializer] initializer for global_template +# 1891| getExpr(): [Literal] 42 +# 1891| Type = [IntType] int +# 1891| Value = [Literal] 42 +# 1891| ValueCategory = prvalue +# 1893| [TopLevelFunction] int test_global_template_int() +# 1893| : +# 1893| getEntryPoint(): [BlockStmt] { ... } +# 1894| getStmt(0): [DeclStmt] declaration +# 1894| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_int # 1894| Type = [IntType] int -# 1894| ValueCategory = prvalue -# 1894| getLeftOperand(): [VariableAccess] local_int -# 1894| Type = [IntType] int -# 1894| ValueCategory = prvalue(load) -# 1894| getRightOperand(): [VariableAccess] local_char -# 1894| Type = [PlainCharType] char -# 1894| ValueCategory = prvalue(load) -# 1894| getRightOperand().getFullyConverted(): [CStyleCast] (int)... -# 1894| Conversion = [IntegralConversion] integral conversion -# 1894| Type = [IntType] int -# 1894| ValueCategory = prvalue -# 1897| [TopLevelFunction] void noreturnFunc() -# 1897| : -# 1899| [TopLevelFunction] int noreturnTest(int) +# 1894| getVariable().getInitializer(): [Initializer] initializer for local_int +# 1894| getExpr(): [VariableAccess] global_template +# 1894| Type = [IntType] int +# 1894| ValueCategory = prvalue(load) +# 1895| getStmt(1): [DeclStmt] declaration +# 1895| getDeclarationEntry(0): [VariableDeclarationEntry] definition of local_char +# 1895| Type = [PlainCharType] char +# 1895| getVariable().getInitializer(): [Initializer] initializer for local_char +# 1895| getExpr(): [VariableAccess] global_template +# 1895| Type = [PlainCharType] char +# 1895| ValueCategory = prvalue(load) +# 1896| getStmt(2): [ReturnStmt] return ... +# 1896| getExpr(): [AddExpr] ... + ... +# 1896| Type = [IntType] int +# 1896| ValueCategory = prvalue +# 1896| getLeftOperand(): [VariableAccess] local_int +# 1896| Type = [IntType] int +# 1896| ValueCategory = prvalue(load) +# 1896| getRightOperand(): [VariableAccess] local_char +# 1896| Type = [PlainCharType] char +# 1896| ValueCategory = prvalue(load) +# 1896| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 1896| Conversion = [IntegralConversion] integral conversion +# 1896| Type = [IntType] int +# 1896| ValueCategory = prvalue +# 1899| [TopLevelFunction] void noreturnFunc() # 1899| : -# 1899| getParameter(0): [Parameter] x -# 1899| Type = [IntType] int -# 1899| getEntryPoint(): [BlockStmt] { ... } -# 1900| getStmt(0): [IfStmt] if (...) ... -# 1900| getCondition(): [LTExpr] ... < ... -# 1900| Type = [BoolType] bool -# 1900| ValueCategory = prvalue -# 1900| getLesserOperand(): [VariableAccess] x -# 1900| Type = [IntType] int -# 1900| ValueCategory = prvalue(load) -# 1900| getGreaterOperand(): [Literal] 10 -# 1900| Type = [IntType] int -# 1900| Value = [Literal] 10 -# 1900| ValueCategory = prvalue -# 1900| getThen(): [BlockStmt] { ... } -# 1901| getStmt(0): [ReturnStmt] return ... -# 1901| getExpr(): [VariableAccess] x -# 1901| Type = [IntType] int -# 1901| ValueCategory = prvalue(load) -# 1902| getElse(): [BlockStmt] { ... } -# 1903| getStmt(0): [ExprStmt] ExprStmt -# 1903| getExpr(): [FunctionCall] call to noreturnFunc -# 1903| Type = [VoidType] void -# 1903| ValueCategory = prvalue -# 1905| getStmt(1): [ReturnStmt] return ... -# 1907| [TopLevelFunction] int noreturnTest2(int) -# 1907| : -# 1907| getParameter(0): [Parameter] x -# 1907| Type = [IntType] int -# 1907| getEntryPoint(): [BlockStmt] { ... } -# 1908| getStmt(0): [IfStmt] if (...) ... -# 1908| getCondition(): [LTExpr] ... < ... -# 1908| Type = [BoolType] bool -# 1908| ValueCategory = prvalue -# 1908| getLesserOperand(): [VariableAccess] x -# 1908| Type = [IntType] int -# 1908| ValueCategory = prvalue(load) -# 1908| getGreaterOperand(): [Literal] 10 -# 1908| Type = [IntType] int -# 1908| Value = [Literal] 10 -# 1908| ValueCategory = prvalue -# 1908| getThen(): [BlockStmt] { ... } -# 1909| getStmt(0): [ExprStmt] ExprStmt -# 1909| getExpr(): [FunctionCall] call to noreturnFunc -# 1909| Type = [VoidType] void -# 1909| ValueCategory = prvalue -# 1911| getStmt(1): [ReturnStmt] return ... -# 1911| getExpr(): [VariableAccess] x -# 1911| Type = [IntType] int -# 1911| ValueCategory = prvalue(load) -# 1914| [TopLevelFunction] int static_function(int) -# 1914| : -# 1914| getParameter(0): [Parameter] x -# 1914| Type = [IntType] int -# 1914| getEntryPoint(): [BlockStmt] { ... } -# 1915| getStmt(0): [ReturnStmt] return ... -# 1915| getExpr(): [VariableAccess] x -# 1915| Type = [IntType] int -# 1915| ValueCategory = prvalue(load) -# 1918| [TopLevelFunction] void test_static_functions_with_assignments() -# 1918| : -# 1918| getEntryPoint(): [BlockStmt] { ... } -# 1919| getStmt(0): [DeclStmt] declaration -# 1919| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1919| Type = [Class] C -# 1919| getVariable().getInitializer(): [Initializer] initializer for c -# 1919| getExpr(): [ConstructorCall] call to C -# 1919| Type = [VoidType] void -# 1919| ValueCategory = prvalue -# 1920| getStmt(1): [DeclStmt] declaration -# 1920| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1920| Type = [IntType] int -# 1921| getStmt(2): [ExprStmt] ExprStmt -# 1921| getExpr(): [AssignExpr] ... = ... -# 1921| Type = [IntType] int -# 1921| ValueCategory = lvalue -# 1921| getLValue(): [VariableAccess] x -# 1921| Type = [IntType] int -# 1921| ValueCategory = lvalue -# 1921| getRValue(): [FunctionCall] call to StaticMemberFunction -# 1921| Type = [IntType] int -# 1921| ValueCategory = prvalue -# 1921| getQualifier(): [VariableAccess] c -# 1921| Type = [Class] C -# 1921| ValueCategory = lvalue -# 1921| getArgument(0): [Literal] 10 -# 1921| Type = [IntType] int -# 1921| Value = [Literal] 10 +# 1901| [TopLevelFunction] int noreturnTest(int) +# 1901| : +# 1901| getParameter(0): [Parameter] x +# 1901| Type = [IntType] int +# 1901| getEntryPoint(): [BlockStmt] { ... } +# 1902| getStmt(0): [IfStmt] if (...) ... +# 1902| getCondition(): [LTExpr] ... < ... +# 1902| Type = [BoolType] bool +# 1902| ValueCategory = prvalue +# 1902| getLesserOperand(): [VariableAccess] x +# 1902| Type = [IntType] int +# 1902| ValueCategory = prvalue(load) +# 1902| getGreaterOperand(): [Literal] 10 +# 1902| Type = [IntType] int +# 1902| Value = [Literal] 10 +# 1902| ValueCategory = prvalue +# 1902| getThen(): [BlockStmt] { ... } +# 1903| getStmt(0): [ReturnStmt] return ... +# 1903| getExpr(): [VariableAccess] x +# 1903| Type = [IntType] int +# 1903| ValueCategory = prvalue(load) +# 1904| getElse(): [BlockStmt] { ... } +# 1905| getStmt(0): [ExprStmt] ExprStmt +# 1905| getExpr(): [FunctionCall] call to noreturnFunc +# 1905| Type = [VoidType] void +# 1905| ValueCategory = prvalue +# 1907| getStmt(1): [ReturnStmt] return ... +# 1909| [TopLevelFunction] int noreturnTest2(int) +# 1909| : +# 1909| getParameter(0): [Parameter] x +# 1909| Type = [IntType] int +# 1909| getEntryPoint(): [BlockStmt] { ... } +# 1910| getStmt(0): [IfStmt] if (...) ... +# 1910| getCondition(): [LTExpr] ... < ... +# 1910| Type = [BoolType] bool +# 1910| ValueCategory = prvalue +# 1910| getLesserOperand(): [VariableAccess] x +# 1910| Type = [IntType] int +# 1910| ValueCategory = prvalue(load) +# 1910| getGreaterOperand(): [Literal] 10 +# 1910| Type = [IntType] int +# 1910| Value = [Literal] 10 +# 1910| ValueCategory = prvalue +# 1910| getThen(): [BlockStmt] { ... } +# 1911| getStmt(0): [ExprStmt] ExprStmt +# 1911| getExpr(): [FunctionCall] call to noreturnFunc +# 1911| Type = [VoidType] void +# 1911| ValueCategory = prvalue +# 1913| getStmt(1): [ReturnStmt] return ... +# 1913| getExpr(): [VariableAccess] x +# 1913| Type = [IntType] int +# 1913| ValueCategory = prvalue(load) +# 1916| [TopLevelFunction] int static_function(int) +# 1916| : +# 1916| getParameter(0): [Parameter] x +# 1916| Type = [IntType] int +# 1916| getEntryPoint(): [BlockStmt] { ... } +# 1917| getStmt(0): [ReturnStmt] return ... +# 1917| getExpr(): [VariableAccess] x +# 1917| Type = [IntType] int +# 1917| ValueCategory = prvalue(load) +# 1920| [TopLevelFunction] void test_static_functions_with_assignments() +# 1920| : +# 1920| getEntryPoint(): [BlockStmt] { ... } +# 1921| getStmt(0): [DeclStmt] declaration +# 1921| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1921| Type = [Class] C +# 1921| getVariable().getInitializer(): [Initializer] initializer for c +# 1921| getExpr(): [ConstructorCall] call to C +# 1921| Type = [VoidType] void # 1921| ValueCategory = prvalue -# 1922| getStmt(3): [DeclStmt] declaration -# 1922| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1922| getStmt(1): [DeclStmt] declaration +# 1922| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1922| Type = [IntType] int -# 1923| getStmt(4): [ExprStmt] ExprStmt +# 1923| getStmt(2): [ExprStmt] ExprStmt # 1923| getExpr(): [AssignExpr] ... = ... # 1923| Type = [IntType] int # 1923| ValueCategory = lvalue -# 1923| getLValue(): [VariableAccess] y +# 1923| getLValue(): [VariableAccess] x # 1923| Type = [IntType] int # 1923| ValueCategory = lvalue # 1923| getRValue(): [FunctionCall] call to StaticMemberFunction # 1923| Type = [IntType] int # 1923| ValueCategory = prvalue +# 1923| getQualifier(): [VariableAccess] c +# 1923| Type = [Class] C +# 1923| ValueCategory = lvalue # 1923| getArgument(0): [Literal] 10 # 1923| Type = [IntType] int # 1923| Value = [Literal] 10 # 1923| ValueCategory = prvalue -# 1924| getStmt(5): [DeclStmt] declaration -# 1924| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1924| getStmt(3): [DeclStmt] declaration +# 1924| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 1924| Type = [IntType] int -# 1925| getStmt(6): [ExprStmt] ExprStmt +# 1925| getStmt(4): [ExprStmt] ExprStmt # 1925| getExpr(): [AssignExpr] ... = ... # 1925| Type = [IntType] int # 1925| ValueCategory = lvalue -# 1925| getLValue(): [VariableAccess] z +# 1925| getLValue(): [VariableAccess] y # 1925| Type = [IntType] int # 1925| ValueCategory = lvalue -# 1925| getRValue(): [FunctionCall] call to static_function +# 1925| getRValue(): [FunctionCall] call to StaticMemberFunction # 1925| Type = [IntType] int # 1925| ValueCategory = prvalue # 1925| getArgument(0): [Literal] 10 # 1925| Type = [IntType] int # 1925| Value = [Literal] 10 # 1925| ValueCategory = prvalue -# 1926| getStmt(7): [ReturnStmt] return ... -# 1926| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1926| Type = [VoidType] void -# 1926| ValueCategory = prvalue -# 1926| getQualifier(): [VariableAccess] c -# 1926| Type = [Class] C -# 1926| ValueCategory = lvalue -# 1928| [TopLevelFunction] void test_double_assign() -# 1928| : -# 1928| getEntryPoint(): [BlockStmt] { ... } -# 1929| getStmt(0): [DeclStmt] declaration -# 1929| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1929| Type = [IntType] int -# 1929| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1929| Type = [IntType] int -# 1930| getStmt(1): [ExprStmt] ExprStmt -# 1930| getExpr(): [AssignExpr] ... = ... -# 1930| Type = [IntType] int -# 1930| ValueCategory = lvalue -# 1930| getLValue(): [VariableAccess] i -# 1930| Type = [IntType] int -# 1930| ValueCategory = lvalue -# 1930| getRValue(): [AssignExpr] ... = ... -# 1930| Type = [IntType] int -# 1930| ValueCategory = prvalue(load) -# 1930| getLValue(): [VariableAccess] j -# 1930| Type = [IntType] int -# 1930| ValueCategory = lvalue -# 1930| getRValue(): [Literal] 40 -# 1930| Type = [IntType] int -# 1930| Value = [Literal] 40 -# 1930| ValueCategory = prvalue -# 1931| getStmt(2): [ReturnStmt] return ... -# 1933| [TopLevelFunction] void test_assign_with_assign_operation() -# 1933| : -# 1933| getEntryPoint(): [BlockStmt] { ... } -# 1934| getStmt(0): [DeclStmt] declaration -# 1934| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i -# 1934| Type = [IntType] int -# 1934| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j -# 1934| Type = [IntType] int -# 1934| getVariable().getInitializer(): [Initializer] initializer for j -# 1934| getExpr(): [Literal] 0 -# 1934| Type = [IntType] int -# 1934| Value = [Literal] 0 -# 1934| ValueCategory = prvalue -# 1935| getStmt(1): [ExprStmt] ExprStmt -# 1935| getExpr(): [AssignExpr] ... = ... -# 1935| Type = [IntType] int -# 1935| ValueCategory = lvalue -# 1935| getLValue(): [VariableAccess] i -# 1935| Type = [IntType] int -# 1935| ValueCategory = lvalue -# 1935| getRValue(): [AssignAddExpr] ... += ... -# 1935| Type = [IntType] int -# 1935| ValueCategory = prvalue(load) -# 1935| getLValue(): [VariableAccess] j -# 1935| Type = [IntType] int -# 1935| ValueCategory = lvalue -# 1935| getRValue(): [Literal] 40 -# 1935| Type = [IntType] int -# 1935| Value = [Literal] 40 -# 1935| ValueCategory = prvalue -# 1935| getRValue().getFullyConverted(): [ParenthesisExpr] (...) -# 1935| Type = [IntType] int -# 1935| ValueCategory = prvalue(load) -# 1936| getStmt(2): [ReturnStmt] return ... -# 1938| [CopyAssignmentOperator] D& D::operator=(D const&) -# 1938| : +# 1926| getStmt(5): [DeclStmt] declaration +# 1926| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 1926| Type = [IntType] int +# 1927| getStmt(6): [ExprStmt] ExprStmt +# 1927| getExpr(): [AssignExpr] ... = ... +# 1927| Type = [IntType] int +# 1927| ValueCategory = lvalue +# 1927| getLValue(): [VariableAccess] z +# 1927| Type = [IntType] int +# 1927| ValueCategory = lvalue +# 1927| getRValue(): [FunctionCall] call to static_function +# 1927| Type = [IntType] int +# 1927| ValueCategory = prvalue +# 1927| getArgument(0): [Literal] 10 +# 1927| Type = [IntType] int +# 1927| Value = [Literal] 10 +# 1927| ValueCategory = prvalue +# 1928| getStmt(7): [ReturnStmt] return ... +# 1928| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1928| Type = [VoidType] void +# 1928| ValueCategory = prvalue +# 1928| getQualifier(): [VariableAccess] c +# 1928| Type = [Class] C +# 1928| ValueCategory = lvalue +# 1930| [TopLevelFunction] void test_double_assign() +# 1930| : +# 1930| getEntryPoint(): [BlockStmt] { ... } +# 1931| getStmt(0): [DeclStmt] declaration +# 1931| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1931| Type = [IntType] int +# 1931| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1931| Type = [IntType] int +# 1932| getStmt(1): [ExprStmt] ExprStmt +# 1932| getExpr(): [AssignExpr] ... = ... +# 1932| Type = [IntType] int +# 1932| ValueCategory = lvalue +# 1932| getLValue(): [VariableAccess] i +# 1932| Type = [IntType] int +# 1932| ValueCategory = lvalue +# 1932| getRValue(): [AssignExpr] ... = ... +# 1932| Type = [IntType] int +# 1932| ValueCategory = prvalue(load) +# 1932| getLValue(): [VariableAccess] j +# 1932| Type = [IntType] int +# 1932| ValueCategory = lvalue +# 1932| getRValue(): [Literal] 40 +# 1932| Type = [IntType] int +# 1932| Value = [Literal] 40 +# 1932| ValueCategory = prvalue +# 1933| getStmt(2): [ReturnStmt] return ... +# 1935| [TopLevelFunction] void test_assign_with_assign_operation() +# 1935| : +# 1935| getEntryPoint(): [BlockStmt] { ... } +# 1936| getStmt(0): [DeclStmt] declaration +# 1936| getDeclarationEntry(0): [VariableDeclarationEntry] definition of i +# 1936| Type = [IntType] int +# 1936| getDeclarationEntry(1): [VariableDeclarationEntry] definition of j +# 1936| Type = [IntType] int +# 1936| getVariable().getInitializer(): [Initializer] initializer for j +# 1936| getExpr(): [Literal] 0 +# 1936| Type = [IntType] int +# 1936| Value = [Literal] 0 +# 1936| ValueCategory = prvalue +# 1937| getStmt(1): [ExprStmt] ExprStmt +# 1937| getExpr(): [AssignExpr] ... = ... +# 1937| Type = [IntType] int +# 1937| ValueCategory = lvalue +# 1937| getLValue(): [VariableAccess] i +# 1937| Type = [IntType] int +# 1937| ValueCategory = lvalue +# 1937| getRValue(): [AssignAddExpr] ... += ... +# 1937| Type = [IntType] int +# 1937| ValueCategory = prvalue(load) +# 1937| getLValue(): [VariableAccess] j +# 1937| Type = [IntType] int +# 1937| ValueCategory = lvalue +# 1937| getRValue(): [Literal] 40 +# 1937| Type = [IntType] int +# 1937| Value = [Literal] 40 +# 1937| ValueCategory = prvalue +# 1937| getRValue().getFullyConverted(): [ParenthesisExpr] (...) +# 1937| Type = [IntType] int +# 1937| ValueCategory = prvalue(load) +# 1938| getStmt(2): [ReturnStmt] return ... +# 1940| [CopyAssignmentOperator] D& D::operator=(D const&) +# 1940| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const D & -# 1938| [MoveAssignmentOperator] D& D::operator=(D&&) -# 1938| : +# 1940| [MoveAssignmentOperator] D& D::operator=(D&&) +# 1940| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] D && -# 1942| [MemberFunction] D& D::ReferenceStaticMemberFunction() -# 1942| : -# 1942| getEntryPoint(): [BlockStmt] { ... } -# 1943| getStmt(0): [ReturnStmt] return ... -# 1943| getExpr(): [VariableAccess] x -# 1943| Type = [Class] D -# 1943| ValueCategory = lvalue -# 1943| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) -# 1943| Type = [LValueReferenceType] D & -# 1943| ValueCategory = prvalue -# 1945| [MemberFunction] D D::ObjectStaticMemberFunction() -# 1945| : -# 1945| getEntryPoint(): [BlockStmt] { ... } -# 1946| getStmt(0): [ReturnStmt] return ... -# 1946| getExpr(): [VariableAccess] x -# 1946| Type = [Class] D -# 1946| ValueCategory = prvalue(load) -# 1950| [TopLevelFunction] void test_static_member_functions_with_reference_return() -# 1950| : -# 1950| getEntryPoint(): [BlockStmt] { ... } -# 1951| getStmt(0): [DeclStmt] declaration -# 1951| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 1951| Type = [Class] D -# 1953| getStmt(1): [ExprStmt] ExprStmt -# 1953| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1953| Type = [LValueReferenceType] D & -# 1953| ValueCategory = prvalue -# 1953| getQualifier(): [VariableAccess] d -# 1953| Type = [Class] D -# 1953| ValueCategory = lvalue -# 1953| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1944| [MemberFunction] D& D::ReferenceStaticMemberFunction() +# 1944| : +# 1944| getEntryPoint(): [BlockStmt] { ... } +# 1945| getStmt(0): [ReturnStmt] return ... +# 1945| getExpr(): [VariableAccess] x +# 1945| Type = [Class] D +# 1945| ValueCategory = lvalue +# 1945| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 1945| Type = [LValueReferenceType] D & +# 1945| ValueCategory = prvalue +# 1947| [MemberFunction] D D::ObjectStaticMemberFunction() +# 1947| : +# 1947| getEntryPoint(): [BlockStmt] { ... } +# 1948| getStmt(0): [ReturnStmt] return ... +# 1948| getExpr(): [VariableAccess] x +# 1948| Type = [Class] D +# 1948| ValueCategory = prvalue(load) +# 1952| [TopLevelFunction] void test_static_member_functions_with_reference_return() +# 1952| : +# 1952| getEntryPoint(): [BlockStmt] { ... } +# 1953| getStmt(0): [DeclStmt] declaration +# 1953| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d # 1953| Type = [Class] D -# 1953| ValueCategory = lvalue -# 1954| getStmt(2): [ExprStmt] ExprStmt -# 1954| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1954| Type = [LValueReferenceType] D & -# 1954| ValueCategory = prvalue -# 1954| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1954| Type = [Class] D -# 1954| ValueCategory = lvalue -# 1955| getStmt(3): [ExprStmt] ExprStmt -# 1955| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 1955| Type = [Class] D +# 1955| getStmt(1): [ExprStmt] ExprStmt +# 1955| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 1955| Type = [LValueReferenceType] D & # 1955| ValueCategory = prvalue # 1955| getQualifier(): [VariableAccess] d # 1955| Type = [Class] D # 1955| ValueCategory = lvalue -# 1956| getStmt(4): [ExprStmt] ExprStmt -# 1956| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction -# 1956| Type = [Class] D +# 1955| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1955| Type = [Class] D +# 1955| ValueCategory = lvalue +# 1956| getStmt(2): [ExprStmt] ExprStmt +# 1956| getExpr(): [FunctionCall] call to ReferenceStaticMemberFunction +# 1956| Type = [LValueReferenceType] D & # 1956| ValueCategory = prvalue -# 1958| getStmt(5): [DeclStmt] declaration -# 1958| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1956| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1956| Type = [Class] D +# 1956| ValueCategory = lvalue +# 1957| getStmt(3): [ExprStmt] ExprStmt +# 1957| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction +# 1957| Type = [Class] D +# 1957| ValueCategory = prvalue +# 1957| getQualifier(): [VariableAccess] d +# 1957| Type = [Class] D +# 1957| ValueCategory = lvalue +# 1958| getStmt(4): [ExprStmt] ExprStmt +# 1958| getExpr(): [FunctionCall] call to ObjectStaticMemberFunction # 1958| Type = [Class] D -# 1959| getStmt(6): [ExprStmt] ExprStmt -# 1959| getExpr(): [AssignExpr] ... = ... -# 1959| Type = [Class] D -# 1959| ValueCategory = lvalue -# 1959| getLValue(): [VariableAccess] x -# 1959| Type = [Class] D -# 1959| ValueCategory = lvalue -# 1959| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction -# 1959| Type = [LValueReferenceType] D & -# 1959| ValueCategory = prvalue -# 1959| getQualifier(): [VariableAccess] d -# 1959| Type = [Class] D -# 1959| ValueCategory = lvalue -# 1959| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1959| Type = [Class] D -# 1959| ValueCategory = prvalue(load) -# 1960| getStmt(7): [DeclStmt] declaration -# 1960| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 1958| ValueCategory = prvalue +# 1960| getStmt(5): [DeclStmt] declaration +# 1960| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x # 1960| Type = [Class] D -# 1961| getStmt(8): [ExprStmt] ExprStmt +# 1961| getStmt(6): [ExprStmt] ExprStmt # 1961| getExpr(): [AssignExpr] ... = ... # 1961| Type = [Class] D # 1961| ValueCategory = lvalue -# 1961| getLValue(): [VariableAccess] y +# 1961| getLValue(): [VariableAccess] x # 1961| Type = [Class] D # 1961| ValueCategory = lvalue # 1961| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction # 1961| Type = [LValueReferenceType] D & # 1961| ValueCategory = prvalue +# 1961| getQualifier(): [VariableAccess] d +# 1961| Type = [Class] D +# 1961| ValueCategory = lvalue # 1961| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1961| Type = [Class] D # 1961| ValueCategory = prvalue(load) -# 1962| getStmt(9): [DeclStmt] declaration -# 1962| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j +# 1962| getStmt(7): [DeclStmt] declaration +# 1962| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y # 1962| Type = [Class] D -# 1963| getStmt(10): [ExprStmt] ExprStmt +# 1963| getStmt(8): [ExprStmt] ExprStmt # 1963| getExpr(): [AssignExpr] ... = ... # 1963| Type = [Class] D # 1963| ValueCategory = lvalue -# 1963| getLValue(): [VariableAccess] j +# 1963| getLValue(): [VariableAccess] y # 1963| Type = [Class] D # 1963| ValueCategory = lvalue -# 1963| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction -# 1963| Type = [Class] D +# 1963| getRValue(): [FunctionCall] call to ReferenceStaticMemberFunction +# 1963| Type = [LValueReferenceType] D & # 1963| ValueCategory = prvalue -# 1963| getQualifier(): [VariableAccess] d -# 1963| Type = [Class] D -# 1963| ValueCategory = lvalue -# 1964| getStmt(11): [DeclStmt] declaration -# 1964| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k +# 1963| getRValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1963| Type = [Class] D +# 1963| ValueCategory = prvalue(load) +# 1964| getStmt(9): [DeclStmt] declaration +# 1964| getDeclarationEntry(0): [VariableDeclarationEntry] definition of j # 1964| Type = [Class] D -# 1965| getStmt(12): [ExprStmt] ExprStmt +# 1965| getStmt(10): [ExprStmt] ExprStmt # 1965| getExpr(): [AssignExpr] ... = ... # 1965| Type = [Class] D # 1965| ValueCategory = lvalue -# 1965| getLValue(): [VariableAccess] k +# 1965| getLValue(): [VariableAccess] j # 1965| Type = [Class] D # 1965| ValueCategory = lvalue # 1965| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction # 1965| Type = [Class] D # 1965| ValueCategory = prvalue -# 1966| getStmt(13): [ReturnStmt] return ... -# 1968| [TopLevelFunction] void test_volatile() -# 1968| : -# 1968| getEntryPoint(): [BlockStmt] { ... } -# 1969| getStmt(0): [DeclStmt] declaration -# 1969| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 1969| Type = [SpecifiedType] volatile int -# 1970| getStmt(1): [ExprStmt] ExprStmt -# 1970| getExpr(): [VariableAccess] x -# 1970| Type = [IntType] int -# 1970| ValueCategory = prvalue(load) -# 1971| getStmt(2): [ReturnStmt] return ... -# 1973| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) -# 1973| : +# 1965| getQualifier(): [VariableAccess] d +# 1965| Type = [Class] D +# 1965| ValueCategory = lvalue +# 1966| getStmt(11): [DeclStmt] declaration +# 1966| getDeclarationEntry(0): [VariableDeclarationEntry] definition of k +# 1966| Type = [Class] D +# 1967| getStmt(12): [ExprStmt] ExprStmt +# 1967| getExpr(): [AssignExpr] ... = ... +# 1967| Type = [Class] D +# 1967| ValueCategory = lvalue +# 1967| getLValue(): [VariableAccess] k +# 1967| Type = [Class] D +# 1967| ValueCategory = lvalue +# 1967| getRValue(): [FunctionCall] call to ObjectStaticMemberFunction +# 1967| Type = [Class] D +# 1967| ValueCategory = prvalue +# 1968| getStmt(13): [ReturnStmt] return ... +# 1970| [TopLevelFunction] void test_volatile() +# 1970| : +# 1970| getEntryPoint(): [BlockStmt] { ... } +# 1971| getStmt(0): [DeclStmt] declaration +# 1971| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 1971| Type = [SpecifiedType] volatile int +# 1972| getStmt(1): [ExprStmt] ExprStmt +# 1972| getExpr(): [VariableAccess] x +# 1972| Type = [IntType] int +# 1972| ValueCategory = prvalue(load) +# 1973| getStmt(2): [ReturnStmt] return ... +# 1975| [CopyAssignmentOperator] ValCat& ValCat::operator=(ValCat const&) +# 1975| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const ValCat & -# 1973| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) -# 1973| : +# 1975| [MoveAssignmentOperator] ValCat& ValCat::operator=(ValCat&&) +# 1975| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] ValCat && -# 1974| [MemberFunction] ValCat& ValCat::lvalue() -# 1974| : -# 1975| [MemberFunction] ValCat&& ValCat::xvalue() -# 1975| : -# 1976| [MemberFunction] ValCat ValCat::prvalue() +# 1976| [MemberFunction] ValCat& ValCat::lvalue() # 1976| : -# 1979| [TopLevelFunction] void value_category_test() -# 1979| : -# 1979| getEntryPoint(): [BlockStmt] { ... } -# 1980| getStmt(0): [DeclStmt] declaration -# 1980| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1980| Type = [Struct] ValCat -# 1982| getStmt(1): [ExprStmt] ExprStmt -# 1982| getExpr(): [AssignExpr] ... = ... +# 1977| [MemberFunction] ValCat&& ValCat::xvalue() +# 1977| : +# 1978| [MemberFunction] ValCat ValCat::prvalue() +# 1978| : +# 1981| [TopLevelFunction] void value_category_test() +# 1981| : +# 1981| getEntryPoint(): [BlockStmt] { ... } +# 1982| getStmt(0): [DeclStmt] declaration +# 1982| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c # 1982| Type = [Struct] ValCat -# 1982| ValueCategory = lvalue -# 1982| getLValue(): [FunctionCall] call to lvalue -# 1982| Type = [LValueReferenceType] ValCat & -# 1982| ValueCategory = prvalue -# 1982| getQualifier(): [VariableAccess] c -# 1982| Type = [Struct] ValCat -# 1982| ValueCategory = lvalue -# 1982| getRValue(): [ClassAggregateLiteral] {...} -# 1982| Type = [Struct] ValCat -# 1982| ValueCategory = prvalue -# 1982| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1982| Type = [Struct] ValCat -# 1982| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1983| getStmt(2): [ExprStmt] ExprStmt -# 1983| getExpr(): [AssignExpr] ... = ... -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = lvalue -# 1983| getLValue(): [FunctionCall] call to xvalue -# 1983| Type = [RValueReferenceType] ValCat && -# 1983| ValueCategory = prvalue -# 1983| getQualifier(): [VariableAccess] c -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = lvalue -# 1983| getRValue(): [ClassAggregateLiteral] {...} -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = prvalue -# 1983| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 1983| Type = [Struct] ValCat -# 1983| ValueCategory = lvalue -#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -#-----| Type = [Struct] ValCat -#-----| ValueCategory = prvalue(load) -# 1984| getStmt(3): [ExprStmt] ExprStmt +# 1984| getStmt(1): [ExprStmt] ExprStmt # 1984| getExpr(): [AssignExpr] ... = ... # 1984| Type = [Struct] ValCat # 1984| ValueCategory = lvalue -# 1984| getLValue(): [FunctionCall] call to prvalue -# 1984| Type = [Struct] ValCat +# 1984| getLValue(): [FunctionCall] call to lvalue +# 1984| Type = [LValueReferenceType] ValCat & # 1984| ValueCategory = prvalue # 1984| getQualifier(): [VariableAccess] c # 1984| Type = [Struct] ValCat @@ -15112,19 +15227,22 @@ ir.cpp: # 1984| getRValue(): [ClassAggregateLiteral] {...} # 1984| Type = [Struct] ValCat # 1984| ValueCategory = prvalue -# 1984| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1984| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1984| Type = [Struct] ValCat # 1984| ValueCategory = lvalue #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1985| getStmt(4): [ExprStmt] ExprStmt +# 1985| getStmt(2): [ExprStmt] ExprStmt # 1985| getExpr(): [AssignExpr] ... = ... # 1985| Type = [Struct] ValCat # 1985| ValueCategory = lvalue -# 1985| getLValue(): [FunctionCall] call to lvalue -# 1985| Type = [LValueReferenceType] ValCat & +# 1985| getLValue(): [FunctionCall] call to xvalue +# 1985| Type = [RValueReferenceType] ValCat && # 1985| ValueCategory = prvalue +# 1985| getQualifier(): [VariableAccess] c +# 1985| Type = [Struct] ValCat +# 1985| ValueCategory = lvalue # 1985| getRValue(): [ClassAggregateLiteral] {...} # 1985| Type = [Struct] ValCat # 1985| ValueCategory = prvalue @@ -15134,127 +15252,123 @@ ir.cpp: #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1986| getStmt(5): [ExprStmt] ExprStmt +# 1986| getStmt(3): [ExprStmt] ExprStmt # 1986| getExpr(): [AssignExpr] ... = ... # 1986| Type = [Struct] ValCat # 1986| ValueCategory = lvalue -# 1986| getLValue(): [FunctionCall] call to xvalue -# 1986| Type = [RValueReferenceType] ValCat && +# 1986| getLValue(): [FunctionCall] call to prvalue +# 1986| Type = [Struct] ValCat # 1986| ValueCategory = prvalue +# 1986| getQualifier(): [VariableAccess] c +# 1986| Type = [Struct] ValCat +# 1986| ValueCategory = lvalue # 1986| getRValue(): [ClassAggregateLiteral] {...} # 1986| Type = [Struct] ValCat # 1986| ValueCategory = prvalue -# 1986| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1986| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object # 1986| Type = [Struct] ValCat # 1986| ValueCategory = lvalue #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1987| getStmt(6): [ExprStmt] ExprStmt +# 1987| getStmt(4): [ExprStmt] ExprStmt # 1987| getExpr(): [AssignExpr] ... = ... # 1987| Type = [Struct] ValCat # 1987| ValueCategory = lvalue -# 1987| getLValue(): [FunctionCall] call to prvalue -# 1987| Type = [Struct] ValCat +# 1987| getLValue(): [FunctionCall] call to lvalue +# 1987| Type = [LValueReferenceType] ValCat & # 1987| ValueCategory = prvalue # 1987| getRValue(): [ClassAggregateLiteral] {...} # 1987| Type = [Struct] ValCat # 1987| ValueCategory = prvalue -# 1987| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1987| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 1987| Type = [Struct] ValCat # 1987| ValueCategory = lvalue #-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object #-----| Type = [Struct] ValCat #-----| ValueCategory = prvalue(load) -# 1988| getStmt(7): [ReturnStmt] return ... -# 1990| [TopLevelFunction] void SetStaticFuncPtr() -# 1990| : -# 1990| getEntryPoint(): [BlockStmt] { ... } -# 1991| getStmt(0): [DeclStmt] declaration -# 1991| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c -# 1991| Type = [Class] C -# 1991| getVariable().getInitializer(): [Initializer] initializer for c -# 1991| getExpr(): [ConstructorCall] call to C -# 1991| Type = [VoidType] void -# 1991| ValueCategory = prvalue -# 1992| getStmt(1): [DeclStmt] declaration -# 1992| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn -# 1992| Type = [FunctionPointerType] ..(*)(..) -# 1992| getVariable().getInitializer(): [Initializer] initializer for pfn -# 1992| getExpr(): [FunctionAccess] StaticMemberFunction -# 1992| Type = [FunctionPointerType] ..(*)(..) -# 1992| ValueCategory = prvalue(load) -# 1993| getStmt(2): [ExprStmt] ExprStmt -# 1993| getExpr(): [AssignExpr] ... = ... -# 1993| Type = [FunctionPointerType] ..(*)(..) -# 1993| ValueCategory = lvalue -# 1993| getLValue(): [VariableAccess] pfn -# 1993| Type = [FunctionPointerType] ..(*)(..) -# 1993| ValueCategory = lvalue -# 1993| getRValue(): [FunctionAccess] StaticMemberFunction -# 1993| Type = [FunctionPointerType] ..(*)(..) -# 1993| ValueCategory = prvalue(load) -# 1993| getQualifier(): [VariableAccess] c -# 1993| Type = [Class] C -# 1993| ValueCategory = lvalue -# 1994| getStmt(3): [ReturnStmt] return ... -# 1994| getImplicitDestructorCall(0): [DestructorCall] call to ~C -# 1994| Type = [VoidType] void -# 1994| ValueCategory = prvalue -# 1994| getQualifier(): [VariableAccess] c -# 1994| Type = [Class] C -# 1994| ValueCategory = lvalue -# 1996| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) -# 1996| : -# 1996| getParameter(0): [Parameter] a -# 1996| Type = [BoolType] bool -# 1996| getParameter(1): [Parameter] x -# 1996| Type = [IntType] int -# 1996| getParameter(2): [Parameter] y -# 1996| Type = [IntType] int -# 1996| getParameter(3): [Parameter] z -# 1996| Type = [IntType] int -# 1996| getEntryPoint(): [BlockStmt] { ... } -# 1997| getStmt(0): [ExprStmt] ExprStmt -# 1997| getExpr(): [AssignExpr] ... = ... -# 1997| Type = [IntType] int -# 1997| ValueCategory = lvalue -# 1997| getLValue(): [VariableAccess] z -# 1997| Type = [IntType] int -# 1997| ValueCategory = lvalue -# 1997| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1997| Type = [IntType] int -# 1997| ValueCategory = prvalue(load) -# 1997| getCondition(): [VariableAccess] a -# 1997| Type = [BoolType] bool -# 1997| ValueCategory = prvalue(load) -# 1997| getThen(): [VariableAccess] x -# 1997| Type = [IntType] int -# 1997| ValueCategory = prvalue(load) -# 1997| getElse(): [VariableAccess] y -# 1997| Type = [IntType] int -# 1997| ValueCategory = prvalue(load) -# 1998| getStmt(1): [ExprStmt] ExprStmt -# 1998| getExpr(): [AssignExpr] ... = ... -# 1998| Type = [IntType] int -# 1998| ValueCategory = lvalue -# 1998| getLValue(): [VariableAccess] z -# 1998| Type = [IntType] int -# 1998| ValueCategory = lvalue -# 1998| getRValue(): [ConditionalExpr] ... ? ... : ... -# 1998| Type = [IntType] int -# 1998| ValueCategory = prvalue(load) -# 1998| getCondition(): [VariableAccess] a -# 1998| Type = [BoolType] bool -# 1998| ValueCategory = prvalue(load) -# 1998| getThen(): [VariableAccess] x -# 1998| Type = [IntType] int -# 1998| ValueCategory = prvalue(load) -# 1998| getElse(): [Literal] 5 -# 1998| Type = [IntType] int -# 1998| Value = [Literal] 5 -# 1998| ValueCategory = prvalue -# 1999| getStmt(2): [ExprStmt] ExprStmt +# 1988| getStmt(5): [ExprStmt] ExprStmt +# 1988| getExpr(): [AssignExpr] ... = ... +# 1988| Type = [Struct] ValCat +# 1988| ValueCategory = lvalue +# 1988| getLValue(): [FunctionCall] call to xvalue +# 1988| Type = [RValueReferenceType] ValCat && +# 1988| ValueCategory = prvalue +# 1988| getRValue(): [ClassAggregateLiteral] {...} +# 1988| Type = [Struct] ValCat +# 1988| ValueCategory = prvalue +# 1988| getLValue().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 1988| Type = [Struct] ValCat +# 1988| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 1989| getStmt(6): [ExprStmt] ExprStmt +# 1989| getExpr(): [AssignExpr] ... = ... +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = lvalue +# 1989| getLValue(): [FunctionCall] call to prvalue +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = prvalue +# 1989| getRValue(): [ClassAggregateLiteral] {...} +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = prvalue +# 1989| getLValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 1989| Type = [Struct] ValCat +# 1989| ValueCategory = lvalue +#-----| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +#-----| Type = [Struct] ValCat +#-----| ValueCategory = prvalue(load) +# 1990| getStmt(7): [ReturnStmt] return ... +# 1992| [TopLevelFunction] void SetStaticFuncPtr() +# 1992| : +# 1992| getEntryPoint(): [BlockStmt] { ... } +# 1993| getStmt(0): [DeclStmt] declaration +# 1993| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c +# 1993| Type = [Class] C +# 1993| getVariable().getInitializer(): [Initializer] initializer for c +# 1993| getExpr(): [ConstructorCall] call to C +# 1993| Type = [VoidType] void +# 1993| ValueCategory = prvalue +# 1994| getStmt(1): [DeclStmt] declaration +# 1994| getDeclarationEntry(0): [VariableDeclarationEntry] definition of pfn +# 1994| Type = [FunctionPointerType] ..(*)(..) +# 1994| getVariable().getInitializer(): [Initializer] initializer for pfn +# 1994| getExpr(): [FunctionAccess] StaticMemberFunction +# 1994| Type = [FunctionPointerType] ..(*)(..) +# 1994| ValueCategory = prvalue(load) +# 1995| getStmt(2): [ExprStmt] ExprStmt +# 1995| getExpr(): [AssignExpr] ... = ... +# 1995| Type = [FunctionPointerType] ..(*)(..) +# 1995| ValueCategory = lvalue +# 1995| getLValue(): [VariableAccess] pfn +# 1995| Type = [FunctionPointerType] ..(*)(..) +# 1995| ValueCategory = lvalue +# 1995| getRValue(): [FunctionAccess] StaticMemberFunction +# 1995| Type = [FunctionPointerType] ..(*)(..) +# 1995| ValueCategory = prvalue(load) +# 1995| getQualifier(): [VariableAccess] c +# 1995| Type = [Class] C +# 1995| ValueCategory = lvalue +# 1996| getStmt(3): [ReturnStmt] return ... +# 1996| getImplicitDestructorCall(0): [DestructorCall] call to ~C +# 1996| Type = [VoidType] void +# 1996| ValueCategory = prvalue +# 1996| getQualifier(): [VariableAccess] c +# 1996| Type = [Class] C +# 1996| ValueCategory = lvalue +# 1998| [TopLevelFunction] void TernaryTestInt(bool, int, int, int) +# 1998| : +# 1998| getParameter(0): [Parameter] a +# 1998| Type = [BoolType] bool +# 1998| getParameter(1): [Parameter] x +# 1998| Type = [IntType] int +# 1998| getParameter(2): [Parameter] y +# 1998| Type = [IntType] int +# 1998| getParameter(3): [Parameter] z +# 1998| Type = [IntType] int +# 1998| getEntryPoint(): [BlockStmt] { ... } +# 1999| getStmt(0): [ExprStmt] ExprStmt # 1999| getExpr(): [AssignExpr] ... = ... # 1999| Type = [IntType] int # 1999| ValueCategory = lvalue @@ -15263,110 +15377,101 @@ ir.cpp: # 1999| ValueCategory = lvalue # 1999| getRValue(): [ConditionalExpr] ... ? ... : ... # 1999| Type = [IntType] int -# 1999| ValueCategory = prvalue +# 1999| ValueCategory = prvalue(load) # 1999| getCondition(): [VariableAccess] a # 1999| Type = [BoolType] bool # 1999| ValueCategory = prvalue(load) -# 1999| getThen(): [Literal] 3 +# 1999| getThen(): [VariableAccess] x # 1999| Type = [IntType] int -# 1999| Value = [Literal] 3 -# 1999| ValueCategory = prvalue -# 1999| getElse(): [Literal] 5 +# 1999| ValueCategory = prvalue(load) +# 1999| getElse(): [VariableAccess] y # 1999| Type = [IntType] int -# 1999| Value = [Literal] 5 -# 1999| ValueCategory = prvalue -# 2000| getStmt(3): [ExprStmt] ExprStmt +# 1999| ValueCategory = prvalue(load) +# 2000| getStmt(1): [ExprStmt] ExprStmt # 2000| getExpr(): [AssignExpr] ... = ... # 2000| Type = [IntType] int # 2000| ValueCategory = lvalue -# 2000| getLValue(): [ConditionalExpr] ... ? ... : ... +# 2000| getLValue(): [VariableAccess] z # 2000| Type = [IntType] int # 2000| ValueCategory = lvalue +# 2000| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2000| Type = [IntType] int +# 2000| ValueCategory = prvalue(load) # 2000| getCondition(): [VariableAccess] a # 2000| Type = [BoolType] bool # 2000| ValueCategory = prvalue(load) # 2000| getThen(): [VariableAccess] x # 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2000| getElse(): [VariableAccess] y +# 2000| ValueCategory = prvalue(load) +# 2000| getElse(): [Literal] 5 # 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2000| getRValue(): [Literal] 7 -# 2000| Type = [IntType] int -# 2000| Value = [Literal] 7 -# 2000| ValueCategory = prvalue -# 2000| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2000| Type = [IntType] int -# 2000| ValueCategory = lvalue -# 2001| getStmt(4): [ReturnStmt] return ... -# 2003| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) -# 2003| : +# 2000| Value = [Literal] 5 +# 2000| ValueCategory = prvalue +# 2001| getStmt(2): [ExprStmt] ExprStmt +# 2001| getExpr(): [AssignExpr] ... = ... +# 2001| Type = [IntType] int +# 2001| ValueCategory = lvalue +# 2001| getLValue(): [VariableAccess] z +# 2001| Type = [IntType] int +# 2001| ValueCategory = lvalue +# 2001| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2001| Type = [IntType] int +# 2001| ValueCategory = prvalue +# 2001| getCondition(): [VariableAccess] a +# 2001| Type = [BoolType] bool +# 2001| ValueCategory = prvalue(load) +# 2001| getThen(): [Literal] 3 +# 2001| Type = [IntType] int +# 2001| Value = [Literal] 3 +# 2001| ValueCategory = prvalue +# 2001| getElse(): [Literal] 5 +# 2001| Type = [IntType] int +# 2001| Value = [Literal] 5 +# 2001| ValueCategory = prvalue +# 2002| getStmt(3): [ExprStmt] ExprStmt +# 2002| getExpr(): [AssignExpr] ... = ... +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getLValue(): [ConditionalExpr] ... ? ... : ... +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getCondition(): [VariableAccess] a +# 2002| Type = [BoolType] bool +# 2002| ValueCategory = prvalue(load) +# 2002| getThen(): [VariableAccess] x +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getElse(): [VariableAccess] y +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2002| getRValue(): [Literal] 7 +# 2002| Type = [IntType] int +# 2002| Value = [Literal] 7 +# 2002| ValueCategory = prvalue +# 2002| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2002| Type = [IntType] int +# 2002| ValueCategory = lvalue +# 2003| getStmt(4): [ReturnStmt] return ... +# 2005| [CopyAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj const&) +# 2005| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryPodObj & -# 2003| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) -# 2003| : +# 2005| [MoveAssignmentOperator] TernaryPodObj& TernaryPodObj::operator=(TernaryPodObj&&) +# 2005| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [RValueReferenceType] TernaryPodObj && -# 2006| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2006| : -# 2006| getParameter(0): [Parameter] a -# 2006| Type = [BoolType] bool -# 2006| getParameter(1): [Parameter] x -# 2006| Type = [Struct] TernaryPodObj -# 2006| getParameter(2): [Parameter] y -# 2006| Type = [Struct] TernaryPodObj -# 2006| getParameter(3): [Parameter] z -# 2006| Type = [Struct] TernaryPodObj -# 2006| getEntryPoint(): [BlockStmt] { ... } -# 2007| getStmt(0): [ExprStmt] ExprStmt -# 2007| getExpr(): [AssignExpr] ... = ... -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = lvalue -# 2007| getLValue(): [VariableAccess] z -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = lvalue -# 2007| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = prvalue(load) -# 2007| getCondition(): [VariableAccess] a -# 2007| Type = [BoolType] bool -# 2007| ValueCategory = prvalue(load) -# 2007| getThen(): [VariableAccess] x -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = prvalue(load) -# 2007| getElse(): [VariableAccess] y -# 2007| Type = [Struct] TernaryPodObj -# 2007| ValueCategory = prvalue(load) -# 2008| getStmt(1): [ExprStmt] ExprStmt -# 2008| getExpr(): [AssignExpr] ... = ... -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = lvalue -# 2008| getLValue(): [VariableAccess] z -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = lvalue -# 2008| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue -# 2008| getCondition(): [VariableAccess] a -# 2008| Type = [BoolType] bool -# 2008| ValueCategory = prvalue(load) -# 2008| getThen(): [VariableAccess] x -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2008| getElse(): [Literal] 0 -# 2008| Type = [Struct] TernaryPodObj -# 2008| Value = [Literal] 0 -# 2008| ValueCategory = prvalue -# 2008| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2008| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2008| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2008| Type = [Struct] TernaryPodObj -# 2008| ValueCategory = prvalue(load) -# 2009| getStmt(2): [ExprStmt] ExprStmt +# 2008| [TopLevelFunction] void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2008| : +# 2008| getParameter(0): [Parameter] a +# 2008| Type = [BoolType] bool +# 2008| getParameter(1): [Parameter] x +# 2008| Type = [Struct] TernaryPodObj +# 2008| getParameter(2): [Parameter] y +# 2008| Type = [Struct] TernaryPodObj +# 2008| getParameter(3): [Parameter] z +# 2008| Type = [Struct] TernaryPodObj +# 2008| getEntryPoint(): [BlockStmt] { ... } +# 2009| getStmt(0): [ExprStmt] ExprStmt # 2009| getExpr(): [AssignExpr] ... = ... # 2009| Type = [Struct] TernaryPodObj # 2009| ValueCategory = lvalue @@ -15375,62 +15480,110 @@ ir.cpp: # 2009| ValueCategory = lvalue # 2009| getRValue(): [ConditionalExpr] ... ? ... : ... # 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = prvalue +# 2009| ValueCategory = prvalue(load) # 2009| getCondition(): [VariableAccess] a # 2009| Type = [BoolType] bool # 2009| ValueCategory = prvalue(load) -# 2009| getThen(): [Literal] 0 -# 2009| Type = [Struct] TernaryPodObj -# 2009| Value = [Literal] 0 -# 2009| ValueCategory = prvalue -# 2009| getElse(): [Literal] 0 -# 2009| Type = [Struct] TernaryPodObj -# 2009| Value = [Literal] 0 -# 2009| ValueCategory = prvalue -# 2009| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2009| getThen(): [VariableAccess] x # 2009| Type = [Struct] TernaryPodObj # 2009| ValueCategory = prvalue(load) -# 2009| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2009| getElse(): [VariableAccess] y # 2009| Type = [Struct] TernaryPodObj # 2009| ValueCategory = prvalue(load) -# 2009| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2009| Type = [Struct] TernaryPodObj -# 2009| ValueCategory = prvalue(load) -# 2010| getStmt(3): [ExprStmt] ExprStmt +# 2010| getStmt(1): [ExprStmt] ExprStmt # 2010| getExpr(): [AssignExpr] ... = ... # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = lvalue -# 2010| getLValue(): [AssignExpr] ... = ... +# 2010| getLValue(): [VariableAccess] z # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = lvalue -# 2010| getLValue(): [VariableAccess] z -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = lvalue -# 2010| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2010| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2010| Type = [Struct] TernaryPodObj +# 2010| ValueCategory = prvalue +# 2010| getCondition(): [VariableAccess] a +# 2010| Type = [BoolType] bool +# 2010| ValueCategory = prvalue(load) +# 2010| getThen(): [VariableAccess] x +# 2010| Type = [Struct] TernaryPodObj +# 2010| ValueCategory = prvalue(load) +# 2010| getElse(): [Literal] 0 +# 2010| Type = [Struct] TernaryPodObj +# 2010| Value = [Literal] 0 +# 2010| ValueCategory = prvalue +# 2010| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2010| Type = [Struct] TernaryPodObj +# 2010| ValueCategory = prvalue(load) +# 2010| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = prvalue(load) -# 2010| getCondition(): [VariableAccess] a -# 2010| Type = [BoolType] bool -# 2010| ValueCategory = prvalue(load) -# 2010| getThen(): [VariableAccess] x -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2010| getElse(): [VariableAccess] y -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = prvalue(load) -# 2010| getRValue(): [Literal] 0 -# 2010| Type = [Struct] TernaryPodObj -# 2010| Value = [Literal] 0 -# 2010| ValueCategory = prvalue -# 2010| getLValue().getFullyConverted(): [ParenthesisExpr] (...) -# 2010| Type = [Struct] TernaryPodObj -# 2010| ValueCategory = lvalue # 2010| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2010| Type = [Struct] TernaryPodObj # 2010| ValueCategory = prvalue(load) -# 2011| getStmt(4): [ReturnStmt] return ... -# 2013| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2013| : +# 2011| getStmt(2): [ExprStmt] ExprStmt +# 2011| getExpr(): [AssignExpr] ... = ... +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = lvalue +# 2011| getLValue(): [VariableAccess] z +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = lvalue +# 2011| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue +# 2011| getCondition(): [VariableAccess] a +# 2011| Type = [BoolType] bool +# 2011| ValueCategory = prvalue(load) +# 2011| getThen(): [Literal] 0 +# 2011| Type = [Struct] TernaryPodObj +# 2011| Value = [Literal] 0 +# 2011| ValueCategory = prvalue +# 2011| getElse(): [Literal] 0 +# 2011| Type = [Struct] TernaryPodObj +# 2011| Value = [Literal] 0 +# 2011| ValueCategory = prvalue +# 2011| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue(load) +# 2011| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue(load) +# 2011| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2011| Type = [Struct] TernaryPodObj +# 2011| ValueCategory = prvalue(load) +# 2012| getStmt(3): [ExprStmt] ExprStmt +# 2012| getExpr(): [AssignExpr] ... = ... +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getLValue(): [AssignExpr] ... = ... +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getLValue(): [VariableAccess] z +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2012| getCondition(): [VariableAccess] a +# 2012| Type = [BoolType] bool +# 2012| ValueCategory = prvalue(load) +# 2012| getThen(): [VariableAccess] x +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2012| getElse(): [VariableAccess] y +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2012| getRValue(): [Literal] 0 +# 2012| Type = [Struct] TernaryPodObj +# 2012| Value = [Literal] 0 +# 2012| ValueCategory = prvalue +# 2012| getLValue().getFullyConverted(): [ParenthesisExpr] (...) +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = lvalue +# 2012| getRValue().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2012| Type = [Struct] TernaryPodObj +# 2012| ValueCategory = prvalue(load) +# 2013| getStmt(4): [ReturnStmt] return ... +# 2015| [CopyAssignmentOperator] TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2015| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & #-----| getEntryPoint(): [BlockStmt] { ... } @@ -15444,112 +15597,35 @@ ir.cpp: #-----| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) #-----| Type = [LValueReferenceType] TernaryNonPodObj & #-----| ValueCategory = prvalue -# 2013| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() -# 2013| : -# 2013| : -# 2013| getEntryPoint(): [BlockStmt] { ... } -# 2013| getStmt(0): [ReturnStmt] return ... -# 2013| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2013| : +# 2015| [Constructor] void TernaryNonPodObj::TernaryNonPodObj() +# 2015| : +# 2015| : +# 2015| getEntryPoint(): [BlockStmt] { ... } +# 2015| getStmt(0): [ReturnStmt] return ... +# 2015| [CopyConstructor] void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2015| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2013| : -# 2013| getEntryPoint(): [BlockStmt] { ... } -# 2013| getStmt(0): [ReturnStmt] return ... -# 2014| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() -# 2014| : -# 2014| getEntryPoint(): [BlockStmt] { ... } -# 2014| getStmt(0): [ReturnStmt] return ... -# 2014| : -# 2017| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2017| : -# 2017| getParameter(0): [Parameter] a -# 2017| Type = [BoolType] bool -# 2017| getParameter(1): [Parameter] x -# 2017| Type = [Struct] TernaryNonPodObj -# 2017| getParameter(2): [Parameter] y -# 2017| Type = [Struct] TernaryNonPodObj -# 2017| getParameter(3): [Parameter] z -# 2017| Type = [Struct] TernaryNonPodObj -# 2017| getEntryPoint(): [BlockStmt] { ... } -# 2018| getStmt(0): [ExprStmt] ExprStmt -# 2018| getExpr(): [FunctionCall] call to operator= -# 2018| Type = [LValueReferenceType] TernaryNonPodObj & -# 2018| ValueCategory = prvalue -# 2018| getQualifier(): [VariableAccess] z -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getCondition(): [VariableAccess] a -# 2018| Type = [BoolType] bool -# 2018| ValueCategory = prvalue(load) -# 2018| getThen(): [VariableAccess] x -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getElse(): [VariableAccess] y -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2018| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2018| ValueCategory = prvalue -# 2018| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2018| Conversion = [GlvalueConversion] glvalue conversion -# 2018| Type = [SpecifiedType] const TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2018| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2018| Type = [Struct] TernaryNonPodObj -# 2018| ValueCategory = lvalue -# 2019| getStmt(1): [ExprStmt] ExprStmt -# 2019| getExpr(): [FunctionCall] call to operator= -# 2019| Type = [LValueReferenceType] TernaryNonPodObj & -# 2019| ValueCategory = prvalue -# 2019| getQualifier(): [VariableAccess] z -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = prvalue -# 2019| getCondition(): [VariableAccess] a -# 2019| Type = [BoolType] bool -# 2019| ValueCategory = prvalue(load) -# 2019| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2019| Type = [VoidType] void -# 2019| ValueCategory = prvalue -# 2019| getArgument(0): [VariableAccess] x -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2019| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2019| ValueCategory = prvalue -# 2019| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2019| Conversion = [GlvalueConversion] glvalue conversion -# 2019| Type = [SpecifiedType] const TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2019| Type = [VoidType] void -# 2019| ValueCategory = prvalue -# 2019| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = prvalue(load) -# 2019| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = prvalue(load) -# 2019| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2019| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2019| ValueCategory = prvalue -# 2019| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2019| Conversion = [GlvalueConversion] glvalue conversion -# 2019| Type = [SpecifiedType] const TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getExpr(): [TemporaryObjectExpr] temporary object -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2019| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) -# 2019| Type = [Struct] TernaryNonPodObj -# 2019| ValueCategory = lvalue -# 2020| getStmt(2): [ExprStmt] ExprStmt +# 2015| : +# 2015| getEntryPoint(): [BlockStmt] { ... } +# 2015| getStmt(0): [ReturnStmt] return ... +# 2016| [Destructor,VirtualFunction] void TernaryNonPodObj::~TernaryNonPodObj() +# 2016| : +# 2016| getEntryPoint(): [BlockStmt] { ... } +# 2016| getStmt(0): [ReturnStmt] return ... +# 2016| : +# 2019| [TopLevelFunction] void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2019| : +# 2019| getParameter(0): [Parameter] a +# 2019| Type = [BoolType] bool +# 2019| getParameter(1): [Parameter] x +# 2019| Type = [Struct] TernaryNonPodObj +# 2019| getParameter(2): [Parameter] y +# 2019| Type = [Struct] TernaryNonPodObj +# 2019| getParameter(3): [Parameter] z +# 2019| Type = [Struct] TernaryNonPodObj +# 2019| getEntryPoint(): [BlockStmt] { ... } +# 2020| getStmt(0): [ExprStmt] ExprStmt # 2020| getExpr(): [FunctionCall] call to operator= # 2020| Type = [LValueReferenceType] TernaryNonPodObj & # 2020| ValueCategory = prvalue @@ -15558,22 +15634,16 @@ ir.cpp: # 2020| ValueCategory = lvalue # 2020| getArgument(0): [ConditionalExpr] ... ? ... : ... # 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = prvalue +# 2020| ValueCategory = lvalue # 2020| getCondition(): [VariableAccess] a # 2020| Type = [BoolType] bool # 2020| ValueCategory = prvalue(load) -# 2020| getThen(): [ConstructorCall] call to TernaryNonPodObj -# 2020| Type = [VoidType] void -# 2020| ValueCategory = prvalue -# 2020| getElse(): [ConstructorCall] call to TernaryNonPodObj -# 2020| Type = [VoidType] void -# 2020| ValueCategory = prvalue -# 2020| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2020| getThen(): [VariableAccess] x # 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = prvalue(load) -# 2020| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2020| ValueCategory = lvalue +# 2020| getElse(): [VariableAccess] y # 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = prvalue(load) +# 2020| ValueCategory = lvalue # 2020| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2020| Type = [LValueReferenceType] const TernaryNonPodObj & # 2020| ValueCategory = prvalue @@ -15581,50 +15651,44 @@ ir.cpp: # 2020| Conversion = [GlvalueConversion] glvalue conversion # 2020| Type = [SpecifiedType] const TernaryNonPodObj # 2020| ValueCategory = lvalue -# 2020| getExpr(): [TemporaryObjectExpr] temporary object -# 2020| Type = [Struct] TernaryNonPodObj -# 2020| ValueCategory = lvalue # 2020| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2020| Type = [Struct] TernaryNonPodObj # 2020| ValueCategory = lvalue -# 2021| getStmt(3): [ExprStmt] ExprStmt +# 2021| getStmt(1): [ExprStmt] ExprStmt # 2021| getExpr(): [FunctionCall] call to operator= # 2021| Type = [LValueReferenceType] TernaryNonPodObj & # 2021| ValueCategory = prvalue -# 2021| getQualifier(): [FunctionCall] call to operator= -# 2021| Type = [LValueReferenceType] TernaryNonPodObj & -# 2021| ValueCategory = prvalue -# 2021| getQualifier(): [VariableAccess] z -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0): [ConditionalExpr] ... ? ... : ... -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getCondition(): [VariableAccess] a -# 2021| Type = [BoolType] bool -# 2021| ValueCategory = prvalue(load) -# 2021| getThen(): [VariableAccess] x -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getElse(): [VariableAccess] y -# 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) -# 2021| Type = [LValueReferenceType] const TernaryNonPodObj & -# 2021| ValueCategory = prvalue -# 2021| getExpr(): [CStyleCast] (const TernaryNonPodObj)... -# 2021| Conversion = [GlvalueConversion] glvalue conversion -# 2021| Type = [SpecifiedType] const TernaryNonPodObj -# 2021| ValueCategory = lvalue -# 2021| getArgument(0): [ConstructorCall] call to TernaryNonPodObj -# 2021| Type = [VoidType] void -# 2021| ValueCategory = prvalue -# 2021| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 2021| getQualifier(): [VariableAccess] z # 2021| Type = [Struct] TernaryNonPodObj # 2021| ValueCategory = lvalue -# 2021| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2021| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2021| Type = [Struct] TernaryNonPodObj +# 2021| ValueCategory = prvalue +# 2021| getCondition(): [VariableAccess] a +# 2021| Type = [BoolType] bool +# 2021| ValueCategory = prvalue(load) +# 2021| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2021| Type = [VoidType] void +# 2021| ValueCategory = prvalue +# 2021| getArgument(0): [VariableAccess] x +# 2021| Type = [Struct] TernaryNonPodObj +# 2021| ValueCategory = lvalue +# 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2021| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2021| ValueCategory = prvalue +# 2021| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2021| Conversion = [GlvalueConversion] glvalue conversion +# 2021| Type = [SpecifiedType] const TernaryNonPodObj +# 2021| ValueCategory = lvalue +# 2021| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2021| Type = [VoidType] void +# 2021| ValueCategory = prvalue +# 2021| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object # 2021| Type = [Struct] TernaryNonPodObj -# 2021| ValueCategory = lvalue +# 2021| ValueCategory = prvalue(load) +# 2021| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2021| Type = [Struct] TernaryNonPodObj +# 2021| ValueCategory = prvalue(load) # 2021| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) # 2021| Type = [LValueReferenceType] const TernaryNonPodObj & # 2021| ValueCategory = prvalue @@ -15638,500 +15702,1205 @@ ir.cpp: # 2021| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) # 2021| Type = [Struct] TernaryNonPodObj # 2021| ValueCategory = lvalue -# 2022| getStmt(4): [ReturnStmt] return ... -# 2024| [TopLevelFunction] void CommaTestHelper(unsigned int) -# 2024| : -# 2024| getParameter(0): [Parameter] (unnamed parameter 0) -# 2024| Type = [IntType] unsigned int -# 2026| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2022| getStmt(2): [ExprStmt] ExprStmt +# 2022| getExpr(): [FunctionCall] call to operator= +# 2022| Type = [LValueReferenceType] TernaryNonPodObj & +# 2022| ValueCategory = prvalue +# 2022| getQualifier(): [VariableAccess] z +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2022| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = prvalue +# 2022| getCondition(): [VariableAccess] a +# 2022| Type = [BoolType] bool +# 2022| ValueCategory = prvalue(load) +# 2022| getThen(): [ConstructorCall] call to TernaryNonPodObj +# 2022| Type = [VoidType] void +# 2022| ValueCategory = prvalue +# 2022| getElse(): [ConstructorCall] call to TernaryNonPodObj +# 2022| Type = [VoidType] void +# 2022| ValueCategory = prvalue +# 2022| getThen().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = prvalue(load) +# 2022| getElse().getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = prvalue(load) +# 2022| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2022| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2022| ValueCategory = prvalue +# 2022| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2022| Conversion = [GlvalueConversion] glvalue conversion +# 2022| Type = [SpecifiedType] const TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2022| getExpr(): [TemporaryObjectExpr] temporary object +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2022| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2022| Type = [Struct] TernaryNonPodObj +# 2022| ValueCategory = lvalue +# 2023| getStmt(3): [ExprStmt] ExprStmt +# 2023| getExpr(): [FunctionCall] call to operator= +# 2023| Type = [LValueReferenceType] TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getQualifier(): [FunctionCall] call to operator= +# 2023| Type = [LValueReferenceType] TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getQualifier(): [VariableAccess] z +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0): [ConditionalExpr] ... ? ... : ... +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getCondition(): [VariableAccess] a +# 2023| Type = [BoolType] bool +# 2023| ValueCategory = prvalue(load) +# 2023| getThen(): [VariableAccess] x +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getElse(): [VariableAccess] y +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2023| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2023| Conversion = [GlvalueConversion] glvalue conversion +# 2023| Type = [SpecifiedType] const TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0): [ConstructorCall] call to TernaryNonPodObj +# 2023| Type = [VoidType] void +# 2023| ValueCategory = prvalue +# 2023| getQualifier().getFullyConverted(): [ParenthesisExpr] (...) +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getArgument(0).getFullyConverted(): [ReferenceToExpr] (reference to) +# 2023| Type = [LValueReferenceType] const TernaryNonPodObj & +# 2023| ValueCategory = prvalue +# 2023| getExpr(): [CStyleCast] (const TernaryNonPodObj)... +# 2023| Conversion = [GlvalueConversion] glvalue conversion +# 2023| Type = [SpecifiedType] const TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getExpr(): [TemporaryObjectExpr] temporary object +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2023| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2023| Type = [Struct] TernaryNonPodObj +# 2023| ValueCategory = lvalue +# 2024| getStmt(4): [ReturnStmt] return ... +# 2026| [TopLevelFunction] void CommaTestHelper(unsigned int) # 2026| : -# 2026| getParameter(0): [Parameter] x +# 2026| getParameter(0): [Parameter] (unnamed parameter 0) # 2026| Type = [IntType] unsigned int -# 2026| getEntryPoint(): [BlockStmt] { ... } -# 2027| getStmt(0): [DeclStmt] declaration -# 2027| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y -# 2027| Type = [IntType] unsigned int -# 2028| getStmt(1): [ExprStmt] ExprStmt -# 2028| getExpr(): [AssignExpr] ... = ... -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = lvalue -# 2028| getLValue(): [VariableAccess] y -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = lvalue -# 2028| getRValue(): [ConditionalExpr] ... ? ... : ... -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = prvalue(load) -# 2028| getCondition(): [LTExpr] ... < ... -# 2028| Type = [BoolType] bool -# 2028| ValueCategory = prvalue -# 2028| getLesserOperand(): [VariableAccess] x -# 2028| Type = [IntType] unsigned int -# 2028| ValueCategory = prvalue(load) -# 2028| getGreaterOperand(): [Literal] 100 -# 2028| Type = [IntType] int -# 2028| Value = [Literal] 100 -# 2028| ValueCategory = prvalue -# 2028| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2028| Conversion = [IntegralConversion] integral conversion -# 2028| Type = [IntType] unsigned int -# 2028| Value = [CStyleCast] 100 -# 2028| ValueCategory = prvalue -# 2029| getThen(): [CommaExpr] ... , ... -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2029| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2029| Type = [VoidType] void -# 2029| ValueCategory = prvalue -# 2029| getArgument(0): [VariableAccess] x -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2029| getRightOperand(): [VariableAccess] x -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2030| getElse(): [CommaExpr] ... , ... -# 2030| Type = [IntType] int +# 2028| [TopLevelFunction] unsigned int CommaTest(unsigned int) +# 2028| : +# 2028| getParameter(0): [Parameter] x +# 2028| Type = [IntType] unsigned int +# 2028| getEntryPoint(): [BlockStmt] { ... } +# 2029| getStmt(0): [DeclStmt] declaration +# 2029| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2029| Type = [IntType] unsigned int +# 2030| getStmt(1): [ExprStmt] ExprStmt +# 2030| getExpr(): [AssignExpr] ... = ... +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = lvalue +# 2030| getLValue(): [VariableAccess] y +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = lvalue +# 2030| getRValue(): [ConditionalExpr] ... ? ... : ... +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = prvalue(load) +# 2030| getCondition(): [LTExpr] ... < ... +# 2030| Type = [BoolType] bool # 2030| ValueCategory = prvalue -# 2030| getLeftOperand(): [FunctionCall] call to CommaTestHelper -# 2030| Type = [VoidType] void -# 2030| ValueCategory = prvalue -# 2030| getArgument(0): [VariableAccess] x -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = prvalue(load) -# 2030| getRightOperand(): [Literal] 10 +# 2030| getLesserOperand(): [VariableAccess] x +# 2030| Type = [IntType] unsigned int +# 2030| ValueCategory = prvalue(load) +# 2030| getGreaterOperand(): [Literal] 100 # 2030| Type = [IntType] int -# 2030| Value = [Literal] 10 +# 2030| Value = [Literal] 100 # 2030| ValueCategory = prvalue -# 2029| getThen().getFullyConverted(): [ParenthesisExpr] (...) -# 2029| Type = [IntType] unsigned int -# 2029| ValueCategory = prvalue(load) -# 2030| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... -# 2030| Conversion = [IntegralConversion] integral conversion -# 2030| Type = [IntType] unsigned int -# 2030| ValueCategory = prvalue -# 2030| getExpr(): [ParenthesisExpr] (...) -# 2030| Type = [IntType] int +# 2030| getGreaterOperand().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2030| Conversion = [IntegralConversion] integral conversion +# 2030| Type = [IntType] unsigned int +# 2030| Value = [CStyleCast] 100 # 2030| ValueCategory = prvalue -# 2031| getStmt(2): [ReturnStmt] return ... -# 2033| [TopLevelFunction] void NewDeleteMem() -# 2033| : -# 2033| getEntryPoint(): [BlockStmt] { ... } -# 2034| getStmt(0): [DeclStmt] declaration -# 2034| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2034| Type = [IntPointerType] int * -# 2034| getVariable().getInitializer(): [Initializer] initializer for x -# 2034| getExpr(): [NewExpr] new -# 2034| Type = [IntPointerType] int * -# 2034| ValueCategory = prvalue -# 2035| getStmt(1): [ExprStmt] ExprStmt -# 2035| getExpr(): [AssignExpr] ... = ... -# 2035| Type = [IntType] int -# 2035| ValueCategory = lvalue -# 2035| getLValue(): [PointerDereferenceExpr] * ... -# 2035| Type = [IntType] int -# 2035| ValueCategory = lvalue -# 2035| getOperand(): [VariableAccess] x -# 2035| Type = [IntPointerType] int * -# 2035| ValueCategory = prvalue(load) -# 2035| getRValue(): [Literal] 6 -# 2035| Type = [IntType] int -# 2035| Value = [Literal] 6 -# 2035| ValueCategory = prvalue -# 2036| getStmt(2): [ExprStmt] ExprStmt -# 2036| getExpr(): [DeleteExpr] delete -# 2036| Type = [VoidType] void -# 2036| ValueCategory = prvalue -# 2036| getExpr(): [VariableAccess] x -# 2036| Type = [IntPointerType] int * -# 2036| ValueCategory = prvalue(load) -# 2037| getStmt(3): [ReturnStmt] return ... -# 2039| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) -# 2039| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2039| [Constructor] void Base2::Base2() -# 2039| : -# 2039| : -# 2039| getEntryPoint(): [BlockStmt] { ... } -# 2039| getStmt(0): [ReturnStmt] return ... -# 2039| [CopyConstructor] void Base2::Base2(Base2 const&) -# 2039| : -#-----| getParameter(0): [Parameter] (unnamed parameter 0) -#-----| Type = [LValueReferenceType] const Base2 & -# 2041| [MemberFunction] void Base2::operator delete(void*) +# 2031| getThen(): [CommaExpr] ... , ... +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2031| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2031| Type = [VoidType] void +# 2031| ValueCategory = prvalue +# 2031| getArgument(0): [VariableAccess] x +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2031| getRightOperand(): [VariableAccess] x +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2032| getElse(): [CommaExpr] ... , ... +# 2032| Type = [IntType] int +# 2032| ValueCategory = prvalue +# 2032| getLeftOperand(): [FunctionCall] call to CommaTestHelper +# 2032| Type = [VoidType] void +# 2032| ValueCategory = prvalue +# 2032| getArgument(0): [VariableAccess] x +# 2032| Type = [IntType] unsigned int +# 2032| ValueCategory = prvalue(load) +# 2032| getRightOperand(): [Literal] 10 +# 2032| Type = [IntType] int +# 2032| Value = [Literal] 10 +# 2032| ValueCategory = prvalue +# 2031| getThen().getFullyConverted(): [ParenthesisExpr] (...) +# 2031| Type = [IntType] unsigned int +# 2031| ValueCategory = prvalue(load) +# 2032| getElse().getFullyConverted(): [CStyleCast] (unsigned int)... +# 2032| Conversion = [IntegralConversion] integral conversion +# 2032| Type = [IntType] unsigned int +# 2032| ValueCategory = prvalue +# 2032| getExpr(): [ParenthesisExpr] (...) +# 2032| Type = [IntType] int +# 2032| ValueCategory = prvalue +# 2033| getStmt(2): [ReturnStmt] return ... +# 2035| [TopLevelFunction] void NewDeleteMem() +# 2035| : +# 2035| getEntryPoint(): [BlockStmt] { ... } +# 2036| getStmt(0): [DeclStmt] declaration +# 2036| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2036| Type = [IntPointerType] int * +# 2036| getVariable().getInitializer(): [Initializer] initializer for x +# 2036| getExpr(): [NewExpr] new +# 2036| Type = [IntPointerType] int * +# 2036| ValueCategory = prvalue +# 2037| getStmt(1): [ExprStmt] ExprStmt +# 2037| getExpr(): [AssignExpr] ... = ... +# 2037| Type = [IntType] int +# 2037| ValueCategory = lvalue +# 2037| getLValue(): [PointerDereferenceExpr] * ... +# 2037| Type = [IntType] int +# 2037| ValueCategory = lvalue +# 2037| getOperand(): [VariableAccess] x +# 2037| Type = [IntPointerType] int * +# 2037| ValueCategory = prvalue(load) +# 2037| getRValue(): [Literal] 6 +# 2037| Type = [IntType] int +# 2037| Value = [Literal] 6 +# 2037| ValueCategory = prvalue +# 2038| getStmt(2): [ExprStmt] ExprStmt +# 2038| getExpr(): [DeleteExpr] delete +# 2038| Type = [VoidType] void +# 2038| ValueCategory = prvalue +# 2038| getExpr(): [VariableAccess] x +# 2038| Type = [IntPointerType] int * +# 2038| ValueCategory = prvalue(load) +# 2039| getStmt(3): [ReturnStmt] return ... +# 2041| [CopyAssignmentOperator] Base2& Base2::operator=(Base2 const&) # 2041| : -# 2041| getParameter(0): [Parameter] p -# 2041| Type = [VoidPointerType] void * +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2041| [Constructor] void Base2::Base2() +# 2041| : +# 2041| : # 2041| getEntryPoint(): [BlockStmt] { ... } -# 2042| getStmt(0): [ReturnStmt] return ... -# 2043| [Destructor,VirtualFunction] void Base2::~Base2() +# 2041| getStmt(0): [ReturnStmt] return ... +# 2041| [CopyConstructor] void Base2::Base2(Base2 const&) +# 2041| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const Base2 & +# 2043| [MemberFunction] void Base2::operator delete(void*) # 2043| : +# 2043| getParameter(0): [Parameter] p +# 2043| Type = [VoidPointerType] void * # 2043| getEntryPoint(): [BlockStmt] { ... } -# 2043| getStmt(0): [ReturnStmt] return ... -# 2043| : -# 2046| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) -# 2046| : +# 2044| getStmt(0): [ReturnStmt] return ... +# 2045| [Destructor,VirtualFunction] void Base2::~Base2() +# 2045| : +# 2045| getEntryPoint(): [BlockStmt] { ... } +# 2045| getStmt(0): [ReturnStmt] return ... +# 2045| : +# 2048| [CopyAssignmentOperator] Derived2& Derived2::operator=(Derived2 const&) +# 2048| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Derived2 & -# 2046| [Constructor] void Derived2::Derived2() -# 2046| : -# 2046| : -# 2046| getInitializer(0): [ConstructorDirectInit] call to Base2 -# 2046| Type = [VoidType] void -# 2046| ValueCategory = prvalue -# 2046| getEntryPoint(): [BlockStmt] { ... } -# 2046| getStmt(0): [ReturnStmt] return ... -# 2046| [CopyConstructor] void Derived2::Derived2(Derived2 const&) -# 2046| : +# 2048| [Constructor] void Derived2::Derived2() +# 2048| : +# 2048| : +# 2048| getInitializer(0): [ConstructorDirectInit] call to Base2 +# 2048| Type = [VoidType] void +# 2048| ValueCategory = prvalue +# 2048| getEntryPoint(): [BlockStmt] { ... } +# 2048| getStmt(0): [ReturnStmt] return ... +# 2048| [CopyConstructor] void Derived2::Derived2(Derived2 const&) +# 2048| : #-----| getParameter(0): [Parameter] (unnamed parameter 0) #-----| Type = [LValueReferenceType] const Derived2 & -# 2049| [Destructor,VirtualFunction] void Derived2::~Derived2() -# 2049| : -# 2049| getEntryPoint(): [BlockStmt] { ... } -# 2049| getStmt(0): [ReturnStmt] return ... -# 2049| : -# 2049| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 -# 2049| Type = [VoidType] void -# 2049| ValueCategory = prvalue -# 2051| [MemberFunction] void Derived2::operator delete(void*) +# 2051| [Destructor,VirtualFunction] void Derived2::~Derived2() # 2051| : -# 2051| getParameter(0): [Parameter] p -# 2051| Type = [VoidPointerType] void * # 2051| getEntryPoint(): [BlockStmt] { ... } -# 2052| getStmt(0): [ReturnStmt] return ... -# 2056| [TopLevelFunction] int virtual_delete() -# 2056| : -# 2057| getEntryPoint(): [BlockStmt] { ... } -# 2058| getStmt(0): [DeclStmt] declaration -# 2058| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 -# 2058| Type = [PointerType] Base2 * -# 2058| getVariable().getInitializer(): [Initializer] initializer for b1 -# 2058| getExpr(): [NewExpr] new -# 2058| Type = [PointerType] Base2 * -# 2058| ValueCategory = prvalue -# 2058| getInitializer(): [ConstructorCall] call to Base2 -# 2058| Type = [VoidType] void -# 2058| ValueCategory = prvalue -# 2059| getStmt(1): [ExprStmt] ExprStmt -# 2059| getExpr(): [DeleteExpr] delete -# 2059| Type = [VoidType] void -# 2059| ValueCategory = prvalue -# 2059| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2059| Type = [VoidType] void -# 2059| ValueCategory = prvalue -# 2059| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2059| Type = [VoidType] void -# 2059| ValueCategory = prvalue -# 2059| getQualifier(): [VariableAccess] b1 -# 2059| Type = [PointerType] Base2 * -# 2059| ValueCategory = prvalue(load) -# 2061| getStmt(2): [DeclStmt] declaration -# 2061| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 -# 2061| Type = [PointerType] Base2 * -# 2061| getVariable().getInitializer(): [Initializer] initializer for b2 -# 2061| getExpr(): [NewExpr] new -# 2061| Type = [PointerType] Derived2 * -# 2061| ValueCategory = prvalue -# 2061| getInitializer(): [ConstructorCall] call to Derived2 -# 2061| Type = [VoidType] void -# 2061| ValueCategory = prvalue -# 2061| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... -# 2061| Conversion = [BaseClassConversion] base class conversion +# 2051| getStmt(0): [ReturnStmt] return ... +# 2051| : +# 2051| getDestruction(0): [DestructorDirectDestruction] call to ~Base2 +# 2051| Type = [VoidType] void +# 2051| ValueCategory = prvalue +# 2053| [MemberFunction] void Derived2::operator delete(void*) +# 2053| : +# 2053| getParameter(0): [Parameter] p +# 2053| Type = [VoidPointerType] void * +# 2053| getEntryPoint(): [BlockStmt] { ... } +# 2054| getStmt(0): [ReturnStmt] return ... +# 2058| [TopLevelFunction] int virtual_delete() +# 2058| : +# 2059| getEntryPoint(): [BlockStmt] { ... } +# 2060| getStmt(0): [DeclStmt] declaration +# 2060| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b1 +# 2060| Type = [PointerType] Base2 * +# 2060| getVariable().getInitializer(): [Initializer] initializer for b1 +# 2060| getExpr(): [NewExpr] new +# 2060| Type = [PointerType] Base2 * +# 2060| ValueCategory = prvalue +# 2060| getInitializer(): [ConstructorCall] call to Base2 +# 2060| Type = [VoidType] void +# 2060| ValueCategory = prvalue +# 2061| getStmt(1): [ExprStmt] ExprStmt +# 2061| getExpr(): [DeleteExpr] delete +# 2061| Type = [VoidType] void +# 2061| ValueCategory = prvalue +# 2061| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2061| Type = [VoidType] void +# 2061| ValueCategory = prvalue +# 2061| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2061| Type = [VoidType] void +# 2061| ValueCategory = prvalue +# 2061| getQualifier(): [VariableAccess] b1 # 2061| Type = [PointerType] Base2 * -# 2061| ValueCategory = prvalue -# 2062| getStmt(3): [ExprStmt] ExprStmt -# 2062| getExpr(): [DeleteExpr] delete -# 2062| Type = [VoidType] void -# 2062| ValueCategory = prvalue -# 2062| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2062| Type = [VoidType] void -# 2062| ValueCategory = prvalue -# 2062| getDestructorCall(): [DestructorCall] call to ~Base2 -# 2062| Type = [VoidType] void -# 2062| ValueCategory = prvalue -# 2062| getQualifier(): [VariableAccess] b2 -# 2062| Type = [PointerType] Base2 * -# 2062| ValueCategory = prvalue(load) -# 2064| getStmt(4): [DeclStmt] declaration -# 2064| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2064| Type = [PointerType] Derived2 * -# 2064| getVariable().getInitializer(): [Initializer] initializer for d -# 2064| getExpr(): [NewExpr] new -# 2064| Type = [PointerType] Derived2 * -# 2064| ValueCategory = prvalue -# 2064| getInitializer(): [ConstructorCall] call to Derived2 -# 2064| Type = [VoidType] void -# 2064| ValueCategory = prvalue -# 2065| getStmt(5): [ExprStmt] ExprStmt -# 2065| getExpr(): [DeleteExpr] delete -# 2065| Type = [VoidType] void -# 2065| ValueCategory = prvalue -# 2065| getDeallocatorCall(): [FunctionCall] call to operator delete -# 2065| Type = [VoidType] void -# 2065| ValueCategory = prvalue -# 2065| getDestructorCall(): [DestructorCall] call to ~Derived2 -# 2065| Type = [VoidType] void -# 2065| ValueCategory = prvalue -# 2065| getQualifier(): [VariableAccess] d -# 2065| Type = [PointerType] Derived2 * -# 2065| ValueCategory = prvalue(load) -# 2066| getStmt(6): [ReturnStmt] return ... -# 2068| [TopLevelFunction] void test_constant_folding_use(int) -# 2068| : -# 2068| getParameter(0): [Parameter] (unnamed parameter 0) -# 2068| Type = [IntType] int -# 2070| [TopLevelFunction] void test_constant_folding() +# 2061| ValueCategory = prvalue(load) +# 2063| getStmt(2): [DeclStmt] declaration +# 2063| getDeclarationEntry(0): [VariableDeclarationEntry] definition of b2 +# 2063| Type = [PointerType] Base2 * +# 2063| getVariable().getInitializer(): [Initializer] initializer for b2 +# 2063| getExpr(): [NewExpr] new +# 2063| Type = [PointerType] Derived2 * +# 2063| ValueCategory = prvalue +# 2063| getInitializer(): [ConstructorCall] call to Derived2 +# 2063| Type = [VoidType] void +# 2063| ValueCategory = prvalue +# 2063| getExpr().getFullyConverted(): [CStyleCast] (Base2 *)... +# 2063| Conversion = [BaseClassConversion] base class conversion +# 2063| Type = [PointerType] Base2 * +# 2063| ValueCategory = prvalue +# 2064| getStmt(3): [ExprStmt] ExprStmt +# 2064| getExpr(): [DeleteExpr] delete +# 2064| Type = [VoidType] void +# 2064| ValueCategory = prvalue +# 2064| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2064| Type = [VoidType] void +# 2064| ValueCategory = prvalue +# 2064| getDestructorCall(): [DestructorCall] call to ~Base2 +# 2064| Type = [VoidType] void +# 2064| ValueCategory = prvalue +# 2064| getQualifier(): [VariableAccess] b2 +# 2064| Type = [PointerType] Base2 * +# 2064| ValueCategory = prvalue(load) +# 2066| getStmt(4): [DeclStmt] declaration +# 2066| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2066| Type = [PointerType] Derived2 * +# 2066| getVariable().getInitializer(): [Initializer] initializer for d +# 2066| getExpr(): [NewExpr] new +# 2066| Type = [PointerType] Derived2 * +# 2066| ValueCategory = prvalue +# 2066| getInitializer(): [ConstructorCall] call to Derived2 +# 2066| Type = [VoidType] void +# 2066| ValueCategory = prvalue +# 2067| getStmt(5): [ExprStmt] ExprStmt +# 2067| getExpr(): [DeleteExpr] delete +# 2067| Type = [VoidType] void +# 2067| ValueCategory = prvalue +# 2067| getDeallocatorCall(): [FunctionCall] call to operator delete +# 2067| Type = [VoidType] void +# 2067| ValueCategory = prvalue +# 2067| getDestructorCall(): [DestructorCall] call to ~Derived2 +# 2067| Type = [VoidType] void +# 2067| ValueCategory = prvalue +# 2067| getQualifier(): [VariableAccess] d +# 2067| Type = [PointerType] Derived2 * +# 2067| ValueCategory = prvalue(load) +# 2068| getStmt(6): [ReturnStmt] return ... +# 2070| [TopLevelFunction] void test_constant_folding_use(int) # 2070| : -# 2070| getEntryPoint(): [BlockStmt] { ... } -# 2071| getStmt(0): [DeclStmt] declaration -# 2071| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2071| Type = [SpecifiedType] const int -# 2071| getVariable().getInitializer(): [Initializer] initializer for x -# 2071| getExpr(): [Literal] 116 -# 2071| Type = [IntType] int -# 2071| Value = [Literal] 116 -# 2071| ValueCategory = prvalue -# 2072| getStmt(1): [ExprStmt] ExprStmt -# 2072| getExpr(): [FunctionCall] call to test_constant_folding_use -# 2072| Type = [VoidType] void -# 2072| ValueCategory = prvalue -# 2072| getArgument(0): [VariableAccess] x -# 2072| Type = [IntType] int -# 2072| Value = [VariableAccess] 116 -# 2072| ValueCategory = prvalue(load) -# 2073| getStmt(2): [ReturnStmt] return ... -# 2075| [TopLevelFunction] void exit(int) -# 2075| : -# 2075| getParameter(0): [Parameter] code -# 2075| Type = [IntType] int -# 2077| [TopLevelFunction] int NonExit() +# 2070| getParameter(0): [Parameter] (unnamed parameter 0) +# 2070| Type = [IntType] int +# 2072| [TopLevelFunction] void test_constant_folding() +# 2072| : +# 2072| getEntryPoint(): [BlockStmt] { ... } +# 2073| getStmt(0): [DeclStmt] declaration +# 2073| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2073| Type = [SpecifiedType] const int +# 2073| getVariable().getInitializer(): [Initializer] initializer for x +# 2073| getExpr(): [Literal] 116 +# 2073| Type = [IntType] int +# 2073| Value = [Literal] 116 +# 2073| ValueCategory = prvalue +# 2074| getStmt(1): [ExprStmt] ExprStmt +# 2074| getExpr(): [FunctionCall] call to test_constant_folding_use +# 2074| Type = [VoidType] void +# 2074| ValueCategory = prvalue +# 2074| getArgument(0): [VariableAccess] x +# 2074| Type = [IntType] int +# 2074| Value = [VariableAccess] 116 +# 2074| ValueCategory = prvalue(load) +# 2075| getStmt(2): [ReturnStmt] return ... +# 2077| [TopLevelFunction] void exit(int) # 2077| : -# 2077| getEntryPoint(): [BlockStmt] { ... } -# 2078| getStmt(0): [DeclStmt] declaration -# 2078| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2078| Type = [IntType] int -# 2078| getVariable().getInitializer(): [Initializer] initializer for x -# 2078| getExpr(): [FunctionCall] call to Add -# 2078| Type = [IntType] int -# 2078| ValueCategory = prvalue -# 2078| getArgument(0): [Literal] 3 -# 2078| Type = [IntType] int -# 2078| Value = [Literal] 3 -# 2078| ValueCategory = prvalue -# 2078| getArgument(1): [Literal] 4 -# 2078| Type = [IntType] int -# 2078| Value = [Literal] 4 -# 2078| ValueCategory = prvalue -# 2079| getStmt(1): [IfStmt] if (...) ... -# 2079| getCondition(): [EQExpr] ... == ... -# 2079| Type = [BoolType] bool -# 2079| ValueCategory = prvalue -# 2079| getLeftOperand(): [VariableAccess] x -# 2079| Type = [IntType] int -# 2079| ValueCategory = prvalue(load) -# 2079| getRightOperand(): [Literal] 7 -# 2079| Type = [IntType] int -# 2079| Value = [Literal] 7 -# 2079| ValueCategory = prvalue -# 2080| getThen(): [ExprStmt] ExprStmt -# 2080| getExpr(): [FunctionCall] call to exit -# 2080| Type = [VoidType] void -# 2080| ValueCategory = prvalue -# 2080| getArgument(0): [Literal] 3 +# 2077| getParameter(0): [Parameter] code +# 2077| Type = [IntType] int +# 2079| [TopLevelFunction] int NonExit() +# 2079| : +# 2079| getEntryPoint(): [BlockStmt] { ... } +# 2080| getStmt(0): [DeclStmt] declaration +# 2080| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2080| Type = [IntType] int +# 2080| getVariable().getInitializer(): [Initializer] initializer for x +# 2080| getExpr(): [FunctionCall] call to Add # 2080| Type = [IntType] int -# 2080| Value = [Literal] 3 # 2080| ValueCategory = prvalue -# 2081| getStmt(2): [ExprStmt] ExprStmt -# 2081| getExpr(): [FunctionCall] call to VoidFunc -# 2081| Type = [VoidType] void +# 2080| getArgument(0): [Literal] 3 +# 2080| Type = [IntType] int +# 2080| Value = [Literal] 3 +# 2080| ValueCategory = prvalue +# 2080| getArgument(1): [Literal] 4 +# 2080| Type = [IntType] int +# 2080| Value = [Literal] 4 +# 2080| ValueCategory = prvalue +# 2081| getStmt(1): [IfStmt] if (...) ... +# 2081| getCondition(): [EQExpr] ... == ... +# 2081| Type = [BoolType] bool # 2081| ValueCategory = prvalue -# 2082| getStmt(3): [ReturnStmt] return ... -# 2082| getExpr(): [VariableAccess] x -# 2082| Type = [IntType] int -# 2082| ValueCategory = prvalue(load) -# 2085| [TopLevelFunction] void CallsNonExit() -# 2085| : -# 2085| getEntryPoint(): [BlockStmt] { ... } -# 2086| getStmt(0): [ExprStmt] ExprStmt -# 2086| getExpr(): [FunctionCall] call to VoidFunc -# 2086| Type = [VoidType] void -# 2086| ValueCategory = prvalue -# 2087| getStmt(1): [ExprStmt] ExprStmt -# 2087| getExpr(): [FunctionCall] call to exit -# 2087| Type = [VoidType] void -# 2087| ValueCategory = prvalue -# 2087| getArgument(0): [Literal] 3 -# 2087| Type = [IntType] int -# 2087| Value = [Literal] 3 -# 2087| ValueCategory = prvalue -# 2088| getStmt(2): [ReturnStmt] return ... -# 2090| [TopLevelFunction] int TransNonExit() -# 2090| : -# 2090| getEntryPoint(): [BlockStmt] { ... } -# 2091| getStmt(0): [DeclStmt] declaration -# 2091| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x -# 2091| Type = [IntType] int -# 2091| getVariable().getInitializer(): [Initializer] initializer for x -# 2091| getExpr(): [FunctionCall] call to Add -# 2091| Type = [IntType] int -# 2091| ValueCategory = prvalue -# 2091| getArgument(0): [Literal] 3 -# 2091| Type = [IntType] int -# 2091| Value = [Literal] 3 -# 2091| ValueCategory = prvalue -# 2091| getArgument(1): [Literal] 4 -# 2091| Type = [IntType] int -# 2091| Value = [Literal] 4 -# 2091| ValueCategory = prvalue -# 2092| getStmt(1): [IfStmt] if (...) ... -# 2092| getCondition(): [EQExpr] ... == ... -# 2092| Type = [BoolType] bool -# 2092| ValueCategory = prvalue -# 2092| getLeftOperand(): [VariableAccess] x -# 2092| Type = [IntType] int -# 2092| ValueCategory = prvalue(load) -# 2092| getRightOperand(): [Literal] 7 -# 2092| Type = [IntType] int -# 2092| Value = [Literal] 7 -# 2092| ValueCategory = prvalue -# 2093| getThen(): [ExprStmt] ExprStmt -# 2093| getExpr(): [FunctionCall] call to CallsNonExit -# 2093| Type = [VoidType] void -# 2093| ValueCategory = prvalue -# 2094| getStmt(2): [ExprStmt] ExprStmt -# 2094| getExpr(): [FunctionCall] call to VoidFunc -# 2094| Type = [VoidType] void +# 2081| getLeftOperand(): [VariableAccess] x +# 2081| Type = [IntType] int +# 2081| ValueCategory = prvalue(load) +# 2081| getRightOperand(): [Literal] 7 +# 2081| Type = [IntType] int +# 2081| Value = [Literal] 7 +# 2081| ValueCategory = prvalue +# 2082| getThen(): [ExprStmt] ExprStmt +# 2082| getExpr(): [FunctionCall] call to exit +# 2082| Type = [VoidType] void +# 2082| ValueCategory = prvalue +# 2082| getArgument(0): [Literal] 3 +# 2082| Type = [IntType] int +# 2082| Value = [Literal] 3 +# 2082| ValueCategory = prvalue +# 2083| getStmt(2): [ExprStmt] ExprStmt +# 2083| getExpr(): [FunctionCall] call to VoidFunc +# 2083| Type = [VoidType] void +# 2083| ValueCategory = prvalue +# 2084| getStmt(3): [ReturnStmt] return ... +# 2084| getExpr(): [VariableAccess] x +# 2084| Type = [IntType] int +# 2084| ValueCategory = prvalue(load) +# 2087| [TopLevelFunction] void CallsNonExit() +# 2087| : +# 2087| getEntryPoint(): [BlockStmt] { ... } +# 2088| getStmt(0): [ExprStmt] ExprStmt +# 2088| getExpr(): [FunctionCall] call to VoidFunc +# 2088| Type = [VoidType] void +# 2088| ValueCategory = prvalue +# 2089| getStmt(1): [ExprStmt] ExprStmt +# 2089| getExpr(): [FunctionCall] call to exit +# 2089| Type = [VoidType] void +# 2089| ValueCategory = prvalue +# 2089| getArgument(0): [Literal] 3 +# 2089| Type = [IntType] int +# 2089| Value = [Literal] 3 +# 2089| ValueCategory = prvalue +# 2090| getStmt(2): [ReturnStmt] return ... +# 2092| [TopLevelFunction] int TransNonExit() +# 2092| : +# 2092| getEntryPoint(): [BlockStmt] { ... } +# 2093| getStmt(0): [DeclStmt] declaration +# 2093| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2093| Type = [IntType] int +# 2093| getVariable().getInitializer(): [Initializer] initializer for x +# 2093| getExpr(): [FunctionCall] call to Add +# 2093| Type = [IntType] int +# 2093| ValueCategory = prvalue +# 2093| getArgument(0): [Literal] 3 +# 2093| Type = [IntType] int +# 2093| Value = [Literal] 3 +# 2093| ValueCategory = prvalue +# 2093| getArgument(1): [Literal] 4 +# 2093| Type = [IntType] int +# 2093| Value = [Literal] 4 +# 2093| ValueCategory = prvalue +# 2094| getStmt(1): [IfStmt] if (...) ... +# 2094| getCondition(): [EQExpr] ... == ... +# 2094| Type = [BoolType] bool # 2094| ValueCategory = prvalue -# 2095| getStmt(3): [ReturnStmt] return ... -# 2095| getExpr(): [VariableAccess] x -# 2095| Type = [IntType] int -# 2095| ValueCategory = prvalue(load) -# 2098| [TopLevelFunction] void newArrayCorrectType(size_t) -# 2098| : -# 2098| getParameter(0): [Parameter] n -# 2098| Type = [CTypedefType,Size_t] size_t -# 2098| getEntryPoint(): [BlockStmt] { ... } -# 2099| getStmt(0): [ExprStmt] ExprStmt -# 2099| getExpr(): [NewArrayExpr] new[] -# 2099| Type = [IntPointerType] int * -# 2099| ValueCategory = prvalue -# 2099| getExtent(): [VariableAccess] n -# 2099| Type = [CTypedefType,Size_t] size_t -# 2099| ValueCategory = prvalue(load) -# 2100| getStmt(1): [ExprStmt] ExprStmt -# 2100| getExpr(): [NewArrayExpr] new[] -# 2100| Type = [IntPointerType] int * -# 2100| ValueCategory = prvalue -# 2100| getAllocatorCall(): [FunctionCall] call to operator new[] -# 2100| Type = [VoidPointerType] void * -# 2100| ValueCategory = prvalue -# 2100| getArgument(0): [ErrorExpr] -# 2100| Type = [LongType] unsigned long -# 2100| ValueCategory = prvalue -# 2100| getArgument(1): [Literal] 1.0 -# 2100| Type = [FloatType] float -# 2100| Value = [Literal] 1.0 -# 2100| ValueCategory = prvalue -# 2100| getExtent(): [VariableAccess] n -# 2100| Type = [CTypedefType,Size_t] size_t -# 2100| ValueCategory = prvalue(load) -# 2101| getStmt(2): [ExprStmt] ExprStmt +# 2094| getLeftOperand(): [VariableAccess] x +# 2094| Type = [IntType] int +# 2094| ValueCategory = prvalue(load) +# 2094| getRightOperand(): [Literal] 7 +# 2094| Type = [IntType] int +# 2094| Value = [Literal] 7 +# 2094| ValueCategory = prvalue +# 2095| getThen(): [ExprStmt] ExprStmt +# 2095| getExpr(): [FunctionCall] call to CallsNonExit +# 2095| Type = [VoidType] void +# 2095| ValueCategory = prvalue +# 2096| getStmt(2): [ExprStmt] ExprStmt +# 2096| getExpr(): [FunctionCall] call to VoidFunc +# 2096| Type = [VoidType] void +# 2096| ValueCategory = prvalue +# 2097| getStmt(3): [ReturnStmt] return ... +# 2097| getExpr(): [VariableAccess] x +# 2097| Type = [IntType] int +# 2097| ValueCategory = prvalue(load) +# 2100| [TopLevelFunction] void newArrayCorrectType(size_t) +# 2100| : +# 2100| getParameter(0): [Parameter] n +# 2100| Type = [CTypedefType,Size_t] size_t +# 2100| getEntryPoint(): [BlockStmt] { ... } +# 2101| getStmt(0): [ExprStmt] ExprStmt # 2101| getExpr(): [NewArrayExpr] new[] -# 2101| Type = [PointerType] String * +# 2101| Type = [IntPointerType] int * # 2101| ValueCategory = prvalue -# 2101| getInitializer(): [ArrayAggregateLiteral] {...} -# 2101| Type = [ArrayType] String[] -# 2101| ValueCategory = prvalue -# 2101| getAnElementExpr(0): [ConstructorCall] call to String -# 2101| Type = [VoidType] void -# 2101| ValueCategory = prvalue # 2101| getExtent(): [VariableAccess] n # 2101| Type = [CTypedefType,Size_t] size_t # 2101| ValueCategory = prvalue(load) -# 2102| getStmt(3): [ExprStmt] ExprStmt +# 2102| getStmt(1): [ExprStmt] ExprStmt # 2102| getExpr(): [NewArrayExpr] new[] -# 2102| Type = [PointerType] Overaligned * +# 2102| Type = [IntPointerType] int * # 2102| ValueCategory = prvalue +# 2102| getAllocatorCall(): [FunctionCall] call to operator new[] +# 2102| Type = [VoidPointerType] void * +# 2102| ValueCategory = prvalue +# 2102| getArgument(0): [ErrorExpr] +# 2102| Type = [LongType] unsigned long +# 2102| ValueCategory = prvalue +# 2102| getArgument(1): [Literal] 1.0 +# 2102| Type = [FloatType] float +# 2102| Value = [Literal] 1.0 +# 2102| ValueCategory = prvalue # 2102| getExtent(): [VariableAccess] n # 2102| Type = [CTypedefType,Size_t] size_t # 2102| ValueCategory = prvalue(load) -# 2102| getAlignmentArgument(): [Literal] 128 -# 2102| Type = [ScopedEnum] align_val_t -# 2102| Value = [Literal] 128 -# 2102| ValueCategory = prvalue -# 2103| getStmt(4): [ExprStmt] ExprStmt +# 2103| getStmt(2): [ExprStmt] ExprStmt # 2103| getExpr(): [NewArrayExpr] new[] -# 2103| Type = [PointerType] DefaultCtorWithDefaultParam * +# 2103| Type = [PointerType] String * # 2103| ValueCategory = prvalue # 2103| getInitializer(): [ArrayAggregateLiteral] {...} -# 2103| Type = [ArrayType] DefaultCtorWithDefaultParam[] +# 2103| Type = [ArrayType] String[] # 2103| ValueCategory = prvalue -# 2103| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam +# 2103| getAnElementExpr(0): [ConstructorCall] call to String # 2103| Type = [VoidType] void # 2103| ValueCategory = prvalue # 2103| getExtent(): [VariableAccess] n # 2103| Type = [CTypedefType,Size_t] size_t # 2103| ValueCategory = prvalue(load) -# 2104| getStmt(5): [ExprStmt] ExprStmt +# 2104| getStmt(3): [ExprStmt] ExprStmt # 2104| getExpr(): [NewArrayExpr] new[] -# 2104| Type = [IntPointerType] int * +# 2104| Type = [PointerType] Overaligned * # 2104| ValueCategory = prvalue -# 2104| getInitializer(): [ArrayAggregateLiteral] {...} -# 2104| Type = [ArrayType] int[3] -# 2104| ValueCategory = prvalue -# 2104| getAnElementExpr(0): [Literal] 0 -# 2104| Type = [IntType] int -# 2104| Value = [Literal] 0 -# 2104| ValueCategory = prvalue -# 2104| getAnElementExpr(1): [Literal] 1 -# 2104| Type = [IntType] int -# 2104| Value = [Literal] 1 -# 2104| ValueCategory = prvalue -# 2104| getAnElementExpr(2): [Literal] 2 -# 2104| Type = [IntType] int -# 2104| Value = [Literal] 2 -# 2104| ValueCategory = prvalue # 2104| getExtent(): [VariableAccess] n # 2104| Type = [CTypedefType,Size_t] size_t # 2104| ValueCategory = prvalue(load) -# 2105| getStmt(6): [ReturnStmt] return ... -# 2107| [TopLevelFunction] double strtod(char const*, char**) -# 2107| : -# 2107| getParameter(0): [Parameter] str -# 2107| Type = [PointerType] const char * -# 2107| getParameter(1): [Parameter] endptr -# 2107| Type = [PointerType] char ** -# 2109| [TopLevelFunction] char* test_strtod(char*) +# 2104| getAlignmentArgument(): [Literal] 128 +# 2104| Type = [ScopedEnum] align_val_t +# 2104| Value = [Literal] 128 +# 2104| ValueCategory = prvalue +# 2105| getStmt(4): [ExprStmt] ExprStmt +# 2105| getExpr(): [NewArrayExpr] new[] +# 2105| Type = [PointerType] DefaultCtorWithDefaultParam * +# 2105| ValueCategory = prvalue +# 2105| getInitializer(): [ArrayAggregateLiteral] {...} +# 2105| Type = [ArrayType] DefaultCtorWithDefaultParam[] +# 2105| ValueCategory = prvalue +# 2105| getAnElementExpr(0): [ConstructorCall] call to DefaultCtorWithDefaultParam +# 2105| Type = [VoidType] void +# 2105| ValueCategory = prvalue +# 2105| getExtent(): [VariableAccess] n +# 2105| Type = [CTypedefType,Size_t] size_t +# 2105| ValueCategory = prvalue(load) +# 2106| getStmt(5): [ExprStmt] ExprStmt +# 2106| getExpr(): [NewArrayExpr] new[] +# 2106| Type = [IntPointerType] int * +# 2106| ValueCategory = prvalue +# 2106| getInitializer(): [ArrayAggregateLiteral] {...} +# 2106| Type = [ArrayType] int[3] +# 2106| ValueCategory = prvalue +# 2106| getAnElementExpr(0): [Literal] 0 +# 2106| Type = [IntType] int +# 2106| Value = [Literal] 0 +# 2106| ValueCategory = prvalue +# 2106| getAnElementExpr(1): [Literal] 1 +# 2106| Type = [IntType] int +# 2106| Value = [Literal] 1 +# 2106| ValueCategory = prvalue +# 2106| getAnElementExpr(2): [Literal] 2 +# 2106| Type = [IntType] int +# 2106| Value = [Literal] 2 +# 2106| ValueCategory = prvalue +# 2106| getExtent(): [VariableAccess] n +# 2106| Type = [CTypedefType,Size_t] size_t +# 2106| ValueCategory = prvalue(load) +# 2107| getStmt(6): [ReturnStmt] return ... +# 2109| [TopLevelFunction] double strtod(char const*, char**) # 2109| : -# 2109| getParameter(0): [Parameter] s -# 2109| Type = [CharPointerType] char * -# 2109| getEntryPoint(): [BlockStmt] { ... } -# 2110| getStmt(0): [DeclStmt] declaration -# 2110| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end -# 2110| Type = [CharPointerType] char * -# 2111| getStmt(1): [DeclStmt] declaration -# 2111| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d -# 2111| Type = [DoubleType] double -# 2111| getVariable().getInitializer(): [Initializer] initializer for d -# 2111| getExpr(): [FunctionCall] call to strtod -# 2111| Type = [DoubleType] double -# 2111| ValueCategory = prvalue -# 2111| getArgument(0): [VariableAccess] s -# 2111| Type = [CharPointerType] char * -# 2111| ValueCategory = prvalue(load) -# 2111| getArgument(1): [AddressOfExpr] & ... -# 2111| Type = [PointerType] char ** -# 2111| ValueCategory = prvalue -# 2111| getOperand(): [VariableAccess] end -# 2111| Type = [CharPointerType] char * -# 2111| ValueCategory = lvalue -# 2111| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... -# 2111| Conversion = [PointerConversion] pointer conversion -# 2111| Type = [PointerType] const char * -# 2111| ValueCategory = prvalue -# 2112| getStmt(2): [ReturnStmt] return ... -# 2112| getExpr(): [VariableAccess] end +# 2109| getParameter(0): [Parameter] str +# 2109| Type = [PointerType] const char * +# 2109| getParameter(1): [Parameter] endptr +# 2109| Type = [PointerType] char ** +# 2111| [TopLevelFunction] char* test_strtod(char*) +# 2111| : +# 2111| getParameter(0): [Parameter] s +# 2111| Type = [CharPointerType] char * +# 2111| getEntryPoint(): [BlockStmt] { ... } +# 2112| getStmt(0): [DeclStmt] declaration +# 2112| getDeclarationEntry(0): [VariableDeclarationEntry] definition of end # 2112| Type = [CharPointerType] char * -# 2112| ValueCategory = prvalue(load) +# 2113| getStmt(1): [DeclStmt] declaration +# 2113| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d +# 2113| Type = [DoubleType] double +# 2113| getVariable().getInitializer(): [Initializer] initializer for d +# 2113| getExpr(): [FunctionCall] call to strtod +# 2113| Type = [DoubleType] double +# 2113| ValueCategory = prvalue +# 2113| getArgument(0): [VariableAccess] s +# 2113| Type = [CharPointerType] char * +# 2113| ValueCategory = prvalue(load) +# 2113| getArgument(1): [AddressOfExpr] & ... +# 2113| Type = [PointerType] char ** +# 2113| ValueCategory = prvalue +# 2113| getOperand(): [VariableAccess] end +# 2113| Type = [CharPointerType] char * +# 2113| ValueCategory = lvalue +# 2113| getArgument(0).getFullyConverted(): [CStyleCast] (const char *)... +# 2113| Conversion = [PointerConversion] pointer conversion +# 2113| Type = [PointerType] const char * +# 2113| ValueCategory = prvalue +# 2114| getStmt(2): [ReturnStmt] return ... +# 2114| getExpr(): [VariableAccess] end +# 2114| Type = [CharPointerType] char * +# 2114| ValueCategory = prvalue(load) +# 2117| [CopyAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool const&) +# 2117| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const HasOperatorBool & +# 2117| [MoveAssignmentOperator] HasOperatorBool& HasOperatorBool::operator=(HasOperatorBool&&) +# 2117| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [RValueReferenceType] HasOperatorBool && +# 2118| [ConversionOperator] bool HasOperatorBool::operator bool() +# 2118| : +# 2121| [TopLevelFunction] void call_as_child_of_ConditionDeclExpr() +# 2121| : +# 2121| getEntryPoint(): [BlockStmt] { ... } +# 2122| getStmt(0): [IfStmt] if (...) ... +# 2122| getCondition(): [ConditionDeclExpr] (condition decl) +# 2122| Type = [BoolType] bool +# 2122| ValueCategory = prvalue +# 2122| getChild(0): [FunctionCall] call to operator bool +# 2122| Type = [BoolType] bool +# 2122| ValueCategory = prvalue +# 2122| getQualifier(): [VariableAccess] b +# 2122| Type = [Struct] HasOperatorBool +# 2122| ValueCategory = prvalue(load) +# 2122| getThen(): [BlockStmt] { ... } +# 2123| getStmt(1): [ReturnStmt] return ... +# 2125| [CopyAssignmentOperator] ClassWithDestructor& ClassWithDestructor::operator=(ClassWithDestructor const&) +# 2125| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2125| [CopyConstructor] void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2125| : +#-----| getParameter(0): [Parameter] (unnamed parameter 0) +#-----| Type = [LValueReferenceType] const ClassWithDestructor & +# 2125| : +# 2125| getInitializer(0): [ConstructorFieldInit] constructor init of field x +# 2125| Type = [CharPointerType] char * +# 2125| ValueCategory = prvalue +# 2125| getExpr(): [ReferenceFieldAccess] x +# 2125| Type = [CharPointerType] char * +# 2125| ValueCategory = prvalue(load) +# 2125| getQualifier(): [VariableAccess] (unnamed parameter 0) +# 2125| Type = [LValueReferenceType] const ClassWithDestructor & +# 2125| ValueCategory = prvalue(load) +# 2125| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2125| Type = [SpecifiedType] const ClassWithDestructor +# 2125| ValueCategory = lvalue +# 2125| getEntryPoint(): [BlockStmt] { ... } +# 2125| getStmt(0): [ReturnStmt] return ... +# 2128| [Constructor] void ClassWithDestructor::ClassWithDestructor() +# 2128| : +# 2128| : +# 2128| getEntryPoint(): [BlockStmt] { ... } +# 2128| getStmt(0): [ExprStmt] ExprStmt +# 2128| getExpr(): [AssignExpr] ... = ... +# 2128| Type = [CharPointerType] char * +# 2128| ValueCategory = lvalue +# 2128| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2128| Type = [CharPointerType] char * +# 2128| ValueCategory = lvalue +# 2128| getQualifier(): [ThisExpr] this +# 2128| Type = [PointerType] ClassWithDestructor * +# 2128| ValueCategory = prvalue(load) +# 2128| getRValue(): [NewExpr] new +# 2128| Type = [CharPointerType] char * +# 2128| ValueCategory = prvalue +# 2128| getStmt(1): [ReturnStmt] return ... +# 2129| [Destructor] void ClassWithDestructor::~ClassWithDestructor() +# 2129| : +# 2129| getEntryPoint(): [BlockStmt] { ... } +# 2129| getStmt(0): [ExprStmt] ExprStmt +# 2129| getExpr(): [DeleteExpr] delete +# 2129| Type = [VoidType] void +# 2129| ValueCategory = prvalue +# 2129| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2129| Type = [CharPointerType] char * +# 2129| ValueCategory = prvalue(load) +# 2129| getQualifier(): [ThisExpr] this +# 2129| Type = [PointerType] ClassWithDestructor * +# 2129| ValueCategory = prvalue(load) +# 2129| getStmt(1): [ReturnStmt] return ... +# 2129| : +# 2131| [MemberFunction] void ClassWithDestructor::set_x(char) +# 2131| : +# 2131| getParameter(0): [Parameter] y +# 2131| Type = [PlainCharType] char +# 2131| getEntryPoint(): [BlockStmt] { ... } +# 2131| getStmt(0): [ExprStmt] ExprStmt +# 2131| getExpr(): [AssignExpr] ... = ... +# 2131| Type = [PlainCharType] char +# 2131| ValueCategory = lvalue +# 2131| getLValue(): [PointerDereferenceExpr] * ... +# 2131| Type = [PlainCharType] char +# 2131| ValueCategory = lvalue +# 2131| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2131| Type = [CharPointerType] char * +# 2131| ValueCategory = prvalue(load) +# 2131| getQualifier(): [ThisExpr] this +# 2131| Type = [PointerType] ClassWithDestructor * +# 2131| ValueCategory = prvalue(load) +# 2131| getRValue(): [VariableAccess] y +# 2131| Type = [PlainCharType] char +# 2131| ValueCategory = prvalue(load) +# 2131| getStmt(1): [ReturnStmt] return ... +# 2132| [MemberFunction] char ClassWithDestructor::get_x() +# 2132| : +# 2132| getEntryPoint(): [BlockStmt] { ... } +# 2132| getStmt(0): [ReturnStmt] return ... +# 2132| getExpr(): [PointerDereferenceExpr] * ... +# 2132| Type = [PlainCharType] char +# 2132| ValueCategory = prvalue(load) +# 2132| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x +# 2132| Type = [CharPointerType] char * +# 2132| ValueCategory = prvalue(load) +# 2132| getQualifier(): [ThisExpr] this +# 2132| Type = [PointerType] ClassWithDestructor * +# 2132| ValueCategory = prvalue(load) +# 2135| [GlobalVariable] bool initialization_with_destructor_bool +# 2135| getInitializer(): [Initializer] initializer for initialization_with_destructor_bool +# 2135| getExpr(): [Literal] 1 +# 2135| Type = [BoolType] bool +# 2135| Value = [Literal] 1 +# 2135| ValueCategory = prvalue +# 2137| [TopLevelFunction] void initialization_with_destructor(bool, char) +# 2137| : +# 2137| getParameter(0): [Parameter] b +# 2137| Type = [BoolType] bool +# 2137| getParameter(1): [Parameter] c +# 2137| Type = [PlainCharType] char +# 2137| getEntryPoint(): [BlockStmt] { ... } +# 2138| getStmt(0): [IfStmt] if (...) ... +# 2138| getInitialization(): [DeclStmt] declaration +# 2138| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2138| Type = [Class] ClassWithDestructor +# 2138| getVariable().getInitializer(): [Initializer] initializer for x +# 2138| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2138| Type = [VoidType] void +# 2138| ValueCategory = prvalue +# 2138| getCondition(): [VariableAccess] b +# 2138| Type = [BoolType] bool +# 2138| ValueCategory = prvalue(load) +# 2139| getThen(): [ExprStmt] ExprStmt +# 2139| getExpr(): [FunctionCall] call to set_x +# 2139| Type = [VoidType] void +# 2139| ValueCategory = prvalue +# 2139| getQualifier(): [VariableAccess] x +# 2139| Type = [Class] ClassWithDestructor +# 2139| ValueCategory = lvalue +# 2139| getArgument(0): [CharLiteral] 97 +# 2139| Type = [PlainCharType] char +# 2139| Value = [CharLiteral] 97 +# 2139| ValueCategory = prvalue +# 2139| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2139| Type = [VoidType] void +# 2139| ValueCategory = prvalue +# 2139| getQualifier(): [VariableAccess] x +# 2139| Type = [Class] ClassWithDestructor +# 2139| ValueCategory = lvalue +# 2141| getStmt(1): [ConstexprIfStmt] if constexpr (...) ... +# 2141| getInitialization(): [DeclStmt] declaration +# 2141| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2141| Type = [Class] ClassWithDestructor +# 2141| getVariable().getInitializer(): [Initializer] initializer for x +# 2141| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2141| Type = [VoidType] void +# 2141| ValueCategory = prvalue +# 2141| getCondition(): [VariableAccess] initialization_with_destructor_bool +# 2141| Type = [BoolType] bool +# 2141| Value = [VariableAccess] 1 +# 2141| ValueCategory = prvalue(load) +# 2142| getThen(): [ExprStmt] ExprStmt +# 2142| getExpr(): [FunctionCall] call to set_x +# 2142| Type = [VoidType] void +# 2142| ValueCategory = prvalue +# 2142| getQualifier(): [VariableAccess] x +# 2142| Type = [Class] ClassWithDestructor +# 2142| ValueCategory = lvalue +# 2142| getArgument(0): [CharLiteral] 97 +# 2142| Type = [PlainCharType] char +# 2142| Value = [CharLiteral] 97 +# 2142| ValueCategory = prvalue +# 2142| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2142| Type = [VoidType] void +# 2142| ValueCategory = prvalue +# 2142| getQualifier(): [VariableAccess] x +# 2142| Type = [Class] ClassWithDestructor +# 2142| ValueCategory = lvalue +# 2144| getStmt(2): [SwitchStmt] switch (...) ... +# 2144| getInitialization(): [DeclStmt] declaration +# 2144| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2144| Type = [Class] ClassWithDestructor +# 2144| getVariable().getInitializer(): [Initializer] initializer for x +# 2144| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2144| Type = [VoidType] void +# 2144| ValueCategory = prvalue +# 2144| getExpr(): [VariableAccess] c +# 2144| Type = [PlainCharType] char +# 2144| ValueCategory = prvalue(load) +# 2144| getStmt(): [BlockStmt] { ... } +# 2145| getStmt(0): [SwitchCase] case ...: +# 2145| getExpr(): [CharLiteral] 97 +# 2145| Type = [PlainCharType] char +# 2145| Value = [CharLiteral] 97 +# 2145| ValueCategory = prvalue +# 2145| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2145| Conversion = [IntegralConversion] integral conversion +# 2145| Type = [IntType] int +# 2145| Value = [CStyleCast] 97 +# 2145| ValueCategory = prvalue +# 2146| getStmt(1): [ExprStmt] ExprStmt +# 2146| getExpr(): [FunctionCall] call to set_x +# 2146| Type = [VoidType] void +# 2146| ValueCategory = prvalue +# 2146| getQualifier(): [VariableAccess] x +# 2146| Type = [Class] ClassWithDestructor +# 2146| ValueCategory = lvalue +# 2146| getArgument(0): [CharLiteral] 97 +# 2146| Type = [PlainCharType] char +# 2146| Value = [CharLiteral] 97 +# 2146| ValueCategory = prvalue +# 2147| getStmt(2): [BreakStmt] break; +# 2148| getStmt(3): [SwitchCase] default: +# 2149| getStmt(4): [ExprStmt] ExprStmt +# 2149| getExpr(): [FunctionCall] call to set_x +# 2149| Type = [VoidType] void +# 2149| ValueCategory = prvalue +# 2149| getQualifier(): [VariableAccess] x +# 2149| Type = [Class] ClassWithDestructor +# 2149| ValueCategory = lvalue +# 2149| getArgument(0): [CharLiteral] 98 +# 2149| Type = [PlainCharType] char +# 2149| Value = [CharLiteral] 98 +# 2149| ValueCategory = prvalue +# 2150| getStmt(5): [BreakStmt] break; +# 2151| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2151| Type = [VoidType] void +# 2151| ValueCategory = prvalue +# 2151| getQualifier(): [VariableAccess] x +# 2151| Type = [Class] ClassWithDestructor +# 2151| ValueCategory = lvalue +# 2144| getExpr().getFullyConverted(): [CStyleCast] (int)... +# 2144| Conversion = [IntegralConversion] integral conversion +# 2144| Type = [IntType] int +# 2144| ValueCategory = prvalue +# 2151| getStmt(3): [LabelStmt] label ...: +# 2153| getStmt(4): [DeclStmt] declaration +# 2153| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2153| Type = [Class] ClassWithDestructor +# 2153| getVariable().getInitializer(): [Initializer] initializer for x +# 2153| getExpr(): [ConstructorCall] call to ClassWithDestructor +# 2153| Type = [VoidType] void +# 2153| ValueCategory = prvalue +# 2154| getStmt(5): [RangeBasedForStmt] for(...:...) ... +# 2154| getInitialization(): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2154| Type = [ClassTemplateInstantiation,Struct] vector +# 2154| getVariable().getInitializer(): [Initializer] initializer for ys +# 2154| getExpr(): [ConstructorCall] call to vector +# 2154| Type = [VoidType] void +# 2154| ValueCategory = prvalue +# 2154| getArgument(0): [VariableAccess] x +# 2154| Type = [Class] ClassWithDestructor +# 2154| ValueCategory = prvalue(load) +# 2154| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2154| Type = [Class] ClassWithDestructor +# 2154| ValueCategory = lvalue +# 2154| getChild(1): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2154| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2154| getExpr(): [VariableAccess] ys +# 2154| Type = [ClassTemplateInstantiation,Struct] vector +# 2154| ValueCategory = lvalue +# 2154| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2154| Type = [LValueReferenceType] vector & +# 2154| ValueCategory = prvalue +# 2154| getBeginEndDeclaration(): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2154| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2154| getExpr(): [FunctionCall] call to begin +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__range) +# 2154| Type = [LValueReferenceType] vector & +# 2154| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2154| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2154| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2154| getExpr(): [FunctionCall] call to end +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__range) +# 2154| Type = [LValueReferenceType] vector & +# 2154| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2154| getCondition(): [FunctionCall] call to operator!= +# 2154| Type = [BoolType] bool +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__begin) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue +# 2154| getArgument(0): [VariableAccess] (__end) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2154| getUpdate(): [FunctionCall] call to operator++ +# 2154| Type = [LValueReferenceType] iterator & +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__begin) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue +# 2154| getChild(5): [DeclStmt] declaration +# 2154| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2154| Type = [Class] ClassWithDestructor +# 2154| getVariable().getInitializer(): [Initializer] initializer for y +# 2154| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2154| Type = [LValueReferenceType] ClassWithDestructor & +# 2154| ValueCategory = prvalue +# 2154| getQualifier(): [VariableAccess] (__begin) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2154| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2154| Type = [Class] ClassWithDestructor +# 2154| ValueCategory = prvalue(load) +# 2155| getStmt(): [ExprStmt] ExprStmt +# 2155| getExpr(): [FunctionCall] call to set_x +# 2155| Type = [VoidType] void +# 2155| ValueCategory = prvalue +# 2155| getQualifier(): [VariableAccess] y +# 2155| Type = [Class] ClassWithDestructor +# 2155| ValueCategory = lvalue +# 2155| getArgument(0): [CharLiteral] 97 +# 2155| Type = [PlainCharType] char +# 2155| Value = [CharLiteral] 97 +# 2155| ValueCategory = prvalue +# 2154| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2154| Type = [NestedStruct] iterator +# 2154| ValueCategory = lvalue +# 2157| getStmt(6): [RangeBasedForStmt] for(...:...) ... +# 2157| getInitialization(): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2157| Type = [ClassTemplateInstantiation,Struct] vector +# 2157| getVariable().getInitializer(): [Initializer] initializer for ys +# 2157| getExpr(): [ConstructorCall] call to vector +# 2157| Type = [VoidType] void +# 2157| ValueCategory = prvalue +# 2157| getArgument(0): [VariableAccess] x +# 2157| Type = [Class] ClassWithDestructor +# 2157| ValueCategory = prvalue(load) +# 2157| getArgument(0).getFullyConverted(): [TemporaryObjectExpr] temporary object +# 2157| Type = [Class] ClassWithDestructor +# 2157| ValueCategory = lvalue +# 2157| getChild(1): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2157| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2157| getExpr(): [VariableAccess] ys +# 2157| Type = [ClassTemplateInstantiation,Struct] vector +# 2157| ValueCategory = lvalue +# 2157| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2157| Type = [LValueReferenceType] vector & +# 2157| ValueCategory = prvalue +# 2157| getBeginEndDeclaration(): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2157| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2157| getExpr(): [FunctionCall] call to begin +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__range) +# 2157| Type = [LValueReferenceType] vector & +# 2157| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2157| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2157| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2157| getExpr(): [FunctionCall] call to end +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__range) +# 2157| Type = [LValueReferenceType] vector & +# 2157| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2157| getCondition(): [FunctionCall] call to operator!= +# 2157| Type = [BoolType] bool +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__begin) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +# 2157| getArgument(0): [VariableAccess] (__end) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2157| getUpdate(): [FunctionCall] call to operator++ +# 2157| Type = [LValueReferenceType] iterator & +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__begin) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +# 2157| getChild(5): [DeclStmt] declaration +# 2157| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2157| Type = [Class] ClassWithDestructor +# 2157| getVariable().getInitializer(): [Initializer] initializer for y +# 2157| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2157| Type = [LValueReferenceType] ClassWithDestructor & +# 2157| ValueCategory = prvalue +# 2157| getQualifier(): [VariableAccess] (__begin) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2157| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2157| Type = [Class] ClassWithDestructor +# 2157| ValueCategory = prvalue(load) +# 2157| getStmt(): [BlockStmt] { ... } +# 2158| getStmt(0): [ExprStmt] ExprStmt +# 2158| getExpr(): [FunctionCall] call to set_x +# 2158| Type = [VoidType] void +# 2158| ValueCategory = prvalue +# 2158| getQualifier(): [VariableAccess] y +# 2158| Type = [Class] ClassWithDestructor +# 2158| ValueCategory = lvalue +# 2158| getArgument(0): [CharLiteral] 97 +# 2158| Type = [PlainCharType] char +# 2158| Value = [CharLiteral] 97 +# 2158| ValueCategory = prvalue +# 2159| getStmt(1): [IfStmt] if (...) ... +# 2159| getCondition(): [EQExpr] ... == ... +# 2159| Type = [BoolType] bool +# 2159| ValueCategory = prvalue +# 2159| getLeftOperand(): [FunctionCall] call to get_x +# 2159| Type = [PlainCharType] char +# 2159| ValueCategory = prvalue +# 2159| getQualifier(): [VariableAccess] y +# 2159| Type = [Class] ClassWithDestructor +# 2159| ValueCategory = lvalue +# 2159| getRightOperand(): [CharLiteral] 98 +# 2159| Type = [PlainCharType] char +# 2159| Value = [CharLiteral] 98 +# 2159| ValueCategory = prvalue +# 2159| getLeftOperand().getFullyConverted(): [CStyleCast] (int)... +# 2159| Conversion = [IntegralConversion] integral conversion +# 2159| Type = [IntType] int +# 2159| ValueCategory = prvalue +# 2159| getRightOperand().getFullyConverted(): [CStyleCast] (int)... +# 2159| Conversion = [IntegralConversion] integral conversion +# 2159| Type = [IntType] int +# 2159| Value = [CStyleCast] 98 +# 2159| ValueCategory = prvalue +# 2160| getThen(): [ReturnStmt] return ... +# 2167| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2167| Type = [VoidType] void +# 2167| ValueCategory = prvalue +# 2167| getQualifier(): [VariableAccess] x +# 2167| Type = [Class] ClassWithDestructor +# 2167| ValueCategory = lvalue +# 2157| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2157| Type = [NestedStruct] iterator +# 2157| ValueCategory = lvalue +# 2163| getStmt(7): [RangeBasedForStmt] for(...:...) ... +# 2163| getInitialization(): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of ys +# 2163| Type = [ClassTemplateInstantiation,Struct] vector +# 2163| getVariable().getInitializer(): [Initializer] initializer for ys +# 2163| getExpr(): [ConstructorCall] call to vector +# 2163| Type = [VoidType] void +# 2163| ValueCategory = prvalue +# 2163| getArgument(0): [Literal] 1 +# 2163| Type = [IntType] int +# 2163| Value = [Literal] 1 +# 2163| ValueCategory = prvalue +# 2163| getChild(1): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__range) +# 2163| Type = [LValueReferenceType] vector & +#-----| getVariable().getInitializer(): [Initializer] initializer for (__range) +# 2163| getExpr(): [VariableAccess] ys +# 2163| Type = [ClassTemplateInstantiation,Struct] vector +# 2163| ValueCategory = lvalue +# 2163| getExpr().getFullyConverted(): [ReferenceToExpr] (reference to) +# 2163| Type = [LValueReferenceType] vector & +# 2163| ValueCategory = prvalue +# 2163| getBeginEndDeclaration(): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] declaration of (__begin) +# 2163| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__begin) +# 2163| getExpr(): [FunctionCall] call to begin +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__range) +# 2163| Type = [LValueReferenceType] vector & +# 2163| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2163| getDeclarationEntry(1): [VariableDeclarationEntry] declaration of (__end) +# 2163| Type = [NestedStruct] iterator +#-----| getVariable().getInitializer(): [Initializer] initializer for (__end) +# 2163| getExpr(): [FunctionCall] call to end +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__range) +# 2163| Type = [LValueReferenceType] vector & +# 2163| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const vector)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const vector +#-----| ValueCategory = lvalue +#-----| getExpr(): [ReferenceDereferenceExpr] (reference dereference) +#-----| Type = [ClassTemplateInstantiation,Struct] vector +#-----| ValueCategory = lvalue +# 2163| getCondition(): [FunctionCall] call to operator!= +# 2163| Type = [BoolType] bool +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__begin) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +# 2163| getArgument(0): [VariableAccess] (__end) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = prvalue(load) +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2163| getUpdate(): [FunctionCall] call to operator++ +# 2163| Type = [LValueReferenceType] iterator & +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__begin) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +# 2163| getChild(5): [DeclStmt] declaration +# 2163| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2163| Type = [IntType] int +# 2163| getVariable().getInitializer(): [Initializer] initializer for y +# 2163| getExpr(): [OverloadedPointerDereferenceExpr] call to operator* +# 2163| Type = [LValueReferenceType] int & +# 2163| ValueCategory = prvalue +# 2163| getQualifier(): [VariableAccess] (__begin) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +#-----| getQualifier().getFullyConverted(): [CStyleCast] (const iterator)... +#-----| Conversion = [GlvalueConversion] glvalue conversion +#-----| Type = [SpecifiedType] const iterator +#-----| ValueCategory = lvalue +# 2163| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2163| Type = [IntType] int +# 2163| ValueCategory = prvalue(load) +# 2163| getStmt(): [BlockStmt] { ... } +# 2164| getStmt(0): [IfStmt] if (...) ... +# 2164| getCondition(): [EQExpr] ... == ... +# 2164| Type = [BoolType] bool +# 2164| ValueCategory = prvalue +# 2164| getLeftOperand(): [VariableAccess] y +# 2164| Type = [IntType] int +# 2164| ValueCategory = prvalue(load) +# 2164| getRightOperand(): [Literal] 1 +# 2164| Type = [IntType] int +# 2164| Value = [Literal] 1 +# 2164| ValueCategory = prvalue +# 2165| getThen(): [ReturnStmt] return ... +# 2167| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2167| Type = [VoidType] void +# 2167| ValueCategory = prvalue +# 2167| getQualifier(): [VariableAccess] x +# 2167| Type = [Class] ClassWithDestructor +# 2167| ValueCategory = lvalue +# 2163| getUpdate().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference) +# 2163| Type = [NestedStruct] iterator +# 2163| ValueCategory = lvalue +# 2167| getStmt(8): [ReturnStmt] return ... +# 2167| getImplicitDestructorCall(0): [DestructorCall] call to ~ClassWithDestructor +# 2167| Type = [VoidType] void +# 2167| ValueCategory = prvalue +# 2167| getQualifier(): [VariableAccess] x +# 2167| Type = [Class] ClassWithDestructor +# 2167| ValueCategory = lvalue perf-regression.cpp: # 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&) # 4| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 3949bb9f0f6..4022128e2bb 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -6687,3951 +6687,3935 @@ ir.cpp: # 1054| v1054_43(void) = AliasedUse : ~m1054_20 # 1054| v1054_44(void) = ExitFunction : -# 1077| void RangeBasedFor(vector const&) -# 1077| Block 0 -# 1077| v1077_1(void) = EnterFunction : -# 1077| m1077_2(unknown) = AliasedDefinition : -# 1077| m1077_3(unknown) = InitializeNonLocal : -# 1077| m1077_4(unknown) = Chi : total:m1077_2, partial:m1077_3 -# 1077| r1077_5(glval &>) = VariableAddress[v] : -# 1077| m1077_6(vector &) = InitializeParameter[v] : &:r1077_5 -# 1077| r1077_7(vector &) = Load[v] : &:r1077_5, m1077_6 -# 1077| m1077_8(unknown) = InitializeIndirection[v] : &:r1077_7 -# 1078| r1078_1(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_2(glval &>) = VariableAddress[v] : -# 1078| r1078_3(vector &) = Load[v] : &:r1078_2, m1077_6 -# 1078| r1078_4(glval>) = CopyValue : r1078_3 -# 1078| r1078_5(vector &) = CopyValue : r1078_4 -# 1078| m1078_6(vector &) = Store[(__range)] : &:r1078_1, r1078_5 -# 1078| r1078_7(glval) = VariableAddress[(__begin)] : -# 1078| r1078_8(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_9(vector &) = Load[(__range)] : &:r1078_8, m1078_6 -#-----| r0_1(glval>) = CopyValue : r1078_9 -# 1078| r1078_10(glval) = FunctionAddress[begin] : -# 1078| r1078_11(iterator) = Call[begin] : func:r1078_10, this:r0_1 -# 1078| m1078_12(unknown) = ^CallSideEffect : ~m1077_4 -# 1078| m1078_13(unknown) = Chi : total:m1077_4, partial:m1078_12 -#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1077_8 -# 1078| m1078_14(iterator) = Store[(__begin)] : &:r1078_7, r1078_11 -# 1078| r1078_15(glval) = VariableAddress[(__end)] : -# 1078| r1078_16(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_17(vector &) = Load[(__range)] : &:r1078_16, m1078_6 -#-----| r0_3(glval>) = CopyValue : r1078_17 -# 1078| r1078_18(glval) = FunctionAddress[end] : -# 1078| r1078_19(iterator) = Call[end] : func:r1078_18, this:r0_3 -# 1078| m1078_20(unknown) = ^CallSideEffect : ~m1078_13 -# 1078| m1078_21(unknown) = Chi : total:m1078_13, partial:m1078_20 -#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1077_8 -# 1078| m1078_22(iterator) = Store[(__end)] : &:r1078_15, r1078_19 +# 1079| void RangeBasedFor(vector const&) +# 1079| Block 0 +# 1079| v1079_1(void) = EnterFunction : +# 1079| m1079_2(unknown) = AliasedDefinition : +# 1079| m1079_3(unknown) = InitializeNonLocal : +# 1079| m1079_4(unknown) = Chi : total:m1079_2, partial:m1079_3 +# 1079| r1079_5(glval &>) = VariableAddress[v] : +# 1079| m1079_6(vector &) = InitializeParameter[v] : &:r1079_5 +# 1079| r1079_7(vector &) = Load[v] : &:r1079_5, m1079_6 +# 1079| m1079_8(unknown) = InitializeIndirection[v] : &:r1079_7 +# 1080| r1080_1(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_2(glval &>) = VariableAddress[v] : +# 1080| r1080_3(vector &) = Load[v] : &:r1080_2, m1079_6 +# 1080| r1080_4(glval>) = CopyValue : r1080_3 +# 1080| r1080_5(vector &) = CopyValue : r1080_4 +# 1080| m1080_6(vector &) = Store[(__range)] : &:r1080_1, r1080_5 +# 1080| r1080_7(glval) = VariableAddress[(__begin)] : +# 1080| r1080_8(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_9(vector &) = Load[(__range)] : &:r1080_8, m1080_6 +#-----| r0_1(glval>) = CopyValue : r1080_9 +# 1080| r1080_10(glval) = FunctionAddress[begin] : +# 1080| r1080_11(iterator) = Call[begin] : func:r1080_10, this:r0_1 +# 1080| m1080_12(unknown) = ^CallSideEffect : ~m1079_4 +# 1080| m1080_13(unknown) = Chi : total:m1079_4, partial:m1080_12 +#-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m1079_8 +# 1080| m1080_14(iterator) = Store[(__begin)] : &:r1080_7, r1080_11 +# 1080| r1080_15(glval) = VariableAddress[(__end)] : +# 1080| r1080_16(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_17(vector &) = Load[(__range)] : &:r1080_16, m1080_6 +#-----| r0_3(glval>) = CopyValue : r1080_17 +# 1080| r1080_18(glval) = FunctionAddress[end] : +# 1080| r1080_19(iterator) = Call[end] : func:r1080_18, this:r0_3 +# 1080| m1080_20(unknown) = ^CallSideEffect : ~m1080_13 +# 1080| m1080_21(unknown) = Chi : total:m1080_13, partial:m1080_20 +#-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m1079_8 +# 1080| m1080_22(iterator) = Store[(__end)] : &:r1080_15, r1080_19 #-----| Goto -> Block 1 -# 1078| Block 1 -# 1078| m1078_23(iterator) = Phi : from 0:m1078_14, from 4:m1078_49 -# 1078| m1078_24(unknown) = Phi : from 0:~m1078_21, from 4:~m1078_46 -# 1078| r1078_25(glval) = VariableAddress[(__begin)] : -#-----| r0_5(glval) = Convert : r1078_25 -# 1078| r1078_26(glval) = FunctionAddress[operator!=] : -# 1078| r1078_27(glval) = VariableAddress[(__end)] : -# 1078| r1078_28(iterator) = Load[(__end)] : &:r1078_27, m1078_22 -# 1078| r1078_29(bool) = Call[operator!=] : func:r1078_26, this:r0_5, 0:r1078_28 -# 1078| m1078_30(unknown) = ^CallSideEffect : ~m1078_24 -# 1078| m1078_31(unknown) = Chi : total:m1078_24, partial:m1078_30 -#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1078_23 -# 1078| v1078_32(void) = ConditionalBranch : r1078_29 +# 1080| Block 1 +# 1080| m1080_23(iterator) = Phi : from 0:m1080_14, from 4:m1080_49 +# 1080| m1080_24(unknown) = Phi : from 0:~m1080_21, from 4:~m1080_46 +# 1080| r1080_25(glval) = VariableAddress[(__begin)] : +#-----| r0_5(glval) = Convert : r1080_25 +# 1080| r1080_26(glval) = FunctionAddress[operator!=] : +# 1080| r1080_27(glval) = VariableAddress[(__end)] : +# 1080| r1080_28(iterator) = Load[(__end)] : &:r1080_27, m1080_22 +# 1080| r1080_29(bool) = Call[operator!=] : func:r1080_26, this:r0_5, 0:r1080_28 +# 1080| m1080_30(unknown) = ^CallSideEffect : ~m1080_24 +# 1080| m1080_31(unknown) = Chi : total:m1080_24, partial:m1080_30 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m1080_23 +# 1080| v1080_32(void) = ConditionalBranch : r1080_29 #-----| False -> Block 5 #-----| True -> Block 2 -# 1078| Block 2 -# 1078| r1078_33(glval) = VariableAddress[e] : -# 1078| r1078_34(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r1078_34 -# 1078| r1078_35(glval) = FunctionAddress[operator*] : -# 1078| r1078_36(int &) = Call[operator*] : func:r1078_35, this:r0_7 -# 1078| m1078_37(unknown) = ^CallSideEffect : ~m1078_31 -# 1078| m1078_38(unknown) = Chi : total:m1078_31, partial:m1078_37 -#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m1078_23 -# 1078| r1078_39(int) = Load[?] : &:r1078_36, ~m1078_38 -# 1078| m1078_40(int) = Store[e] : &:r1078_33, r1078_39 -# 1079| r1079_1(glval) = VariableAddress[e] : -# 1079| r1079_2(int) = Load[e] : &:r1079_1, m1078_40 -# 1079| r1079_3(int) = Constant[0] : -# 1079| r1079_4(bool) = CompareGT : r1079_2, r1079_3 -# 1079| v1079_5(void) = ConditionalBranch : r1079_4 +# 1080| Block 2 +# 1080| r1080_33(glval) = VariableAddress[e] : +# 1080| r1080_34(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r1080_34 +# 1080| r1080_35(glval) = FunctionAddress[operator*] : +# 1080| r1080_36(int &) = Call[operator*] : func:r1080_35, this:r0_7 +# 1080| m1080_37(unknown) = ^CallSideEffect : ~m1080_31 +# 1080| m1080_38(unknown) = Chi : total:m1080_31, partial:m1080_37 +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m1080_23 +# 1080| r1080_39(int) = Load[?] : &:r1080_36, ~m1080_38 +# 1080| m1080_40(int) = Store[e] : &:r1080_33, r1080_39 +# 1081| r1081_1(glval) = VariableAddress[e] : +# 1081| r1081_2(int) = Load[e] : &:r1081_1, m1080_40 +# 1081| r1081_3(int) = Constant[0] : +# 1081| r1081_4(bool) = CompareGT : r1081_2, r1081_3 +# 1081| v1081_5(void) = ConditionalBranch : r1081_4 #-----| False -> Block 4 #-----| True -> Block 3 -# 1080| Block 3 -# 1080| v1080_1(void) = NoOp : +# 1082| Block 3 +# 1082| v1082_1(void) = NoOp : #-----| Goto -> Block 4 -# 1078| Block 4 -# 1078| v1078_41(void) = NoOp : -# 1078| r1078_42(glval) = VariableAddress[(__begin)] : -# 1078| r1078_43(glval) = FunctionAddress[operator++] : -# 1078| r1078_44(iterator &) = Call[operator++] : func:r1078_43, this:r1078_42 -# 1078| m1078_45(unknown) = ^CallSideEffect : ~m1078_38 -# 1078| m1078_46(unknown) = Chi : total:m1078_38, partial:m1078_45 -# 1078| v1078_47(void) = ^IndirectReadSideEffect[-1] : &:r1078_42, m1078_23 -# 1078| m1078_48(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1078_42 -# 1078| m1078_49(iterator) = Chi : total:m1078_23, partial:m1078_48 -# 1078| r1078_50(glval) = CopyValue : r1078_44 +# 1080| Block 4 +# 1080| v1080_41(void) = NoOp : +# 1080| r1080_42(glval) = VariableAddress[(__begin)] : +# 1080| r1080_43(glval) = FunctionAddress[operator++] : +# 1080| r1080_44(iterator &) = Call[operator++] : func:r1080_43, this:r1080_42 +# 1080| m1080_45(unknown) = ^CallSideEffect : ~m1080_38 +# 1080| m1080_46(unknown) = Chi : total:m1080_38, partial:m1080_45 +# 1080| v1080_47(void) = ^IndirectReadSideEffect[-1] : &:r1080_42, m1080_23 +# 1080| m1080_48(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1080_42 +# 1080| m1080_49(iterator) = Chi : total:m1080_23, partial:m1080_48 +# 1080| r1080_50(glval) = CopyValue : r1080_44 #-----| Goto (back edge) -> Block 1 -# 1084| Block 5 -# 1084| r1084_1(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_2(glval &>) = VariableAddress[v] : -# 1084| r1084_3(vector &) = Load[v] : &:r1084_2, m1077_6 -# 1084| r1084_4(glval>) = CopyValue : r1084_3 -# 1084| r1084_5(vector &) = CopyValue : r1084_4 -# 1084| m1084_6(vector &) = Store[(__range)] : &:r1084_1, r1084_5 -# 1084| r1084_7(glval) = VariableAddress[(__begin)] : -# 1084| r1084_8(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_9(vector &) = Load[(__range)] : &:r1084_8, m1084_6 -#-----| r0_9(glval>) = CopyValue : r1084_9 -# 1084| r1084_10(glval) = FunctionAddress[begin] : -# 1084| r1084_11(iterator) = Call[begin] : func:r1084_10, this:r0_9 -# 1084| m1084_12(unknown) = ^CallSideEffect : ~m1078_31 -# 1084| m1084_13(unknown) = Chi : total:m1078_31, partial:m1084_12 -#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m1077_8 -# 1084| m1084_14(iterator) = Store[(__begin)] : &:r1084_7, r1084_11 -# 1084| r1084_15(glval) = VariableAddress[(__end)] : -# 1084| r1084_16(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_17(vector &) = Load[(__range)] : &:r1084_16, m1084_6 -#-----| r0_11(glval>) = CopyValue : r1084_17 -# 1084| r1084_18(glval) = FunctionAddress[end] : -# 1084| r1084_19(iterator) = Call[end] : func:r1084_18, this:r0_11 -# 1084| m1084_20(unknown) = ^CallSideEffect : ~m1084_13 -# 1084| m1084_21(unknown) = Chi : total:m1084_13, partial:m1084_20 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1077_8 -# 1084| m1084_22(iterator) = Store[(__end)] : &:r1084_15, r1084_19 +# 1086| Block 5 +# 1086| r1086_1(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_2(glval &>) = VariableAddress[v] : +# 1086| r1086_3(vector &) = Load[v] : &:r1086_2, m1079_6 +# 1086| r1086_4(glval>) = CopyValue : r1086_3 +# 1086| r1086_5(vector &) = CopyValue : r1086_4 +# 1086| m1086_6(vector &) = Store[(__range)] : &:r1086_1, r1086_5 +# 1086| r1086_7(glval) = VariableAddress[(__begin)] : +# 1086| r1086_8(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_9(vector &) = Load[(__range)] : &:r1086_8, m1086_6 +#-----| r0_9(glval>) = CopyValue : r1086_9 +# 1086| r1086_10(glval) = FunctionAddress[begin] : +# 1086| r1086_11(iterator) = Call[begin] : func:r1086_10, this:r0_9 +# 1086| m1086_12(unknown) = ^CallSideEffect : ~m1080_31 +# 1086| m1086_13(unknown) = Chi : total:m1080_31, partial:m1086_12 +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m1079_8 +# 1086| m1086_14(iterator) = Store[(__begin)] : &:r1086_7, r1086_11 +# 1086| r1086_15(glval) = VariableAddress[(__end)] : +# 1086| r1086_16(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_17(vector &) = Load[(__range)] : &:r1086_16, m1086_6 +#-----| r0_11(glval>) = CopyValue : r1086_17 +# 1086| r1086_18(glval) = FunctionAddress[end] : +# 1086| r1086_19(iterator) = Call[end] : func:r1086_18, this:r0_11 +# 1086| m1086_20(unknown) = ^CallSideEffect : ~m1086_13 +# 1086| m1086_21(unknown) = Chi : total:m1086_13, partial:m1086_20 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1079_8 +# 1086| m1086_22(iterator) = Store[(__end)] : &:r1086_15, r1086_19 #-----| Goto -> Block 6 -# 1084| Block 6 -# 1084| m1084_23(iterator) = Phi : from 5:m1084_14, from 7:m1084_40 -# 1084| m1084_24(unknown) = Phi : from 5:~m1084_21, from 7:~m1084_37 -# 1084| r1084_25(glval) = VariableAddress[(__begin)] : -#-----| r0_13(glval) = Convert : r1084_25 -# 1084| r1084_26(glval) = FunctionAddress[operator!=] : -# 1084| r1084_27(glval) = VariableAddress[(__end)] : -# 1084| r1084_28(iterator) = Load[(__end)] : &:r1084_27, m1084_22 -# 1084| r1084_29(bool) = Call[operator!=] : func:r1084_26, this:r0_13, 0:r1084_28 -# 1084| m1084_30(unknown) = ^CallSideEffect : ~m1084_24 -# 1084| m1084_31(unknown) = Chi : total:m1084_24, partial:m1084_30 -#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1084_23 -# 1084| v1084_32(void) = ConditionalBranch : r1084_29 +# 1086| Block 6 +# 1086| m1086_23(iterator) = Phi : from 5:m1086_14, from 7:m1086_40 +# 1086| m1086_24(unknown) = Phi : from 5:~m1086_21, from 7:~m1086_37 +# 1086| r1086_25(glval) = VariableAddress[(__begin)] : +#-----| r0_13(glval) = Convert : r1086_25 +# 1086| r1086_26(glval) = FunctionAddress[operator!=] : +# 1086| r1086_27(glval) = VariableAddress[(__end)] : +# 1086| r1086_28(iterator) = Load[(__end)] : &:r1086_27, m1086_22 +# 1086| r1086_29(bool) = Call[operator!=] : func:r1086_26, this:r0_13, 0:r1086_28 +# 1086| m1086_30(unknown) = ^CallSideEffect : ~m1086_24 +# 1086| m1086_31(unknown) = Chi : total:m1086_24, partial:m1086_30 +#-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, m1086_23 +# 1086| v1086_32(void) = ConditionalBranch : r1086_29 #-----| False -> Block 10 #-----| True -> Block 8 -# 1084| Block 7 -# 1084| r1084_33(glval) = VariableAddress[(__begin)] : -# 1084| r1084_34(glval) = FunctionAddress[operator++] : -# 1084| r1084_35(iterator &) = Call[operator++] : func:r1084_34, this:r1084_33 -# 1084| m1084_36(unknown) = ^CallSideEffect : ~m1084_47 -# 1084| m1084_37(unknown) = Chi : total:m1084_47, partial:m1084_36 -# 1084| v1084_38(void) = ^IndirectReadSideEffect[-1] : &:r1084_33, m1084_23 -# 1084| m1084_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1084_33 -# 1084| m1084_40(iterator) = Chi : total:m1084_23, partial:m1084_39 -# 1084| r1084_41(glval) = CopyValue : r1084_35 +# 1086| Block 7 +# 1086| r1086_33(glval) = VariableAddress[(__begin)] : +# 1086| r1086_34(glval) = FunctionAddress[operator++] : +# 1086| r1086_35(iterator &) = Call[operator++] : func:r1086_34, this:r1086_33 +# 1086| m1086_36(unknown) = ^CallSideEffect : ~m1086_47 +# 1086| m1086_37(unknown) = Chi : total:m1086_47, partial:m1086_36 +# 1086| v1086_38(void) = ^IndirectReadSideEffect[-1] : &:r1086_33, m1086_23 +# 1086| m1086_39(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1086_33 +# 1086| m1086_40(iterator) = Chi : total:m1086_23, partial:m1086_39 +# 1086| r1086_41(glval) = CopyValue : r1086_35 #-----| Goto (back edge) -> Block 6 -# 1084| Block 8 -# 1084| r1084_42(glval) = VariableAddress[e] : -# 1084| r1084_43(glval) = VariableAddress[(__begin)] : -#-----| r0_15(glval) = Convert : r1084_43 -# 1084| r1084_44(glval) = FunctionAddress[operator*] : -# 1084| r1084_45(int &) = Call[operator*] : func:r1084_44, this:r0_15 -# 1084| m1084_46(unknown) = ^CallSideEffect : ~m1084_31 -# 1084| m1084_47(unknown) = Chi : total:m1084_31, partial:m1084_46 -#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m1084_23 -# 1084| r1084_48(glval) = CopyValue : r1084_45 -# 1084| r1084_49(glval) = Convert : r1084_48 -# 1084| r1084_50(int &) = CopyValue : r1084_49 -# 1084| m1084_51(int &) = Store[e] : &:r1084_42, r1084_50 -# 1085| r1085_1(glval) = VariableAddress[e] : -# 1085| r1085_2(int &) = Load[e] : &:r1085_1, m1084_51 -# 1085| r1085_3(int) = Load[?] : &:r1085_2, ~m1084_47 -# 1085| r1085_4(int) = Constant[5] : -# 1085| r1085_5(bool) = CompareLT : r1085_3, r1085_4 -# 1085| v1085_6(void) = ConditionalBranch : r1085_5 +# 1086| Block 8 +# 1086| r1086_42(glval) = VariableAddress[e] : +# 1086| r1086_43(glval) = VariableAddress[(__begin)] : +#-----| r0_15(glval) = Convert : r1086_43 +# 1086| r1086_44(glval) = FunctionAddress[operator*] : +# 1086| r1086_45(int &) = Call[operator*] : func:r1086_44, this:r0_15 +# 1086| m1086_46(unknown) = ^CallSideEffect : ~m1086_31 +# 1086| m1086_47(unknown) = Chi : total:m1086_31, partial:m1086_46 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m1086_23 +# 1086| r1086_48(glval) = CopyValue : r1086_45 +# 1086| r1086_49(glval) = Convert : r1086_48 +# 1086| r1086_50(int &) = CopyValue : r1086_49 +# 1086| m1086_51(int &) = Store[e] : &:r1086_42, r1086_50 +# 1087| r1087_1(glval) = VariableAddress[e] : +# 1087| r1087_2(int &) = Load[e] : &:r1087_1, m1086_51 +# 1087| r1087_3(int) = Load[?] : &:r1087_2, ~m1086_47 +# 1087| r1087_4(int) = Constant[5] : +# 1087| r1087_5(bool) = CompareLT : r1087_3, r1087_4 +# 1087| v1087_6(void) = ConditionalBranch : r1087_5 #-----| False -> Block 7 #-----| True -> Block 9 -# 1086| Block 9 -# 1086| v1086_1(void) = NoOp : +# 1088| Block 9 +# 1088| v1088_1(void) = NoOp : #-----| Goto -> Block 10 -# 1088| Block 10 -# 1088| m1088_1(unknown) = Phi : from 6:~m1084_31, from 9:~m1084_47 -# 1088| v1088_2(void) = NoOp : -# 1089| v1089_1(void) = NoOp : -# 1077| v1077_9(void) = ReturnIndirection[v] : &:r1077_7, m1077_8 -# 1077| v1077_10(void) = ReturnVoid : -# 1077| v1077_11(void) = AliasedUse : ~m1088_1 -# 1077| v1077_12(void) = ExitFunction : +# 1090| Block 10 +# 1090| m1090_1(unknown) = Phi : from 6:~m1086_31, from 9:~m1086_47 +# 1090| v1090_2(void) = NoOp : +# 1091| v1091_1(void) = NoOp : +# 1079| v1079_9(void) = ReturnIndirection[v] : &:r1079_7, m1079_8 +# 1079| v1079_10(void) = ReturnVoid : +# 1079| v1079_11(void) = AliasedUse : ~m1090_1 +# 1079| v1079_12(void) = ExitFunction : -# 1108| int AsmStmt(int) -# 1108| Block 0 -# 1108| v1108_1(void) = EnterFunction : -# 1108| m1108_2(unknown) = AliasedDefinition : -# 1108| m1108_3(unknown) = InitializeNonLocal : -# 1108| m1108_4(unknown) = Chi : total:m1108_2, partial:m1108_3 -# 1108| r1108_5(glval) = VariableAddress[x] : -# 1108| m1108_6(int) = InitializeParameter[x] : &:r1108_5 -# 1109| m1109_1(unknown) = InlineAsm : ~m1108_4 -# 1109| m1109_2(unknown) = Chi : total:m1108_4, partial:m1109_1 -# 1110| r1110_1(glval) = VariableAddress[#return] : -# 1110| r1110_2(glval) = VariableAddress[x] : -# 1110| r1110_3(int) = Load[x] : &:r1110_2, m1108_6 -# 1110| m1110_4(int) = Store[#return] : &:r1110_1, r1110_3 -# 1108| r1108_7(glval) = VariableAddress[#return] : -# 1108| v1108_8(void) = ReturnValue : &:r1108_7, m1110_4 -# 1108| v1108_9(void) = AliasedUse : ~m1109_2 -# 1108| v1108_10(void) = ExitFunction : +# 1110| int AsmStmt(int) +# 1110| Block 0 +# 1110| v1110_1(void) = EnterFunction : +# 1110| m1110_2(unknown) = AliasedDefinition : +# 1110| m1110_3(unknown) = InitializeNonLocal : +# 1110| m1110_4(unknown) = Chi : total:m1110_2, partial:m1110_3 +# 1110| r1110_5(glval) = VariableAddress[x] : +# 1110| m1110_6(int) = InitializeParameter[x] : &:r1110_5 +# 1111| m1111_1(unknown) = InlineAsm : ~m1110_4 +# 1111| m1111_2(unknown) = Chi : total:m1110_4, partial:m1111_1 +# 1112| r1112_1(glval) = VariableAddress[#return] : +# 1112| r1112_2(glval) = VariableAddress[x] : +# 1112| r1112_3(int) = Load[x] : &:r1112_2, m1110_6 +# 1112| m1112_4(int) = Store[#return] : &:r1112_1, r1112_3 +# 1110| r1110_7(glval) = VariableAddress[#return] : +# 1110| v1110_8(void) = ReturnValue : &:r1110_7, m1112_4 +# 1110| v1110_9(void) = AliasedUse : ~m1111_2 +# 1110| v1110_10(void) = ExitFunction : -# 1113| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1113| Block 0 -# 1113| v1113_1(void) = EnterFunction : -# 1113| m1113_2(unknown) = AliasedDefinition : -# 1113| m1113_3(unknown) = InitializeNonLocal : -# 1113| m1113_4(unknown) = Chi : total:m1113_2, partial:m1113_3 -# 1113| r1113_5(glval) = VariableAddress[a] : -# 1113| m1113_6(unsigned int &) = InitializeParameter[a] : &:r1113_5 -# 1113| r1113_7(unsigned int &) = Load[a] : &:r1113_5, m1113_6 -# 1113| m1113_8(unknown) = InitializeIndirection[a] : &:r1113_7 -# 1113| r1113_9(glval) = VariableAddress[b] : -# 1113| m1113_10(unsigned int) = InitializeParameter[b] : &:r1113_9 -# 1113| r1113_11(glval) = VariableAddress[c] : -# 1113| m1113_12(unsigned int &) = InitializeParameter[c] : &:r1113_11 -# 1113| r1113_13(unsigned int &) = Load[c] : &:r1113_11, m1113_12 -# 1113| m1113_14(unknown) = InitializeIndirection[c] : &:r1113_13 -# 1113| r1113_15(glval) = VariableAddress[d] : -# 1113| m1113_16(unsigned int) = InitializeParameter[d] : &:r1113_15 -# 1118| r1118_1(glval) = VariableAddress[a] : -# 1118| r1118_2(unsigned int &) = Load[a] : &:r1118_1, m1113_6 -# 1118| r1118_3(glval) = CopyValue : r1118_2 -# 1118| r1118_4(glval) = VariableAddress[b] : -# 1118| r1118_5(glval) = VariableAddress[c] : -# 1118| r1118_6(unsigned int &) = Load[c] : &:r1118_5, m1113_12 -# 1118| r1118_7(unsigned int) = Load[?] : &:r1118_6, ~m1113_14 -# 1118| r1118_8(glval) = VariableAddress[d] : -# 1118| r1118_9(unsigned int) = Load[d] : &:r1118_8, m1113_16 -# 1115| m1115_1(unknown) = InlineAsm : ~m1113_4, 0:r1118_3, 1:r1118_4, 2:r1118_7, 3:r1118_9 -# 1115| m1115_2(unknown) = Chi : total:m1113_4, partial:m1115_1 -# 1120| v1120_1(void) = NoOp : -# 1113| v1113_17(void) = ReturnIndirection[a] : &:r1113_7, m1113_8 -# 1113| v1113_18(void) = ReturnIndirection[c] : &:r1113_13, m1113_14 -# 1113| v1113_19(void) = ReturnVoid : -# 1113| v1113_20(void) = AliasedUse : ~m1115_2 -# 1113| v1113_21(void) = ExitFunction : +# 1115| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1115| Block 0 +# 1115| v1115_1(void) = EnterFunction : +# 1115| m1115_2(unknown) = AliasedDefinition : +# 1115| m1115_3(unknown) = InitializeNonLocal : +# 1115| m1115_4(unknown) = Chi : total:m1115_2, partial:m1115_3 +# 1115| r1115_5(glval) = VariableAddress[a] : +# 1115| m1115_6(unsigned int &) = InitializeParameter[a] : &:r1115_5 +# 1115| r1115_7(unsigned int &) = Load[a] : &:r1115_5, m1115_6 +# 1115| m1115_8(unknown) = InitializeIndirection[a] : &:r1115_7 +# 1115| r1115_9(glval) = VariableAddress[b] : +# 1115| m1115_10(unsigned int) = InitializeParameter[b] : &:r1115_9 +# 1115| r1115_11(glval) = VariableAddress[c] : +# 1115| m1115_12(unsigned int &) = InitializeParameter[c] : &:r1115_11 +# 1115| r1115_13(unsigned int &) = Load[c] : &:r1115_11, m1115_12 +# 1115| m1115_14(unknown) = InitializeIndirection[c] : &:r1115_13 +# 1115| r1115_15(glval) = VariableAddress[d] : +# 1115| m1115_16(unsigned int) = InitializeParameter[d] : &:r1115_15 +# 1120| r1120_1(glval) = VariableAddress[a] : +# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, m1115_6 +# 1120| r1120_3(glval) = CopyValue : r1120_2 +# 1120| r1120_4(glval) = VariableAddress[b] : +# 1120| r1120_5(glval) = VariableAddress[c] : +# 1120| r1120_6(unsigned int &) = Load[c] : &:r1120_5, m1115_12 +# 1120| r1120_7(unsigned int) = Load[?] : &:r1120_6, ~m1115_14 +# 1120| r1120_8(glval) = VariableAddress[d] : +# 1120| r1120_9(unsigned int) = Load[d] : &:r1120_8, m1115_16 +# 1117| m1117_1(unknown) = InlineAsm : ~m1115_4, 0:r1120_3, 1:r1120_4, 2:r1120_7, 3:r1120_9 +# 1117| m1117_2(unknown) = Chi : total:m1115_4, partial:m1117_1 +# 1122| v1122_1(void) = NoOp : +# 1115| v1115_17(void) = ReturnIndirection[a] : &:r1115_7, m1115_8 +# 1115| v1115_18(void) = ReturnIndirection[c] : &:r1115_13, m1115_14 +# 1115| v1115_19(void) = ReturnVoid : +# 1115| v1115_20(void) = AliasedUse : ~m1117_2 +# 1115| v1115_21(void) = ExitFunction : -# 1122| void ExternDeclarations() -# 1122| Block 0 -# 1122| v1122_1(void) = EnterFunction : -# 1122| m1122_2(unknown) = AliasedDefinition : -# 1122| m1122_3(unknown) = InitializeNonLocal : -# 1122| m1122_4(unknown) = Chi : total:m1122_2, partial:m1122_3 -# 1125| r1125_1(glval) = VariableAddress[x] : -# 1125| m1125_2(int) = Uninitialized[x] : &:r1125_1 -# 1126| r1126_1(glval) = VariableAddress[y] : -# 1126| m1126_2(int) = Uninitialized[y] : &:r1126_1 -# 1127| r1127_1(glval) = VariableAddress[h] : -# 1127| m1127_2(int) = Uninitialized[h] : &:r1127_1 -# 1129| v1129_1(void) = NoOp : -# 1122| v1122_5(void) = ReturnVoid : -# 1122| v1122_6(void) = AliasedUse : m1122_3 -# 1122| v1122_7(void) = ExitFunction : +# 1124| void ExternDeclarations() +# 1124| Block 0 +# 1124| v1124_1(void) = EnterFunction : +# 1124| m1124_2(unknown) = AliasedDefinition : +# 1124| m1124_3(unknown) = InitializeNonLocal : +# 1124| m1124_4(unknown) = Chi : total:m1124_2, partial:m1124_3 +# 1127| r1127_1(glval) = VariableAddress[x] : +# 1127| m1127_2(int) = Uninitialized[x] : &:r1127_1 +# 1128| r1128_1(glval) = VariableAddress[y] : +# 1128| m1128_2(int) = Uninitialized[y] : &:r1128_1 +# 1129| r1129_1(glval) = VariableAddress[h] : +# 1129| m1129_2(int) = Uninitialized[h] : &:r1129_1 +# 1131| v1131_1(void) = NoOp : +# 1124| v1124_5(void) = ReturnVoid : +# 1124| v1124_6(void) = AliasedUse : m1124_3 +# 1124| v1124_7(void) = ExitFunction : -# 1137| void ExternDeclarationsInMacro() -# 1137| Block 0 -# 1137| v1137_1(void) = EnterFunction : -# 1137| m1137_2(unknown) = AliasedDefinition : -# 1137| m1137_3(unknown) = InitializeNonLocal : -# 1137| m1137_4(unknown) = Chi : total:m1137_2, partial:m1137_3 -# 1139| r1139_1(glval) = VariableAddress[i] : -# 1139| r1139_2(int) = Constant[0] : -# 1139| m1139_3(int) = Store[i] : &:r1139_1, r1139_2 +# 1139| void ExternDeclarationsInMacro() +# 1139| Block 0 +# 1139| v1139_1(void) = EnterFunction : +# 1139| m1139_2(unknown) = AliasedDefinition : +# 1139| m1139_3(unknown) = InitializeNonLocal : +# 1139| m1139_4(unknown) = Chi : total:m1139_2, partial:m1139_3 +# 1141| r1141_1(glval) = VariableAddress[i] : +# 1141| r1141_2(int) = Constant[0] : +# 1141| m1141_3(int) = Store[i] : &:r1141_1, r1141_2 #-----| Goto -> Block 1 -# 1139| Block 1 -# 1139| m1139_4(int) = Phi : from 0:m1139_3, from 2:m1139_14 -# 1139| r1139_5(glval) = VariableAddress[i] : -# 1139| r1139_6(int) = Load[i] : &:r1139_5, m1139_4 -# 1139| r1139_7(int) = Constant[10] : -# 1139| r1139_8(bool) = CompareLT : r1139_6, r1139_7 -# 1139| v1139_9(void) = ConditionalBranch : r1139_8 +# 1141| Block 1 +# 1141| m1141_4(int) = Phi : from 0:m1141_3, from 2:m1141_14 +# 1141| r1141_5(glval) = VariableAddress[i] : +# 1141| r1141_6(int) = Load[i] : &:r1141_5, m1141_4 +# 1141| r1141_7(int) = Constant[10] : +# 1141| r1141_8(bool) = CompareLT : r1141_6, r1141_7 +# 1141| v1141_9(void) = ConditionalBranch : r1141_8 #-----| False -> Block 3 #-----| True -> Block 2 -# 1139| Block 2 -# 1139| r1139_10(glval) = VariableAddress[i] : -# 1139| r1139_11(int) = Load[i] : &:r1139_10, m1139_4 -# 1139| r1139_12(int) = Constant[1] : -# 1139| r1139_13(int) = Add : r1139_11, r1139_12 -# 1139| m1139_14(int) = Store[i] : &:r1139_10, r1139_13 +# 1141| Block 2 +# 1141| r1141_10(glval) = VariableAddress[i] : +# 1141| r1141_11(int) = Load[i] : &:r1141_10, m1141_4 +# 1141| r1141_12(int) = Constant[1] : +# 1141| r1141_13(int) = Add : r1141_11, r1141_12 +# 1141| m1141_14(int) = Store[i] : &:r1141_10, r1141_13 #-----| Goto (back edge) -> Block 1 -# 1139| Block 3 -# 1139| v1139_15(void) = NoOp : -# 1140| v1140_1(void) = NoOp : -# 1137| v1137_5(void) = ReturnVoid : -# 1137| v1137_6(void) = AliasedUse : m1137_3 -# 1137| v1137_7(void) = ExitFunction : +# 1141| Block 3 +# 1141| v1141_15(void) = NoOp : +# 1142| v1142_1(void) = NoOp : +# 1139| v1139_5(void) = ReturnVoid : +# 1139| v1139_6(void) = AliasedUse : m1139_3 +# 1139| v1139_7(void) = ExitFunction : -# 1142| void TryCatchNoCatchAny(bool) -# 1142| Block 0 -# 1142| v1142_1(void) = EnterFunction : -# 1142| m1142_2(unknown) = AliasedDefinition : -# 1142| m1142_3(unknown) = InitializeNonLocal : -# 1142| m1142_4(unknown) = Chi : total:m1142_2, partial:m1142_3 -# 1142| r1142_5(glval) = VariableAddress[b] : -# 1142| m1142_6(bool) = InitializeParameter[b] : &:r1142_5 -# 1144| r1144_1(glval) = VariableAddress[x] : -# 1144| r1144_2(int) = Constant[5] : -# 1144| m1144_3(int) = Store[x] : &:r1144_1, r1144_2 -# 1145| r1145_1(glval) = VariableAddress[b] : -# 1145| r1145_2(bool) = Load[b] : &:r1145_1, m1142_6 -# 1145| v1145_3(void) = ConditionalBranch : r1145_2 +# 1144| void TryCatchNoCatchAny(bool) +# 1144| Block 0 +# 1144| v1144_1(void) = EnterFunction : +# 1144| m1144_2(unknown) = AliasedDefinition : +# 1144| m1144_3(unknown) = InitializeNonLocal : +# 1144| m1144_4(unknown) = Chi : total:m1144_2, partial:m1144_3 +# 1144| r1144_5(glval) = VariableAddress[b] : +# 1144| m1144_6(bool) = InitializeParameter[b] : &:r1144_5 +# 1146| r1146_1(glval) = VariableAddress[x] : +# 1146| r1146_2(int) = Constant[5] : +# 1146| m1146_3(int) = Store[x] : &:r1146_1, r1146_2 +# 1147| r1147_1(glval) = VariableAddress[b] : +# 1147| r1147_2(bool) = Load[b] : &:r1147_1, m1144_6 +# 1147| v1147_3(void) = ConditionalBranch : r1147_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 1142| Block 1 -# 1142| m1142_7(unknown) = Phi : from 2:~m1142_10, from 10:~m1142_4 -# 1142| v1142_8(void) = AliasedUse : ~m1142_7 -# 1142| v1142_9(void) = ExitFunction : +# 1144| Block 1 +# 1144| m1144_7(unknown) = Phi : from 2:~m1144_10, from 10:~m1144_4 +# 1144| v1144_8(void) = AliasedUse : ~m1144_7 +# 1144| v1144_9(void) = ExitFunction : -# 1142| Block 2 -# 1142| m1142_10(unknown) = Phi : from 7:~m1154_8, from 8:~m1142_4 -# 1142| v1142_11(void) = Unwind : +# 1144| Block 2 +# 1144| m1144_10(unknown) = Phi : from 7:~m1156_8, from 8:~m1144_4 +# 1144| v1144_11(void) = Unwind : #-----| Goto -> Block 1 -# 1146| Block 3 -# 1146| r1146_1(glval) = VariableAddress[#throw1146:7] : -# 1146| r1146_2(glval) = StringConstant["string literal"] : -# 1146| r1146_3(char *) = Convert : r1146_2 -# 1146| m1146_4(char *) = Store[#throw1146:7] : &:r1146_1, r1146_3 -# 1146| v1146_5(void) = ThrowValue : &:r1146_1, m1146_4 +# 1148| Block 3 +# 1148| r1148_1(glval) = VariableAddress[#throw1148:7] : +# 1148| r1148_2(glval) = StringConstant["string literal"] : +# 1148| r1148_3(char *) = Convert : r1148_2 +# 1148| m1148_4(char *) = Store[#throw1148:7] : &:r1148_1, r1148_3 +# 1148| v1148_5(void) = ThrowValue : &:r1148_1, m1148_4 #-----| Exception -> Block 6 -# 1148| Block 4 -# 1148| r1148_1(glval) = VariableAddress[x] : -# 1148| r1148_2(int) = Load[x] : &:r1148_1, m1144_3 -# 1148| r1148_3(int) = Constant[2] : -# 1148| r1148_4(bool) = CompareLT : r1148_2, r1148_3 -# 1148| v1148_5(void) = ConditionalBranch : r1148_4 +# 1150| Block 4 +# 1150| r1150_1(glval) = VariableAddress[x] : +# 1150| r1150_2(int) = Load[x] : &:r1150_1, m1146_3 +# 1150| r1150_3(int) = Constant[2] : +# 1150| r1150_4(bool) = CompareLT : r1150_2, r1150_3 +# 1150| v1150_5(void) = ConditionalBranch : r1150_4 #-----| False -> Block 5 #-----| True -> Block 11 -# 1151| Block 5 -# 1151| r1151_1(int) = Constant[7] : -# 1151| r1151_2(glval) = VariableAddress[x] : -# 1151| m1151_3(int) = Store[x] : &:r1151_2, r1151_1 +# 1153| Block 5 +# 1153| r1153_1(int) = Constant[7] : +# 1153| r1153_2(glval) = VariableAddress[x] : +# 1153| m1153_3(int) = Store[x] : &:r1153_2, r1153_1 #-----| Goto -> Block 10 -# 1153| Block 6 -# 1153| v1153_1(void) = CatchByType[const char *] : +# 1155| Block 6 +# 1155| v1155_1(void) = CatchByType[const char *] : #-----| Exception -> Block 8 #-----| Goto -> Block 7 -# 1153| Block 7 -# 1153| r1153_2(glval) = VariableAddress[s] : -# 1153| m1153_3(char *) = InitializeParameter[s] : &:r1153_2 -# 1153| r1153_4(char *) = Load[s] : &:r1153_2, m1153_3 -# 1153| m1153_5(unknown) = InitializeIndirection[s] : &:r1153_4 -# 1154| r1154_1(glval) = VariableAddress[#throw1154:5] : -# 1154| m1154_2(String) = Uninitialized[#throw1154:5] : &:r1154_1 -# 1154| r1154_3(glval) = FunctionAddress[String] : -# 1154| r1154_4(glval) = VariableAddress[s] : -# 1154| r1154_5(char *) = Load[s] : &:r1154_4, m1153_3 -# 1154| v1154_6(void) = Call[String] : func:r1154_3, this:r1154_1, 0:r1154_5 -# 1154| m1154_7(unknown) = ^CallSideEffect : ~m1142_4 -# 1154| m1154_8(unknown) = Chi : total:m1142_4, partial:m1154_7 -# 1154| v1154_9(void) = ^BufferReadSideEffect[0] : &:r1154_5, ~m1153_5 -# 1154| m1154_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1154_1 -# 1154| m1154_11(String) = Chi : total:m1154_2, partial:m1154_10 -# 1154| v1154_12(void) = ThrowValue : &:r1154_1, m1154_11 +# 1155| Block 7 +# 1155| r1155_2(glval) = VariableAddress[s] : +# 1155| m1155_3(char *) = InitializeParameter[s] : &:r1155_2 +# 1155| r1155_4(char *) = Load[s] : &:r1155_2, m1155_3 +# 1155| m1155_5(unknown) = InitializeIndirection[s] : &:r1155_4 +# 1156| r1156_1(glval) = VariableAddress[#throw1156:5] : +# 1156| m1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 +# 1156| r1156_3(glval) = FunctionAddress[String] : +# 1156| r1156_4(glval) = VariableAddress[s] : +# 1156| r1156_5(char *) = Load[s] : &:r1156_4, m1155_3 +# 1156| v1156_6(void) = Call[String] : func:r1156_3, this:r1156_1, 0:r1156_5 +# 1156| m1156_7(unknown) = ^CallSideEffect : ~m1144_4 +# 1156| m1156_8(unknown) = Chi : total:m1144_4, partial:m1156_7 +# 1156| v1156_9(void) = ^BufferReadSideEffect[0] : &:r1156_5, ~m1155_5 +# 1156| m1156_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 +# 1156| m1156_11(String) = Chi : total:m1156_2, partial:m1156_10 +# 1156| v1156_12(void) = ThrowValue : &:r1156_1, m1156_11 #-----| Exception -> Block 2 -# 1156| Block 8 -# 1156| v1156_1(void) = CatchByType[const String &] : +# 1158| Block 8 +# 1158| v1158_1(void) = CatchByType[const String &] : #-----| Exception -> Block 2 #-----| Goto -> Block 9 -# 1156| Block 9 -# 1156| r1156_2(glval) = VariableAddress[e] : -# 1156| m1156_3(String &) = InitializeParameter[e] : &:r1156_2 -# 1156| r1156_4(String &) = Load[e] : &:r1156_2, m1156_3 -# 1156| m1156_5(unknown) = InitializeIndirection[e] : &:r1156_4 -# 1156| v1156_6(void) = NoOp : +# 1158| Block 9 +# 1158| r1158_2(glval) = VariableAddress[e] : +# 1158| m1158_3(String &) = InitializeParameter[e] : &:r1158_2 +# 1158| r1158_4(String &) = Load[e] : &:r1158_2, m1158_3 +# 1158| m1158_5(unknown) = InitializeIndirection[e] : &:r1158_4 +# 1158| v1158_6(void) = NoOp : #-----| Goto -> Block 10 -# 1158| Block 10 -# 1158| v1158_1(void) = NoOp : -# 1142| v1142_12(void) = ReturnVoid : +# 1160| Block 10 +# 1160| v1160_1(void) = NoOp : +# 1144| v1144_12(void) = ReturnVoid : #-----| Goto -> Block 1 -# 1142| Block 11 -# 1142| v1142_13(void) = Unreached : +# 1144| Block 11 +# 1144| v1144_13(void) = Unreached : -# 1162| void VectorTypes(int) -# 1162| Block 0 -# 1162| v1162_1(void) = EnterFunction : -# 1162| m1162_2(unknown) = AliasedDefinition : -# 1162| m1162_3(unknown) = InitializeNonLocal : -# 1162| m1162_4(unknown) = Chi : total:m1162_2, partial:m1162_3 -# 1162| r1162_5(glval) = VariableAddress[i] : -# 1162| m1162_6(int) = InitializeParameter[i] : &:r1162_5 -# 1163| r1163_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1163| m1163_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1163_1 -# 1163| r1163_3(int) = Constant[0] : -# 1163| r1163_4(glval) = PointerAdd[4] : r1163_1, r1163_3 -# 1163| r1163_5(int) = Constant[0] : -# 1163| m1163_6(int) = Store[?] : &:r1163_4, r1163_5 -# 1163| m1163_7(__attribute((vector_size(16UL))) int) = Chi : total:m1163_2, partial:m1163_6 -# 1163| r1163_8(int) = Constant[1] : -# 1163| r1163_9(glval) = PointerAdd[4] : r1163_1, r1163_8 -# 1163| r1163_10(int) = Constant[1] : -# 1163| m1163_11(int) = Store[?] : &:r1163_9, r1163_10 -# 1163| m1163_12(__attribute((vector_size(16UL))) int) = Chi : total:m1163_7, partial:m1163_11 -# 1163| r1163_13(int) = Constant[2] : -# 1163| r1163_14(glval) = PointerAdd[4] : r1163_1, r1163_13 -# 1163| r1163_15(int) = Constant[2] : -# 1163| m1163_16(int) = Store[?] : &:r1163_14, r1163_15 -# 1163| m1163_17(__attribute((vector_size(16UL))) int) = Chi : total:m1163_12, partial:m1163_16 -# 1163| r1163_18(int) = Constant[3] : -# 1163| r1163_19(glval) = PointerAdd[4] : r1163_1, r1163_18 -# 1163| r1163_20(int) = Constant[3] : -# 1163| m1163_21(int) = Store[?] : &:r1163_19, r1163_20 -# 1163| m1163_22(__attribute((vector_size(16UL))) int) = Chi : total:m1163_17, partial:m1163_21 -# 1164| r1164_1(glval) = VariableAddress[x] : -# 1164| r1164_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1164| r1164_3(glval) = VariableAddress[i] : -# 1164| r1164_4(int) = Load[i] : &:r1164_3, m1162_6 -# 1164| r1164_5(glval) = PointerAdd[4] : r1164_2, r1164_4 -# 1164| r1164_6(int) = Load[?] : &:r1164_5, ~m1163_22 -# 1164| m1164_7(int) = Store[x] : &:r1164_1, r1164_6 -# 1165| r1165_1(glval) = VariableAddress[x] : -# 1165| r1165_2(int) = Load[x] : &:r1165_1, m1164_7 -# 1165| r1165_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1165| r1165_4(glval) = VariableAddress[i] : -# 1165| r1165_5(int) = Load[i] : &:r1165_4, m1162_6 -# 1165| r1165_6(glval) = PointerAdd[4] : r1165_3, r1165_5 -# 1165| m1165_7(int) = Store[?] : &:r1165_6, r1165_2 -# 1165| m1165_8(__attribute((vector_size(16UL))) int) = Chi : total:m1163_22, partial:m1165_7 -# 1166| r1166_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1164| void VectorTypes(int) +# 1164| Block 0 +# 1164| v1164_1(void) = EnterFunction : +# 1164| m1164_2(unknown) = AliasedDefinition : +# 1164| m1164_3(unknown) = InitializeNonLocal : +# 1164| m1164_4(unknown) = Chi : total:m1164_2, partial:m1164_3 +# 1164| r1164_5(glval) = VariableAddress[i] : +# 1164| m1164_6(int) = InitializeParameter[i] : &:r1164_5 +# 1165| r1165_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1165| m1165_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1165_1 +# 1165| r1165_3(int) = Constant[0] : +# 1165| r1165_4(glval) = PointerAdd[4] : r1165_1, r1165_3 +# 1165| r1165_5(int) = Constant[0] : +# 1165| m1165_6(int) = Store[?] : &:r1165_4, r1165_5 +# 1165| m1165_7(__attribute((vector_size(16UL))) int) = Chi : total:m1165_2, partial:m1165_6 +# 1165| r1165_8(int) = Constant[1] : +# 1165| r1165_9(glval) = PointerAdd[4] : r1165_1, r1165_8 +# 1165| r1165_10(int) = Constant[1] : +# 1165| m1165_11(int) = Store[?] : &:r1165_9, r1165_10 +# 1165| m1165_12(__attribute((vector_size(16UL))) int) = Chi : total:m1165_7, partial:m1165_11 +# 1165| r1165_13(int) = Constant[2] : +# 1165| r1165_14(glval) = PointerAdd[4] : r1165_1, r1165_13 +# 1165| r1165_15(int) = Constant[2] : +# 1165| m1165_16(int) = Store[?] : &:r1165_14, r1165_15 +# 1165| m1165_17(__attribute((vector_size(16UL))) int) = Chi : total:m1165_12, partial:m1165_16 +# 1165| r1165_18(int) = Constant[3] : +# 1165| r1165_19(glval) = PointerAdd[4] : r1165_1, r1165_18 +# 1165| r1165_20(int) = Constant[3] : +# 1165| m1165_21(int) = Store[?] : &:r1165_19, r1165_20 +# 1165| m1165_22(__attribute((vector_size(16UL))) int) = Chi : total:m1165_17, partial:m1165_21 +# 1166| r1166_1(glval) = VariableAddress[x] : # 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_2, m1165_8 -# 1166| r1166_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_4, m1165_8 -# 1166| r1166_6(int) = Constant[3] : -# 1166| r1166_7(int) = Constant[2] : -# 1166| r1166_8(int) = Constant[1] : -# 1166| r1166_9(int) = Constant[0] : -# 1166| r1166_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1166_3, 1:r1166_5, 2:r1166_6, 3:r1166_7, 4:r1166_8, 5:r1166_9 -# 1166| m1166_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1166_1, r1166_10 -# 1167| r1167_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| r1167_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1167_1, m1165_8 -# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1167| r1167_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1167_3, m1166_11 -# 1167| r1167_5(__attribute((vector_size(16UL))) int) = Add : r1167_2, r1167_4 -# 1167| r1167_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| m1167_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1167_6, r1167_5 -# 1168| v1168_1(void) = NoOp : -# 1162| v1162_7(void) = ReturnVoid : -# 1162| v1162_8(void) = AliasedUse : m1162_3 -# 1162| v1162_9(void) = ExitFunction : +# 1166| r1166_3(glval) = VariableAddress[i] : +# 1166| r1166_4(int) = Load[i] : &:r1166_3, m1164_6 +# 1166| r1166_5(glval) = PointerAdd[4] : r1166_2, r1166_4 +# 1166| r1166_6(int) = Load[?] : &:r1166_5, ~m1165_22 +# 1166| m1166_7(int) = Store[x] : &:r1166_1, r1166_6 +# 1167| r1167_1(glval) = VariableAddress[x] : +# 1167| r1167_2(int) = Load[x] : &:r1167_1, m1166_7 +# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1167| r1167_4(glval) = VariableAddress[i] : +# 1167| r1167_5(int) = Load[i] : &:r1167_4, m1164_6 +# 1167| r1167_6(glval) = PointerAdd[4] : r1167_3, r1167_5 +# 1167| m1167_7(int) = Store[?] : &:r1167_6, r1167_2 +# 1167| m1167_8(__attribute((vector_size(16UL))) int) = Chi : total:m1165_22, partial:m1167_7 +# 1168| r1168_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1168| r1168_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_2, m1167_8 +# 1168| r1168_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_4, m1167_8 +# 1168| r1168_6(int) = Constant[3] : +# 1168| r1168_7(int) = Constant[2] : +# 1168| r1168_8(int) = Constant[1] : +# 1168| r1168_9(int) = Constant[0] : +# 1168| r1168_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1168_3, 1:r1168_5, 2:r1168_6, 3:r1168_7, 4:r1168_8, 5:r1168_9 +# 1168| m1168_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1168_1, r1168_10 +# 1169| r1169_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| r1169_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1169_1, m1167_8 +# 1169| r1169_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1169| r1169_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1169_3, m1168_11 +# 1169| r1169_5(__attribute((vector_size(16UL))) int) = Add : r1169_2, r1169_4 +# 1169| r1169_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| m1169_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1169_6, r1169_5 +# 1170| v1170_1(void) = NoOp : +# 1164| v1164_7(void) = ReturnVoid : +# 1164| v1164_8(void) = AliasedUse : m1164_3 +# 1164| v1164_9(void) = ExitFunction : -# 1172| int ModeledCallTarget(int) -# 1172| Block 0 -# 1172| v1172_1(void) = EnterFunction : -# 1172| m1172_2(unknown) = AliasedDefinition : -# 1172| m1172_3(unknown) = InitializeNonLocal : -# 1172| m1172_4(unknown) = Chi : total:m1172_2, partial:m1172_3 -# 1172| r1172_5(glval) = VariableAddress[x] : -# 1172| m1172_6(int) = InitializeParameter[x] : &:r1172_5 -# 1173| r1173_1(glval) = VariableAddress[y] : -# 1173| m1173_2(int) = Uninitialized[y] : &:r1173_1 -# 1174| r1174_1(glval) = FunctionAddress[memcpy] : -# 1174| r1174_2(glval) = VariableAddress[y] : -# 1174| r1174_3(int *) = CopyValue : r1174_2 -# 1174| r1174_4(void *) = Convert : r1174_3 +# 1174| int ModeledCallTarget(int) +# 1174| Block 0 +# 1174| v1174_1(void) = EnterFunction : +# 1174| m1174_2(unknown) = AliasedDefinition : +# 1174| m1174_3(unknown) = InitializeNonLocal : +# 1174| m1174_4(unknown) = Chi : total:m1174_2, partial:m1174_3 # 1174| r1174_5(glval) = VariableAddress[x] : -# 1174| r1174_6(int *) = CopyValue : r1174_5 -# 1174| r1174_7(void *) = Convert : r1174_6 -# 1174| r1174_8(int) = Constant[4] : -# 1174| r1174_9(void *) = Call[memcpy] : func:r1174_1, 0:r1174_4, 1:r1174_7, 2:r1174_8 -# 1174| v1174_10(void) = ^SizedBufferReadSideEffect[1] : &:r1174_7, r1174_8, ~m1172_6 -# 1174| m1174_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1174_4, r1174_8 -# 1174| m1174_12(int) = Chi : total:m1173_2, partial:m1174_11 -# 1175| r1175_1(glval) = VariableAddress[#return] : -# 1175| r1175_2(glval) = VariableAddress[y] : -# 1175| r1175_3(int) = Load[y] : &:r1175_2, m1174_12 -# 1175| m1175_4(int) = Store[#return] : &:r1175_1, r1175_3 -# 1172| r1172_7(glval) = VariableAddress[#return] : -# 1172| v1172_8(void) = ReturnValue : &:r1172_7, m1175_4 -# 1172| v1172_9(void) = AliasedUse : m1172_3 -# 1172| v1172_10(void) = ExitFunction : +# 1174| m1174_6(int) = InitializeParameter[x] : &:r1174_5 +# 1175| r1175_1(glval) = VariableAddress[y] : +# 1175| m1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval) = FunctionAddress[memcpy] : +# 1176| r1176_2(glval) = VariableAddress[y] : +# 1176| r1176_3(int *) = CopyValue : r1176_2 +# 1176| r1176_4(void *) = Convert : r1176_3 +# 1176| r1176_5(glval) = VariableAddress[x] : +# 1176| r1176_6(int *) = CopyValue : r1176_5 +# 1176| r1176_7(void *) = Convert : r1176_6 +# 1176| r1176_8(int) = Constant[4] : +# 1176| r1176_9(void *) = Call[memcpy] : func:r1176_1, 0:r1176_4, 1:r1176_7, 2:r1176_8 +# 1176| v1176_10(void) = ^SizedBufferReadSideEffect[1] : &:r1176_7, r1176_8, ~m1174_6 +# 1176| m1176_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1176_4, r1176_8 +# 1176| m1176_12(int) = Chi : total:m1175_2, partial:m1176_11 +# 1177| r1177_1(glval) = VariableAddress[#return] : +# 1177| r1177_2(glval) = VariableAddress[y] : +# 1177| r1177_3(int) = Load[y] : &:r1177_2, m1176_12 +# 1177| m1177_4(int) = Store[#return] : &:r1177_1, r1177_3 +# 1174| r1174_7(glval) = VariableAddress[#return] : +# 1174| v1174_8(void) = ReturnValue : &:r1174_7, m1177_4 +# 1174| v1174_9(void) = AliasedUse : m1174_3 +# 1174| v1174_10(void) = ExitFunction : -# 1178| String ReturnObjectImpl() -# 1178| Block 0 -# 1178| v1178_1(void) = EnterFunction : -# 1178| m1178_2(unknown) = AliasedDefinition : -# 1178| m1178_3(unknown) = InitializeNonLocal : -# 1178| m1178_4(unknown) = Chi : total:m1178_2, partial:m1178_3 -# 1179| r1179_1(glval) = VariableAddress[#return] : -# 1179| m1179_2(String) = Uninitialized[#return] : &:r1179_1 -# 1179| r1179_3(glval) = FunctionAddress[String] : -# 1179| r1179_4(glval) = StringConstant["foo"] : -# 1179| r1179_5(char *) = Convert : r1179_4 -# 1179| v1179_6(void) = Call[String] : func:r1179_3, this:r1179_1, 0:r1179_5 -# 1179| m1179_7(unknown) = ^CallSideEffect : ~m1178_4 -# 1179| m1179_8(unknown) = Chi : total:m1178_4, partial:m1179_7 -# 1179| v1179_9(void) = ^BufferReadSideEffect[0] : &:r1179_5, ~m1178_3 -# 1179| m1179_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1179_1 -# 1179| m1179_11(String) = Chi : total:m1179_2, partial:m1179_10 -# 1178| r1178_5(glval) = VariableAddress[#return] : -# 1178| v1178_6(void) = ReturnValue : &:r1178_5, m1179_11 -# 1178| v1178_7(void) = AliasedUse : ~m1179_8 -# 1178| v1178_8(void) = ExitFunction : +# 1180| String ReturnObjectImpl() +# 1180| Block 0 +# 1180| v1180_1(void) = EnterFunction : +# 1180| m1180_2(unknown) = AliasedDefinition : +# 1180| m1180_3(unknown) = InitializeNonLocal : +# 1180| m1180_4(unknown) = Chi : total:m1180_2, partial:m1180_3 +# 1181| r1181_1(glval) = VariableAddress[#return] : +# 1181| m1181_2(String) = Uninitialized[#return] : &:r1181_1 +# 1181| r1181_3(glval) = FunctionAddress[String] : +# 1181| r1181_4(glval) = StringConstant["foo"] : +# 1181| r1181_5(char *) = Convert : r1181_4 +# 1181| v1181_6(void) = Call[String] : func:r1181_3, this:r1181_1, 0:r1181_5 +# 1181| m1181_7(unknown) = ^CallSideEffect : ~m1180_4 +# 1181| m1181_8(unknown) = Chi : total:m1180_4, partial:m1181_7 +# 1181| v1181_9(void) = ^BufferReadSideEffect[0] : &:r1181_5, ~m1180_3 +# 1181| m1181_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 +# 1181| m1181_11(String) = Chi : total:m1181_2, partial:m1181_10 +# 1180| r1180_5(glval) = VariableAddress[#return] : +# 1180| v1180_6(void) = ReturnValue : &:r1180_5, m1181_11 +# 1180| v1180_7(void) = AliasedUse : ~m1181_8 +# 1180| v1180_8(void) = ExitFunction : -# 1182| void switch1Case(int) -# 1182| Block 0 -# 1182| v1182_1(void) = EnterFunction : -# 1182| m1182_2(unknown) = AliasedDefinition : -# 1182| m1182_3(unknown) = InitializeNonLocal : -# 1182| m1182_4(unknown) = Chi : total:m1182_2, partial:m1182_3 -# 1182| r1182_5(glval) = VariableAddress[x] : -# 1182| m1182_6(int) = InitializeParameter[x] : &:r1182_5 -# 1183| r1183_1(glval) = VariableAddress[y] : -# 1183| r1183_2(int) = Constant[0] : -# 1183| m1183_3(int) = Store[y] : &:r1183_1, r1183_2 -# 1184| r1184_1(glval) = VariableAddress[x] : -# 1184| r1184_2(int) = Load[x] : &:r1184_1, m1182_6 -# 1184| v1184_3(void) = Switch : r1184_2 +# 1184| void switch1Case(int) +# 1184| Block 0 +# 1184| v1184_1(void) = EnterFunction : +# 1184| m1184_2(unknown) = AliasedDefinition : +# 1184| m1184_3(unknown) = InitializeNonLocal : +# 1184| m1184_4(unknown) = Chi : total:m1184_2, partial:m1184_3 +# 1184| r1184_5(glval) = VariableAddress[x] : +# 1184| m1184_6(int) = InitializeParameter[x] : &:r1184_5 +# 1185| r1185_1(glval) = VariableAddress[y] : +# 1185| r1185_2(int) = Constant[0] : +# 1185| m1185_3(int) = Store[y] : &:r1185_1, r1185_2 +# 1186| r1186_1(glval) = VariableAddress[x] : +# 1186| r1186_2(int) = Load[x] : &:r1186_1, m1184_6 +# 1186| v1186_3(void) = Switch : r1186_2 #-----| Case[1] -> Block 1 #-----| Default -> Block 2 -# 1185| Block 1 -# 1185| v1185_1(void) = NoOp : -# 1186| r1186_1(int) = Constant[2] : -# 1186| r1186_2(glval) = VariableAddress[y] : -# 1186| m1186_3(int) = Store[y] : &:r1186_2, r1186_1 +# 1187| Block 1 +# 1187| v1187_1(void) = NoOp : +# 1188| r1188_1(int) = Constant[2] : +# 1188| r1188_2(glval) = VariableAddress[y] : +# 1188| m1188_3(int) = Store[y] : &:r1188_2, r1188_1 #-----| Goto -> Block 2 -# 1188| Block 2 -# 1188| m1188_1(int) = Phi : from 0:m1183_3, from 1:m1186_3 -# 1188| r1188_2(glval) = VariableAddress[z] : -# 1188| r1188_3(glval) = VariableAddress[y] : -# 1188| r1188_4(int) = Load[y] : &:r1188_3, m1188_1 -# 1188| m1188_5(int) = Store[z] : &:r1188_2, r1188_4 -# 1189| v1189_1(void) = NoOp : -# 1182| v1182_7(void) = ReturnVoid : -# 1182| v1182_8(void) = AliasedUse : m1182_3 -# 1182| v1182_9(void) = ExitFunction : +# 1190| Block 2 +# 1190| m1190_1(int) = Phi : from 0:m1185_3, from 1:m1188_3 +# 1190| r1190_2(glval) = VariableAddress[z] : +# 1190| r1190_3(glval) = VariableAddress[y] : +# 1190| r1190_4(int) = Load[y] : &:r1190_3, m1190_1 +# 1190| m1190_5(int) = Store[z] : &:r1190_2, r1190_4 +# 1191| v1191_1(void) = NoOp : +# 1184| v1184_7(void) = ReturnVoid : +# 1184| v1184_8(void) = AliasedUse : m1184_3 +# 1184| v1184_9(void) = ExitFunction : -# 1191| void switch2Case_fallthrough(int) -# 1191| Block 0 -# 1191| v1191_1(void) = EnterFunction : -# 1191| m1191_2(unknown) = AliasedDefinition : -# 1191| m1191_3(unknown) = InitializeNonLocal : -# 1191| m1191_4(unknown) = Chi : total:m1191_2, partial:m1191_3 -# 1191| r1191_5(glval) = VariableAddress[x] : -# 1191| m1191_6(int) = InitializeParameter[x] : &:r1191_5 -# 1192| r1192_1(glval) = VariableAddress[y] : -# 1192| r1192_2(int) = Constant[0] : -# 1192| m1192_3(int) = Store[y] : &:r1192_1, r1192_2 -# 1193| r1193_1(glval) = VariableAddress[x] : -# 1193| r1193_2(int) = Load[x] : &:r1193_1, m1191_6 -# 1193| v1193_3(void) = Switch : r1193_2 +# 1193| void switch2Case_fallthrough(int) +# 1193| Block 0 +# 1193| v1193_1(void) = EnterFunction : +# 1193| m1193_2(unknown) = AliasedDefinition : +# 1193| m1193_3(unknown) = InitializeNonLocal : +# 1193| m1193_4(unknown) = Chi : total:m1193_2, partial:m1193_3 +# 1193| r1193_5(glval) = VariableAddress[x] : +# 1193| m1193_6(int) = InitializeParameter[x] : &:r1193_5 +# 1194| r1194_1(glval) = VariableAddress[y] : +# 1194| r1194_2(int) = Constant[0] : +# 1194| m1194_3(int) = Store[y] : &:r1194_1, r1194_2 +# 1195| r1195_1(glval) = VariableAddress[x] : +# 1195| r1195_2(int) = Load[x] : &:r1195_1, m1193_6 +# 1195| v1195_3(void) = Switch : r1195_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1194| Block 1 -# 1194| v1194_1(void) = NoOp : -# 1195| r1195_1(int) = Constant[2] : -# 1195| r1195_2(glval) = VariableAddress[y] : -# 1195| m1195_3(int) = Store[y] : &:r1195_2, r1195_1 -#-----| Goto -> Block 2 - -# 1196| Block 2 +# 1196| Block 1 # 1196| v1196_1(void) = NoOp : -# 1197| r1197_1(int) = Constant[3] : +# 1197| r1197_1(int) = Constant[2] : # 1197| r1197_2(glval) = VariableAddress[y] : # 1197| m1197_3(int) = Store[y] : &:r1197_2, r1197_1 +#-----| Goto -> Block 2 + +# 1198| Block 2 +# 1198| v1198_1(void) = NoOp : +# 1199| r1199_1(int) = Constant[3] : +# 1199| r1199_2(glval) = VariableAddress[y] : +# 1199| m1199_3(int) = Store[y] : &:r1199_2, r1199_1 #-----| Goto -> Block 3 -# 1199| Block 3 -# 1199| m1199_1(int) = Phi : from 0:m1192_3, from 2:m1197_3 -# 1199| r1199_2(glval) = VariableAddress[z] : -# 1199| r1199_3(glval) = VariableAddress[y] : -# 1199| r1199_4(int) = Load[y] : &:r1199_3, m1199_1 -# 1199| m1199_5(int) = Store[z] : &:r1199_2, r1199_4 -# 1200| v1200_1(void) = NoOp : -# 1191| v1191_7(void) = ReturnVoid : -# 1191| v1191_8(void) = AliasedUse : m1191_3 -# 1191| v1191_9(void) = ExitFunction : +# 1201| Block 3 +# 1201| m1201_1(int) = Phi : from 0:m1194_3, from 2:m1199_3 +# 1201| r1201_2(glval) = VariableAddress[z] : +# 1201| r1201_3(glval) = VariableAddress[y] : +# 1201| r1201_4(int) = Load[y] : &:r1201_3, m1201_1 +# 1201| m1201_5(int) = Store[z] : &:r1201_2, r1201_4 +# 1202| v1202_1(void) = NoOp : +# 1193| v1193_7(void) = ReturnVoid : +# 1193| v1193_8(void) = AliasedUse : m1193_3 +# 1193| v1193_9(void) = ExitFunction : -# 1202| void switch2Case(int) -# 1202| Block 0 -# 1202| v1202_1(void) = EnterFunction : -# 1202| m1202_2(unknown) = AliasedDefinition : -# 1202| m1202_3(unknown) = InitializeNonLocal : -# 1202| m1202_4(unknown) = Chi : total:m1202_2, partial:m1202_3 -# 1202| r1202_5(glval) = VariableAddress[x] : -# 1202| m1202_6(int) = InitializeParameter[x] : &:r1202_5 -# 1203| r1203_1(glval) = VariableAddress[y] : -# 1203| r1203_2(int) = Constant[0] : -# 1203| m1203_3(int) = Store[y] : &:r1203_1, r1203_2 -# 1204| r1204_1(glval) = VariableAddress[x] : -# 1204| r1204_2(int) = Load[x] : &:r1204_1, m1202_6 -# 1204| v1204_3(void) = Switch : r1204_2 +# 1204| void switch2Case(int) +# 1204| Block 0 +# 1204| v1204_1(void) = EnterFunction : +# 1204| m1204_2(unknown) = AliasedDefinition : +# 1204| m1204_3(unknown) = InitializeNonLocal : +# 1204| m1204_4(unknown) = Chi : total:m1204_2, partial:m1204_3 +# 1204| r1204_5(glval) = VariableAddress[x] : +# 1204| m1204_6(int) = InitializeParameter[x] : &:r1204_5 +# 1205| r1205_1(glval) = VariableAddress[y] : +# 1205| r1205_2(int) = Constant[0] : +# 1205| m1205_3(int) = Store[y] : &:r1205_1, r1205_2 +# 1206| r1206_1(glval) = VariableAddress[x] : +# 1206| r1206_2(int) = Load[x] : &:r1206_1, m1204_6 +# 1206| v1206_3(void) = Switch : r1206_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1205| Block 1 -# 1205| v1205_1(void) = NoOp : -# 1206| r1206_1(int) = Constant[2] : -# 1206| r1206_2(glval) = VariableAddress[y] : -# 1206| m1206_3(int) = Store[y] : &:r1206_2, r1206_1 +# 1207| Block 1 # 1207| v1207_1(void) = NoOp : +# 1208| r1208_1(int) = Constant[2] : +# 1208| r1208_2(glval) = VariableAddress[y] : +# 1208| m1208_3(int) = Store[y] : &:r1208_2, r1208_1 +# 1209| v1209_1(void) = NoOp : #-----| Goto -> Block 3 -# 1208| Block 2 -# 1208| v1208_1(void) = NoOp : -# 1209| r1209_1(int) = Constant[3] : -# 1209| r1209_2(glval) = VariableAddress[y] : -# 1209| m1209_3(int) = Store[y] : &:r1209_2, r1209_1 -#-----| Goto -> Block 3 - -# 1210| Block 3 -# 1210| m1210_1(int) = Phi : from 0:m1203_3, from 1:m1206_3, from 2:m1209_3 -# 1210| v1210_2(void) = NoOp : -# 1211| r1211_1(glval) = VariableAddress[z] : +# 1210| Block 2 +# 1210| v1210_1(void) = NoOp : +# 1211| r1211_1(int) = Constant[3] : # 1211| r1211_2(glval) = VariableAddress[y] : -# 1211| r1211_3(int) = Load[y] : &:r1211_2, m1210_1 -# 1211| m1211_4(int) = Store[z] : &:r1211_1, r1211_3 -# 1212| v1212_1(void) = NoOp : -# 1202| v1202_7(void) = ReturnVoid : -# 1202| v1202_8(void) = AliasedUse : m1202_3 -# 1202| v1202_9(void) = ExitFunction : +# 1211| m1211_3(int) = Store[y] : &:r1211_2, r1211_1 +#-----| Goto -> Block 3 -# 1214| void switch2Case_default(int) -# 1214| Block 0 -# 1214| v1214_1(void) = EnterFunction : -# 1214| m1214_2(unknown) = AliasedDefinition : -# 1214| m1214_3(unknown) = InitializeNonLocal : -# 1214| m1214_4(unknown) = Chi : total:m1214_2, partial:m1214_3 -# 1214| r1214_5(glval) = VariableAddress[x] : -# 1214| m1214_6(int) = InitializeParameter[x] : &:r1214_5 -# 1215| r1215_1(glval) = VariableAddress[y] : -# 1215| r1215_2(int) = Constant[0] : -# 1215| m1215_3(int) = Store[y] : &:r1215_1, r1215_2 -# 1216| r1216_1(glval) = VariableAddress[x] : -# 1216| r1216_2(int) = Load[x] : &:r1216_1, m1214_6 -# 1216| v1216_3(void) = Switch : r1216_2 +# 1212| Block 3 +# 1212| m1212_1(int) = Phi : from 0:m1205_3, from 1:m1208_3, from 2:m1211_3 +# 1212| v1212_2(void) = NoOp : +# 1213| r1213_1(glval) = VariableAddress[z] : +# 1213| r1213_2(glval) = VariableAddress[y] : +# 1213| r1213_3(int) = Load[y] : &:r1213_2, m1212_1 +# 1213| m1213_4(int) = Store[z] : &:r1213_1, r1213_3 +# 1214| v1214_1(void) = NoOp : +# 1204| v1204_7(void) = ReturnVoid : +# 1204| v1204_8(void) = AliasedUse : m1204_3 +# 1204| v1204_9(void) = ExitFunction : + +# 1216| void switch2Case_default(int) +# 1216| Block 0 +# 1216| v1216_1(void) = EnterFunction : +# 1216| m1216_2(unknown) = AliasedDefinition : +# 1216| m1216_3(unknown) = InitializeNonLocal : +# 1216| m1216_4(unknown) = Chi : total:m1216_2, partial:m1216_3 +# 1216| r1216_5(glval) = VariableAddress[x] : +# 1216| m1216_6(int) = InitializeParameter[x] : &:r1216_5 +# 1217| r1217_1(glval) = VariableAddress[y] : +# 1217| r1217_2(int) = Constant[0] : +# 1217| m1217_3(int) = Store[y] : &:r1217_1, r1217_2 +# 1218| r1218_1(glval) = VariableAddress[x] : +# 1218| r1218_2(int) = Load[x] : &:r1218_1, m1216_6 +# 1218| v1218_3(void) = Switch : r1218_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1217| Block 1 -# 1217| v1217_1(void) = NoOp : -# 1218| r1218_1(int) = Constant[2] : -# 1218| r1218_2(glval) = VariableAddress[y] : -# 1218| m1218_3(int) = Store[y] : &:r1218_2, r1218_1 +# 1219| Block 1 # 1219| v1219_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1221| Block 2 +# 1220| r1220_1(int) = Constant[2] : +# 1220| r1220_2(glval) = VariableAddress[y] : +# 1220| m1220_3(int) = Store[y] : &:r1220_2, r1220_1 # 1221| v1221_1(void) = NoOp : -# 1222| r1222_1(int) = Constant[3] : -# 1222| r1222_2(glval) = VariableAddress[y] : -# 1222| m1222_3(int) = Store[y] : &:r1222_2, r1222_1 +#-----| Goto -> Block 4 + +# 1223| Block 2 # 1223| v1223_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1225| Block 3 +# 1224| r1224_1(int) = Constant[3] : +# 1224| r1224_2(glval) = VariableAddress[y] : +# 1224| m1224_3(int) = Store[y] : &:r1224_2, r1224_1 # 1225| v1225_1(void) = NoOp : -# 1226| r1226_1(int) = Constant[4] : -# 1226| r1226_2(glval) = VariableAddress[y] : -# 1226| m1226_3(int) = Store[y] : &:r1226_2, r1226_1 #-----| Goto -> Block 4 -# 1227| Block 4 -# 1227| m1227_1(int) = Phi : from 1:m1218_3, from 2:m1222_3, from 3:m1226_3 -# 1227| v1227_2(void) = NoOp : -# 1228| r1228_1(glval) = VariableAddress[z] : +# 1227| Block 3 +# 1227| v1227_1(void) = NoOp : +# 1228| r1228_1(int) = Constant[4] : # 1228| r1228_2(glval) = VariableAddress[y] : -# 1228| r1228_3(int) = Load[y] : &:r1228_2, m1227_1 -# 1228| m1228_4(int) = Store[z] : &:r1228_1, r1228_3 -# 1229| v1229_1(void) = NoOp : -# 1214| v1214_7(void) = ReturnVoid : -# 1214| v1214_8(void) = AliasedUse : m1214_3 -# 1214| v1214_9(void) = ExitFunction : +# 1228| m1228_3(int) = Store[y] : &:r1228_2, r1228_1 +#-----| Goto -> Block 4 -# 1231| int staticLocalInit(int) -# 1231| Block 0 -# 1231| v1231_1(void) = EnterFunction : -# 1231| m1231_2(unknown) = AliasedDefinition : -# 1231| m1231_3(unknown) = InitializeNonLocal : -# 1231| m1231_4(unknown) = Chi : total:m1231_2, partial:m1231_3 -# 1231| r1231_5(glval) = VariableAddress[x] : -# 1231| m1231_6(int) = InitializeParameter[x] : &:r1231_5 -# 1234| r1234_1(glval) = VariableAddress[c#init] : -# 1234| r1234_2(bool) = Load[c#init] : &:r1234_1, ~m1231_3 -# 1234| v1234_3(void) = ConditionalBranch : r1234_2 -#-----| False -> Block 1 -#-----| True -> Block 2 +# 1229| Block 4 +# 1229| m1229_1(int) = Phi : from 1:m1220_3, from 2:m1224_3, from 3:m1228_3 +# 1229| v1229_2(void) = NoOp : +# 1230| r1230_1(glval) = VariableAddress[z] : +# 1230| r1230_2(glval) = VariableAddress[y] : +# 1230| r1230_3(int) = Load[y] : &:r1230_2, m1229_1 +# 1230| m1230_4(int) = Store[z] : &:r1230_1, r1230_3 +# 1231| v1231_1(void) = NoOp : +# 1216| v1216_7(void) = ReturnVoid : +# 1216| v1216_8(void) = AliasedUse : m1216_3 +# 1216| v1216_9(void) = ExitFunction : -# 1234| Block 1 -# 1234| r1234_4(glval) = VariableAddress[c] : -# 1234| r1234_5(glval) = VariableAddress[x] : -# 1234| r1234_6(int) = Load[x] : &:r1234_5, m1231_6 -# 1234| m1234_7(int) = Store[c] : &:r1234_4, r1234_6 -# 1234| m1234_8(unknown) = Chi : total:m1231_4, partial:m1234_7 -# 1234| r1234_9(bool) = Constant[1] : -# 1234| m1234_10(bool) = Store[c#init] : &:r1234_1, r1234_9 -# 1234| m1234_11(unknown) = Chi : total:m1234_8, partial:m1234_10 -#-----| Goto -> Block 2 - -# 1237| Block 2 -# 1237| m1237_1(int) = Phi : from 0:~m1231_3, from 1:m1234_7 -# 1237| m1237_2(unknown) = Phi : from 0:~m1231_4, from 1:~m1234_11 -# 1237| r1237_3(glval) = VariableAddress[#return] : -# 1237| r1237_4(glval) = VariableAddress[a] : -# 1237| r1237_5(int) = Load[a] : &:r1237_4, ~m1237_2 -# 1237| r1237_6(glval) = VariableAddress[b] : -# 1237| r1237_7(int) = Load[b] : &:r1237_6, ~m1237_2 -# 1237| r1237_8(int) = Add : r1237_5, r1237_7 -# 1237| r1237_9(glval) = VariableAddress[c] : -# 1237| r1237_10(int) = Load[c] : &:r1237_9, m1237_1 -# 1237| r1237_11(int) = Add : r1237_8, r1237_10 -# 1237| r1237_12(glval) = VariableAddress[d] : -# 1237| r1237_13(int) = Load[d] : &:r1237_12, ~m1237_2 -# 1237| r1237_14(int) = Add : r1237_11, r1237_13 -# 1237| m1237_15(int) = Store[#return] : &:r1237_3, r1237_14 -# 1231| r1231_7(glval) = VariableAddress[#return] : -# 1231| v1231_8(void) = ReturnValue : &:r1231_7, m1237_15 -# 1231| v1231_9(void) = AliasedUse : ~m1237_2 -# 1231| v1231_10(void) = ExitFunction : - -# 1232| int a -# 1232| Block 0 -# 1232| v1232_1(void) = EnterFunction : -# 1232| m1232_2(unknown) = AliasedDefinition : -# 1232| r1232_3(glval) = VariableAddress[a] : -# 1232| r1232_4(int) = Constant[0] : -# 1232| m1232_5(int) = Store[a] : &:r1232_3, r1232_4 -# 1232| m1232_6(unknown) = Chi : total:m1232_2, partial:m1232_5 -# 1232| v1232_7(void) = ReturnVoid : -# 1232| v1232_8(void) = AliasedUse : ~m1232_6 -# 1232| v1232_9(void) = ExitFunction : - -# 1233| int b +# 1233| int staticLocalInit(int) # 1233| Block 0 -# 1233| v1233_1(void) = EnterFunction : -# 1233| m1233_2(unknown) = AliasedDefinition : -# 1233| r1233_3(glval) = VariableAddress[b] : -# 1233| r1233_4(int) = Constant[4] : -# 1233| m1233_5(int) = Store[b] : &:r1233_3, r1233_4 -# 1233| m1233_6(unknown) = Chi : total:m1233_2, partial:m1233_5 -# 1233| v1233_7(void) = ReturnVoid : -# 1233| v1233_8(void) = AliasedUse : ~m1233_6 -# 1233| v1233_9(void) = ExitFunction : - -# 1240| void staticLocalWithConstructor(char const*) -# 1240| Block 0 -# 1240| v1240_1(void) = EnterFunction : -# 1240| m1240_2(unknown) = AliasedDefinition : -# 1240| m1240_3(unknown) = InitializeNonLocal : -# 1240| m1240_4(unknown) = Chi : total:m1240_2, partial:m1240_3 -# 1240| r1240_5(glval) = VariableAddress[dynamic] : -# 1240| m1240_6(char *) = InitializeParameter[dynamic] : &:r1240_5 -# 1240| r1240_7(char *) = Load[dynamic] : &:r1240_5, m1240_6 -# 1240| m1240_8(unknown) = InitializeIndirection[dynamic] : &:r1240_7 -# 1241| r1241_1(glval) = VariableAddress[a#init] : -# 1241| r1241_2(bool) = Load[a#init] : &:r1241_1, ~m1240_3 -# 1241| v1241_3(void) = ConditionalBranch : r1241_2 +# 1233| v1233_1(void) = EnterFunction : +# 1233| m1233_2(unknown) = AliasedDefinition : +# 1233| m1233_3(unknown) = InitializeNonLocal : +# 1233| m1233_4(unknown) = Chi : total:m1233_2, partial:m1233_3 +# 1233| r1233_5(glval) = VariableAddress[x] : +# 1233| m1233_6(int) = InitializeParameter[x] : &:r1233_5 +# 1236| r1236_1(glval) = VariableAddress[c#init] : +# 1236| r1236_2(bool) = Load[c#init] : &:r1236_1, ~m1233_3 +# 1236| v1236_3(void) = ConditionalBranch : r1236_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 1241| Block 1 -# 1241| r1241_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[String] : -#-----| v0_2(void) = Call[String] : func:r0_1, this:r1241_4 -#-----| m0_3(unknown) = ^CallSideEffect : ~m1240_4 -#-----| m0_4(unknown) = Chi : total:m1240_4, partial:m0_3 -#-----| m0_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r1241_4 -#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 -# 1241| r1241_5(bool) = Constant[1] : -# 1241| m1241_6(bool) = Store[a#init] : &:r1241_1, r1241_5 -# 1241| m1241_7(unknown) = Chi : total:m0_6, partial:m1241_6 +# 1236| Block 1 +# 1236| r1236_4(glval) = VariableAddress[c] : +# 1236| r1236_5(glval) = VariableAddress[x] : +# 1236| r1236_6(int) = Load[x] : &:r1236_5, m1233_6 +# 1236| m1236_7(int) = Store[c] : &:r1236_4, r1236_6 +# 1236| m1236_8(unknown) = Chi : total:m1233_4, partial:m1236_7 +# 1236| r1236_9(bool) = Constant[1] : +# 1236| m1236_10(bool) = Store[c#init] : &:r1236_1, r1236_9 +# 1236| m1236_11(unknown) = Chi : total:m1236_8, partial:m1236_10 #-----| Goto -> Block 2 -# 1242| Block 2 -# 1242| m1242_1(unknown) = Phi : from 0:~m1240_4, from 1:~m1241_7 -# 1242| r1242_2(glval) = VariableAddress[b#init] : -# 1242| r1242_3(bool) = Load[b#init] : &:r1242_2, ~m1242_1 -# 1242| v1242_4(void) = ConditionalBranch : r1242_3 +# 1239| Block 2 +# 1239| m1239_1(int) = Phi : from 0:~m1233_3, from 1:m1236_7 +# 1239| m1239_2(unknown) = Phi : from 0:~m1233_4, from 1:~m1236_11 +# 1239| r1239_3(glval) = VariableAddress[#return] : +# 1239| r1239_4(glval) = VariableAddress[a] : +# 1239| r1239_5(int) = Load[a] : &:r1239_4, ~m1239_2 +# 1239| r1239_6(glval) = VariableAddress[b] : +# 1239| r1239_7(int) = Load[b] : &:r1239_6, ~m1239_2 +# 1239| r1239_8(int) = Add : r1239_5, r1239_7 +# 1239| r1239_9(glval) = VariableAddress[c] : +# 1239| r1239_10(int) = Load[c] : &:r1239_9, m1239_1 +# 1239| r1239_11(int) = Add : r1239_8, r1239_10 +# 1239| r1239_12(glval) = VariableAddress[d] : +# 1239| r1239_13(int) = Load[d] : &:r1239_12, ~m1239_2 +# 1239| r1239_14(int) = Add : r1239_11, r1239_13 +# 1239| m1239_15(int) = Store[#return] : &:r1239_3, r1239_14 +# 1233| r1233_7(glval) = VariableAddress[#return] : +# 1233| v1233_8(void) = ReturnValue : &:r1233_7, m1239_15 +# 1233| v1233_9(void) = AliasedUse : ~m1239_2 +# 1233| v1233_10(void) = ExitFunction : + +# 1234| int a +# 1234| Block 0 +# 1234| v1234_1(void) = EnterFunction : +# 1234| m1234_2(unknown) = AliasedDefinition : +# 1234| r1234_3(glval) = VariableAddress[a] : +# 1234| r1234_4(int) = Constant[0] : +# 1234| m1234_5(int) = Store[a] : &:r1234_3, r1234_4 +# 1234| m1234_6(unknown) = Chi : total:m1234_2, partial:m1234_5 +# 1234| v1234_7(void) = ReturnVoid : +# 1234| v1234_8(void) = AliasedUse : ~m1234_6 +# 1234| v1234_9(void) = ExitFunction : + +# 1235| int b +# 1235| Block 0 +# 1235| v1235_1(void) = EnterFunction : +# 1235| m1235_2(unknown) = AliasedDefinition : +# 1235| r1235_3(glval) = VariableAddress[b] : +# 1235| r1235_4(int) = Constant[4] : +# 1235| m1235_5(int) = Store[b] : &:r1235_3, r1235_4 +# 1235| m1235_6(unknown) = Chi : total:m1235_2, partial:m1235_5 +# 1235| v1235_7(void) = ReturnVoid : +# 1235| v1235_8(void) = AliasedUse : ~m1235_6 +# 1235| v1235_9(void) = ExitFunction : + +# 1242| void staticLocalWithConstructor(char const*) +# 1242| Block 0 +# 1242| v1242_1(void) = EnterFunction : +# 1242| m1242_2(unknown) = AliasedDefinition : +# 1242| m1242_3(unknown) = InitializeNonLocal : +# 1242| m1242_4(unknown) = Chi : total:m1242_2, partial:m1242_3 +# 1242| r1242_5(glval) = VariableAddress[dynamic] : +# 1242| m1242_6(char *) = InitializeParameter[dynamic] : &:r1242_5 +# 1242| r1242_7(char *) = Load[dynamic] : &:r1242_5, m1242_6 +# 1242| m1242_8(unknown) = InitializeIndirection[dynamic] : &:r1242_7 +# 1243| r1243_1(glval) = VariableAddress[a#init] : +# 1243| r1243_2(bool) = Load[a#init] : &:r1243_1, ~m1242_3 +# 1243| v1243_3(void) = ConditionalBranch : r1243_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1243| Block 1 +# 1243| r1243_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[String] : +#-----| v0_2(void) = Call[String] : func:r0_1, this:r1243_4 +#-----| m0_3(unknown) = ^CallSideEffect : ~m1242_4 +#-----| m0_4(unknown) = Chi : total:m1242_4, partial:m0_3 +#-----| m0_5(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 +#-----| m0_6(unknown) = Chi : total:m0_4, partial:m0_5 +# 1243| r1243_5(bool) = Constant[1] : +# 1243| m1243_6(bool) = Store[a#init] : &:r1243_1, r1243_5 +# 1243| m1243_7(unknown) = Chi : total:m0_6, partial:m1243_6 +#-----| Goto -> Block 2 + +# 1244| Block 2 +# 1244| m1244_1(unknown) = Phi : from 0:~m1242_4, from 1:~m1243_7 +# 1244| r1244_2(glval) = VariableAddress[b#init] : +# 1244| r1244_3(bool) = Load[b#init] : &:r1244_2, ~m1244_1 +# 1244| v1244_4(void) = ConditionalBranch : r1244_3 #-----| False -> Block 3 #-----| True -> Block 4 -# 1242| Block 3 -# 1242| r1242_5(glval) = VariableAddress[b] : -# 1242| r1242_6(glval) = FunctionAddress[String] : -# 1242| r1242_7(glval) = StringConstant["static"] : -# 1242| r1242_8(char *) = Convert : r1242_7 -# 1242| v1242_9(void) = Call[String] : func:r1242_6, this:r1242_5, 0:r1242_8 -# 1242| m1242_10(unknown) = ^CallSideEffect : ~m1242_1 -# 1242| m1242_11(unknown) = Chi : total:m1242_1, partial:m1242_10 -# 1242| v1242_12(void) = ^BufferReadSideEffect[0] : &:r1242_8, ~m1240_3 -# 1242| m1242_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1242_5 -# 1242| m1242_14(unknown) = Chi : total:m1242_11, partial:m1242_13 -# 1242| r1242_15(bool) = Constant[1] : -# 1242| m1242_16(bool) = Store[b#init] : &:r1242_2, r1242_15 -# 1242| m1242_17(unknown) = Chi : total:m1242_14, partial:m1242_16 +# 1244| Block 3 +# 1244| r1244_5(glval) = VariableAddress[b] : +# 1244| r1244_6(glval) = FunctionAddress[String] : +# 1244| r1244_7(glval) = StringConstant["static"] : +# 1244| r1244_8(char *) = Convert : r1244_7 +# 1244| v1244_9(void) = Call[String] : func:r1244_6, this:r1244_5, 0:r1244_8 +# 1244| m1244_10(unknown) = ^CallSideEffect : ~m1244_1 +# 1244| m1244_11(unknown) = Chi : total:m1244_1, partial:m1244_10 +# 1244| v1244_12(void) = ^BufferReadSideEffect[0] : &:r1244_8, ~m1242_3 +# 1244| m1244_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_5 +# 1244| m1244_14(unknown) = Chi : total:m1244_11, partial:m1244_13 +# 1244| r1244_15(bool) = Constant[1] : +# 1244| m1244_16(bool) = Store[b#init] : &:r1244_2, r1244_15 +# 1244| m1244_17(unknown) = Chi : total:m1244_14, partial:m1244_16 #-----| Goto -> Block 4 -# 1243| Block 4 -# 1243| m1243_1(unknown) = Phi : from 2:~m1242_1, from 3:~m1242_17 -# 1243| r1243_2(glval) = VariableAddress[c#init] : -# 1243| r1243_3(bool) = Load[c#init] : &:r1243_2, ~m1243_1 -# 1243| v1243_4(void) = ConditionalBranch : r1243_3 +# 1245| Block 4 +# 1245| m1245_1(unknown) = Phi : from 2:~m1244_1, from 3:~m1244_17 +# 1245| r1245_2(glval) = VariableAddress[c#init] : +# 1245| r1245_3(bool) = Load[c#init] : &:r1245_2, ~m1245_1 +# 1245| v1245_4(void) = ConditionalBranch : r1245_3 #-----| False -> Block 5 #-----| True -> Block 6 -# 1243| Block 5 -# 1243| r1243_5(glval) = VariableAddress[c] : -# 1243| r1243_6(glval) = FunctionAddress[String] : -# 1243| r1243_7(glval) = VariableAddress[dynamic] : -# 1243| r1243_8(char *) = Load[dynamic] : &:r1243_7, m1240_6 -# 1243| v1243_9(void) = Call[String] : func:r1243_6, this:r1243_5, 0:r1243_8 -# 1243| m1243_10(unknown) = ^CallSideEffect : ~m1243_1 -# 1243| m1243_11(unknown) = Chi : total:m1243_1, partial:m1243_10 -# 1243| v1243_12(void) = ^BufferReadSideEffect[0] : &:r1243_8, ~m1240_8 -# 1243| m1243_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_5 -# 1243| m1243_14(unknown) = Chi : total:m1243_11, partial:m1243_13 -# 1243| r1243_15(bool) = Constant[1] : -# 1243| m1243_16(bool) = Store[c#init] : &:r1243_2, r1243_15 -# 1243| m1243_17(unknown) = Chi : total:m1243_14, partial:m1243_16 +# 1245| Block 5 +# 1245| r1245_5(glval) = VariableAddress[c] : +# 1245| r1245_6(glval) = FunctionAddress[String] : +# 1245| r1245_7(glval) = VariableAddress[dynamic] : +# 1245| r1245_8(char *) = Load[dynamic] : &:r1245_7, m1242_6 +# 1245| v1245_9(void) = Call[String] : func:r1245_6, this:r1245_5, 0:r1245_8 +# 1245| m1245_10(unknown) = ^CallSideEffect : ~m1245_1 +# 1245| m1245_11(unknown) = Chi : total:m1245_1, partial:m1245_10 +# 1245| v1245_12(void) = ^BufferReadSideEffect[0] : &:r1245_8, ~m1242_8 +# 1245| m1245_13(String) = ^IndirectMayWriteSideEffect[-1] : &:r1245_5 +# 1245| m1245_14(unknown) = Chi : total:m1245_11, partial:m1245_13 +# 1245| r1245_15(bool) = Constant[1] : +# 1245| m1245_16(bool) = Store[c#init] : &:r1245_2, r1245_15 +# 1245| m1245_17(unknown) = Chi : total:m1245_14, partial:m1245_16 #-----| Goto -> Block 6 -# 1244| Block 6 -# 1244| m1244_1(unknown) = Phi : from 4:~m1243_1, from 5:~m1243_17 -# 1244| v1244_2(void) = NoOp : -# 1240| v1240_9(void) = ReturnIndirection[dynamic] : &:r1240_7, m1240_8 -# 1240| v1240_10(void) = ReturnVoid : -# 1240| v1240_11(void) = AliasedUse : ~m1244_1 -# 1240| v1240_12(void) = ExitFunction : +# 1246| Block 6 +# 1246| m1246_1(unknown) = Phi : from 4:~m1245_1, from 5:~m1245_17 +# 1246| v1246_2(void) = NoOp : +# 1242| v1242_9(void) = ReturnIndirection[dynamic] : &:r1242_7, m1242_8 +# 1242| v1242_10(void) = ReturnVoid : +# 1242| v1242_11(void) = AliasedUse : ~m1246_1 +# 1242| v1242_12(void) = ExitFunction : -# 1251| void test_strings(char*, char*) -# 1251| Block 0 -# 1251| v1251_1(void) = EnterFunction : -# 1251| m1251_2(unknown) = AliasedDefinition : -# 1251| m1251_3(unknown) = InitializeNonLocal : -# 1251| m1251_4(unknown) = Chi : total:m1251_2, partial:m1251_3 -# 1251| r1251_5(glval) = VariableAddress[s1] : -# 1251| m1251_6(char *) = InitializeParameter[s1] : &:r1251_5 -# 1251| r1251_7(char *) = Load[s1] : &:r1251_5, m1251_6 -# 1251| m1251_8(unknown) = InitializeIndirection[s1] : &:r1251_7 -# 1251| r1251_9(glval) = VariableAddress[s2] : -# 1251| m1251_10(char *) = InitializeParameter[s2] : &:r1251_9 -# 1251| r1251_11(char *) = Load[s2] : &:r1251_9, m1251_10 -# 1251| m1251_12(unknown) = InitializeIndirection[s2] : &:r1251_11 -# 1252| r1252_1(glval) = VariableAddress[buffer] : -# 1252| m1252_2(char[1024]) = Uninitialized[buffer] : &:r1252_1 -# 1252| r1252_3(int) = Constant[0] : -# 1252| r1252_4(glval) = PointerAdd[1] : r1252_1, r1252_3 -# 1252| r1252_5(char) = Constant[0] : -# 1252| m1252_6(char) = Store[?] : &:r1252_4, r1252_5 -# 1252| m1252_7(char[1024]) = Chi : total:m1252_2, partial:m1252_6 -# 1252| r1252_8(int) = Constant[1] : -# 1252| r1252_9(glval) = PointerAdd[1] : r1252_1, r1252_8 -# 1252| r1252_10(unknown[1023]) = Constant[0] : -# 1252| m1252_11(unknown[1023]) = Store[?] : &:r1252_9, r1252_10 -# 1252| m1252_12(char[1024]) = Chi : total:m1252_7, partial:m1252_11 -# 1254| r1254_1(glval) = FunctionAddress[strcpy] : -# 1254| r1254_2(glval) = VariableAddress[buffer] : -# 1254| r1254_3(char *) = Convert : r1254_2 -# 1254| r1254_4(glval) = VariableAddress[s1] : -# 1254| r1254_5(char *) = Load[s1] : &:r1254_4, m1251_6 -# 1254| r1254_6(char *) = Convert : r1254_5 -# 1254| r1254_7(char *) = Call[strcpy] : func:r1254_1, 0:r1254_3, 1:r1254_6 -# 1254| v1254_8(void) = ^BufferReadSideEffect[1] : &:r1254_6, ~m1251_8 -# 1254| m1254_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1254_3 -# 1254| m1254_10(char[1024]) = Chi : total:m1252_12, partial:m1254_9 -# 1255| r1255_1(glval) = FunctionAddress[strcat] : -# 1255| r1255_2(glval) = VariableAddress[buffer] : -# 1255| r1255_3(char *) = Convert : r1255_2 -# 1255| r1255_4(glval) = VariableAddress[s2] : -# 1255| r1255_5(char *) = Load[s2] : &:r1255_4, m1251_10 -# 1255| r1255_6(char *) = Convert : r1255_5 -# 1255| r1255_7(char *) = Call[strcat] : func:r1255_1, 0:r1255_3, 1:r1255_6 -# 1255| v1255_8(void) = ^BufferReadSideEffect[0] : &:r1255_3, ~m1254_10 -# 1255| v1255_9(void) = ^BufferReadSideEffect[1] : &:r1255_6, ~m1251_12 -# 1255| m1255_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1255_3 -# 1255| m1255_11(char[1024]) = Chi : total:m1254_10, partial:m1255_10 -# 1256| v1256_1(void) = NoOp : -# 1251| v1251_13(void) = ReturnIndirection[s1] : &:r1251_7, m1251_8 -# 1251| v1251_14(void) = ReturnIndirection[s2] : &:r1251_11, m1251_12 -# 1251| v1251_15(void) = ReturnVoid : -# 1251| v1251_16(void) = AliasedUse : m1251_3 -# 1251| v1251_17(void) = ExitFunction : +# 1253| void test_strings(char*, char*) +# 1253| Block 0 +# 1253| v1253_1(void) = EnterFunction : +# 1253| m1253_2(unknown) = AliasedDefinition : +# 1253| m1253_3(unknown) = InitializeNonLocal : +# 1253| m1253_4(unknown) = Chi : total:m1253_2, partial:m1253_3 +# 1253| r1253_5(glval) = VariableAddress[s1] : +# 1253| m1253_6(char *) = InitializeParameter[s1] : &:r1253_5 +# 1253| r1253_7(char *) = Load[s1] : &:r1253_5, m1253_6 +# 1253| m1253_8(unknown) = InitializeIndirection[s1] : &:r1253_7 +# 1253| r1253_9(glval) = VariableAddress[s2] : +# 1253| m1253_10(char *) = InitializeParameter[s2] : &:r1253_9 +# 1253| r1253_11(char *) = Load[s2] : &:r1253_9, m1253_10 +# 1253| m1253_12(unknown) = InitializeIndirection[s2] : &:r1253_11 +# 1254| r1254_1(glval) = VariableAddress[buffer] : +# 1254| m1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 +# 1254| r1254_3(int) = Constant[0] : +# 1254| r1254_4(glval) = PointerAdd[1] : r1254_1, r1254_3 +# 1254| r1254_5(char) = Constant[0] : +# 1254| m1254_6(char) = Store[?] : &:r1254_4, r1254_5 +# 1254| m1254_7(char[1024]) = Chi : total:m1254_2, partial:m1254_6 +# 1254| r1254_8(int) = Constant[1] : +# 1254| r1254_9(glval) = PointerAdd[1] : r1254_1, r1254_8 +# 1254| r1254_10(unknown[1023]) = Constant[0] : +# 1254| m1254_11(unknown[1023]) = Store[?] : &:r1254_9, r1254_10 +# 1254| m1254_12(char[1024]) = Chi : total:m1254_7, partial:m1254_11 +# 1256| r1256_1(glval) = FunctionAddress[strcpy] : +# 1256| r1256_2(glval) = VariableAddress[buffer] : +# 1256| r1256_3(char *) = Convert : r1256_2 +# 1256| r1256_4(glval) = VariableAddress[s1] : +# 1256| r1256_5(char *) = Load[s1] : &:r1256_4, m1253_6 +# 1256| r1256_6(char *) = Convert : r1256_5 +# 1256| r1256_7(char *) = Call[strcpy] : func:r1256_1, 0:r1256_3, 1:r1256_6 +# 1256| v1256_8(void) = ^BufferReadSideEffect[1] : &:r1256_6, ~m1253_8 +# 1256| m1256_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1256_3 +# 1256| m1256_10(char[1024]) = Chi : total:m1254_12, partial:m1256_9 +# 1257| r1257_1(glval) = FunctionAddress[strcat] : +# 1257| r1257_2(glval) = VariableAddress[buffer] : +# 1257| r1257_3(char *) = Convert : r1257_2 +# 1257| r1257_4(glval) = VariableAddress[s2] : +# 1257| r1257_5(char *) = Load[s2] : &:r1257_4, m1253_10 +# 1257| r1257_6(char *) = Convert : r1257_5 +# 1257| r1257_7(char *) = Call[strcat] : func:r1257_1, 0:r1257_3, 1:r1257_6 +# 1257| v1257_8(void) = ^BufferReadSideEffect[0] : &:r1257_3, ~m1256_10 +# 1257| v1257_9(void) = ^BufferReadSideEffect[1] : &:r1257_6, ~m1253_12 +# 1257| m1257_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1257_3 +# 1257| m1257_11(char[1024]) = Chi : total:m1256_10, partial:m1257_10 +# 1258| v1258_1(void) = NoOp : +# 1253| v1253_13(void) = ReturnIndirection[s1] : &:r1253_7, m1253_8 +# 1253| v1253_14(void) = ReturnIndirection[s2] : &:r1253_11, m1253_12 +# 1253| v1253_15(void) = ReturnVoid : +# 1253| v1253_16(void) = AliasedUse : m1253_3 +# 1253| v1253_17(void) = ExitFunction : -# 1261| void A::static_member(A*, int) -# 1261| Block 0 -# 1261| v1261_1(void) = EnterFunction : -# 1261| m1261_2(unknown) = AliasedDefinition : -# 1261| m1261_3(unknown) = InitializeNonLocal : -# 1261| m1261_4(unknown) = Chi : total:m1261_2, partial:m1261_3 -# 1261| r1261_5(glval) = VariableAddress[a] : -# 1261| m1261_6(A *) = InitializeParameter[a] : &:r1261_5 -# 1261| r1261_7(A *) = Load[a] : &:r1261_5, m1261_6 -# 1261| m1261_8(unknown) = InitializeIndirection[a] : &:r1261_7 -# 1261| r1261_9(glval) = VariableAddress[x] : -# 1261| m1261_10(int) = InitializeParameter[x] : &:r1261_9 -# 1262| r1262_1(glval) = VariableAddress[x] : -# 1262| r1262_2(int) = Load[x] : &:r1262_1, m1261_10 -# 1262| r1262_3(glval) = VariableAddress[a] : -# 1262| r1262_4(A *) = Load[a] : &:r1262_3, m1261_6 -# 1262| r1262_5(glval) = FieldAddress[member] : r1262_4 -# 1262| m1262_6(int) = Store[?] : &:r1262_5, r1262_2 -# 1262| m1262_7(unknown) = Chi : total:m1261_8, partial:m1262_6 -# 1263| v1263_1(void) = NoOp : -# 1261| v1261_11(void) = ReturnIndirection[a] : &:r1261_7, m1262_7 -# 1261| v1261_12(void) = ReturnVoid : -# 1261| v1261_13(void) = AliasedUse : m1261_3 -# 1261| v1261_14(void) = ExitFunction : +# 1263| void A::static_member(A*, int) +# 1263| Block 0 +# 1263| v1263_1(void) = EnterFunction : +# 1263| m1263_2(unknown) = AliasedDefinition : +# 1263| m1263_3(unknown) = InitializeNonLocal : +# 1263| m1263_4(unknown) = Chi : total:m1263_2, partial:m1263_3 +# 1263| r1263_5(glval) = VariableAddress[a] : +# 1263| m1263_6(A *) = InitializeParameter[a] : &:r1263_5 +# 1263| r1263_7(A *) = Load[a] : &:r1263_5, m1263_6 +# 1263| m1263_8(unknown) = InitializeIndirection[a] : &:r1263_7 +# 1263| r1263_9(glval) = VariableAddress[x] : +# 1263| m1263_10(int) = InitializeParameter[x] : &:r1263_9 +# 1264| r1264_1(glval) = VariableAddress[x] : +# 1264| r1264_2(int) = Load[x] : &:r1264_1, m1263_10 +# 1264| r1264_3(glval) = VariableAddress[a] : +# 1264| r1264_4(A *) = Load[a] : &:r1264_3, m1263_6 +# 1264| r1264_5(glval) = FieldAddress[member] : r1264_4 +# 1264| m1264_6(int) = Store[?] : &:r1264_5, r1264_2 +# 1264| m1264_7(unknown) = Chi : total:m1263_8, partial:m1264_6 +# 1265| v1265_1(void) = NoOp : +# 1263| v1263_11(void) = ReturnIndirection[a] : &:r1263_7, m1264_7 +# 1263| v1263_12(void) = ReturnVoid : +# 1263| v1263_13(void) = AliasedUse : m1263_3 +# 1263| v1263_14(void) = ExitFunction : -# 1270| void test_static_member_functions(int, A*) -# 1270| Block 0 -# 1270| v1270_1(void) = EnterFunction : -# 1270| m1270_2(unknown) = AliasedDefinition : -# 1270| m1270_3(unknown) = InitializeNonLocal : -# 1270| m1270_4(unknown) = Chi : total:m1270_2, partial:m1270_3 -# 1270| r1270_5(glval) = VariableAddress[int_arg] : -# 1270| m1270_6(int) = InitializeParameter[int_arg] : &:r1270_5 -# 1270| r1270_7(glval) = VariableAddress[a_arg] : -# 1270| m1270_8(A *) = InitializeParameter[a_arg] : &:r1270_7 -# 1270| r1270_9(A *) = Load[a_arg] : &:r1270_7, m1270_8 -# 1270| m1270_10(unknown) = InitializeIndirection[a_arg] : &:r1270_9 -# 1271| r1271_1(glval) = VariableAddress[c] : -# 1271| m1271_2(C) = Uninitialized[c] : &:r1271_1 -# 1271| r1271_3(glval) = FunctionAddress[C] : -# 1271| v1271_4(void) = Call[C] : func:r1271_3, this:r1271_1 -# 1271| m1271_5(unknown) = ^CallSideEffect : ~m1270_4 -# 1271| m1271_6(unknown) = Chi : total:m1270_4, partial:m1271_5 -# 1271| m1271_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1271_1 -# 1271| m1271_8(C) = Chi : total:m1271_2, partial:m1271_7 -# 1272| r1272_1(glval) = VariableAddress[c] : -# 1272| r1272_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1272| r1272_3(int) = Constant[10] : -# 1272| r1272_4(int) = Call[StaticMemberFunction] : func:r1272_2, 0:r1272_3 -# 1272| m1272_5(unknown) = ^CallSideEffect : ~m1271_6 -# 1272| m1272_6(unknown) = Chi : total:m1271_6, partial:m1272_5 -# 1273| r1273_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1273| r1273_2(int) = Constant[10] : -# 1273| r1273_3(int) = Call[StaticMemberFunction] : func:r1273_1, 0:r1273_2 -# 1273| m1273_4(unknown) = ^CallSideEffect : ~m1272_6 -# 1273| m1273_5(unknown) = Chi : total:m1272_6, partial:m1273_4 -# 1275| r1275_1(glval) = VariableAddress[a] : -# 1275| m1275_2(A) = Uninitialized[a] : &:r1275_1 -# 1276| r1276_1(glval) = VariableAddress[a] : -# 1276| r1276_2(glval) = FunctionAddress[static_member] : -# 1276| r1276_3(glval) = VariableAddress[a] : -# 1276| r1276_4(A *) = CopyValue : r1276_3 -# 1276| r1276_5(glval) = VariableAddress[int_arg] : -# 1276| r1276_6(int) = Load[int_arg] : &:r1276_5, m1270_6 -# 1276| v1276_7(void) = Call[static_member] : func:r1276_2, 0:r1276_4, 1:r1276_6 -# 1276| m1276_8(unknown) = ^CallSideEffect : ~m1273_5 -# 1276| m1276_9(unknown) = Chi : total:m1273_5, partial:m1276_8 -# 1276| v1276_10(void) = ^BufferReadSideEffect[0] : &:r1276_4, ~m1275_2 -# 1276| m1276_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1276_4 -# 1276| m1276_12(A) = Chi : total:m1275_2, partial:m1276_11 -# 1277| r1277_1(glval) = FunctionAddress[static_member] : -# 1277| r1277_2(glval) = VariableAddress[a] : -# 1277| r1277_3(A *) = CopyValue : r1277_2 -# 1277| r1277_4(glval) = VariableAddress[int_arg] : -# 1277| r1277_5(int) = Load[int_arg] : &:r1277_4, m1270_6 -# 1277| v1277_6(void) = Call[static_member] : func:r1277_1, 0:r1277_3, 1:r1277_5 -# 1277| m1277_7(unknown) = ^CallSideEffect : ~m1276_9 -# 1277| m1277_8(unknown) = Chi : total:m1276_9, partial:m1277_7 -# 1277| v1277_9(void) = ^BufferReadSideEffect[0] : &:r1277_3, ~m1276_12 -# 1277| m1277_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1277_3 -# 1277| m1277_11(A) = Chi : total:m1276_12, partial:m1277_10 -# 1279| r1279_1(glval) = VariableAddress[a] : -# 1279| r1279_2(A *) = CopyValue : r1279_1 -# 1279| r1279_3(glval) = FunctionAddress[static_member] : -# 1279| r1279_4(glval) = VariableAddress[a_arg] : -# 1279| r1279_5(A *) = Load[a_arg] : &:r1279_4, m1270_8 -# 1279| r1279_6(glval) = VariableAddress[int_arg] : -# 1279| r1279_7(int) = Load[int_arg] : &:r1279_6, m1270_6 -# 1279| r1279_8(int) = Constant[2] : -# 1279| r1279_9(int) = Add : r1279_7, r1279_8 -# 1279| v1279_10(void) = Call[static_member] : func:r1279_3, 0:r1279_5, 1:r1279_9 -# 1279| m1279_11(unknown) = ^CallSideEffect : ~m1277_8 -# 1279| m1279_12(unknown) = Chi : total:m1277_8, partial:m1279_11 -# 1279| v1279_13(void) = ^BufferReadSideEffect[0] : &:r1279_5, ~m1270_10 -# 1279| m1279_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_5 -# 1279| m1279_15(unknown) = Chi : total:m1270_10, partial:m1279_14 -# 1280| r1280_1(glval) = VariableAddress[a_arg] : -# 1280| r1280_2(A *) = Load[a_arg] : &:r1280_1, m1270_8 -# 1280| r1280_3(glval) = CopyValue : r1280_2 -# 1280| r1280_4(glval) = FunctionAddress[static_member] : -# 1280| r1280_5(glval) = VariableAddress[a] : -# 1280| r1280_6(A *) = CopyValue : r1280_5 -# 1280| r1280_7(int) = Constant[99] : -# 1280| v1280_8(void) = Call[static_member] : func:r1280_4, 0:r1280_6, 1:r1280_7 -# 1280| m1280_9(unknown) = ^CallSideEffect : ~m1279_12 -# 1280| m1280_10(unknown) = Chi : total:m1279_12, partial:m1280_9 -# 1280| v1280_11(void) = ^BufferReadSideEffect[0] : &:r1280_6, ~m1277_11 -# 1280| m1280_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1280_6 -# 1280| m1280_13(A) = Chi : total:m1277_11, partial:m1280_12 -# 1281| r1281_1(glval) = VariableAddress[a_arg] : -# 1281| r1281_2(A *) = Load[a_arg] : &:r1281_1, m1270_8 +# 1272| void test_static_member_functions(int, A*) +# 1272| Block 0 +# 1272| v1272_1(void) = EnterFunction : +# 1272| m1272_2(unknown) = AliasedDefinition : +# 1272| m1272_3(unknown) = InitializeNonLocal : +# 1272| m1272_4(unknown) = Chi : total:m1272_2, partial:m1272_3 +# 1272| r1272_5(glval) = VariableAddress[int_arg] : +# 1272| m1272_6(int) = InitializeParameter[int_arg] : &:r1272_5 +# 1272| r1272_7(glval) = VariableAddress[a_arg] : +# 1272| m1272_8(A *) = InitializeParameter[a_arg] : &:r1272_7 +# 1272| r1272_9(A *) = Load[a_arg] : &:r1272_7, m1272_8 +# 1272| m1272_10(unknown) = InitializeIndirection[a_arg] : &:r1272_9 +# 1273| r1273_1(glval) = VariableAddress[c] : +# 1273| m1273_2(C) = Uninitialized[c] : &:r1273_1 +# 1273| r1273_3(glval) = FunctionAddress[C] : +# 1273| v1273_4(void) = Call[C] : func:r1273_3, this:r1273_1 +# 1273| m1273_5(unknown) = ^CallSideEffect : ~m1272_4 +# 1273| m1273_6(unknown) = Chi : total:m1272_4, partial:m1273_5 +# 1273| m1273_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 +# 1273| m1273_8(C) = Chi : total:m1273_2, partial:m1273_7 +# 1274| r1274_1(glval) = VariableAddress[c] : +# 1274| r1274_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1274| r1274_3(int) = Constant[10] : +# 1274| r1274_4(int) = Call[StaticMemberFunction] : func:r1274_2, 0:r1274_3 +# 1274| m1274_5(unknown) = ^CallSideEffect : ~m1273_6 +# 1274| m1274_6(unknown) = Chi : total:m1273_6, partial:m1274_5 +# 1275| r1275_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1275| r1275_2(int) = Constant[10] : +# 1275| r1275_3(int) = Call[StaticMemberFunction] : func:r1275_1, 0:r1275_2 +# 1275| m1275_4(unknown) = ^CallSideEffect : ~m1274_6 +# 1275| m1275_5(unknown) = Chi : total:m1274_6, partial:m1275_4 +# 1277| r1277_1(glval) = VariableAddress[a] : +# 1277| m1277_2(A) = Uninitialized[a] : &:r1277_1 +# 1278| r1278_1(glval) = VariableAddress[a] : +# 1278| r1278_2(glval) = FunctionAddress[static_member] : +# 1278| r1278_3(glval) = VariableAddress[a] : +# 1278| r1278_4(A *) = CopyValue : r1278_3 +# 1278| r1278_5(glval) = VariableAddress[int_arg] : +# 1278| r1278_6(int) = Load[int_arg] : &:r1278_5, m1272_6 +# 1278| v1278_7(void) = Call[static_member] : func:r1278_2, 0:r1278_4, 1:r1278_6 +# 1278| m1278_8(unknown) = ^CallSideEffect : ~m1275_5 +# 1278| m1278_9(unknown) = Chi : total:m1275_5, partial:m1278_8 +# 1278| v1278_10(void) = ^BufferReadSideEffect[0] : &:r1278_4, ~m1277_2 +# 1278| m1278_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1278_4 +# 1278| m1278_12(A) = Chi : total:m1277_2, partial:m1278_11 +# 1279| r1279_1(glval) = FunctionAddress[static_member] : +# 1279| r1279_2(glval) = VariableAddress[a] : +# 1279| r1279_3(A *) = CopyValue : r1279_2 +# 1279| r1279_4(glval) = VariableAddress[int_arg] : +# 1279| r1279_5(int) = Load[int_arg] : &:r1279_4, m1272_6 +# 1279| v1279_6(void) = Call[static_member] : func:r1279_1, 0:r1279_3, 1:r1279_5 +# 1279| m1279_7(unknown) = ^CallSideEffect : ~m1278_9 +# 1279| m1279_8(unknown) = Chi : total:m1278_9, partial:m1279_7 +# 1279| v1279_9(void) = ^BufferReadSideEffect[0] : &:r1279_3, ~m1278_12 +# 1279| m1279_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_3 +# 1279| m1279_11(A) = Chi : total:m1278_12, partial:m1279_10 +# 1281| r1281_1(glval) = VariableAddress[a] : +# 1281| r1281_2(A *) = CopyValue : r1281_1 # 1281| r1281_3(glval) = FunctionAddress[static_member] : # 1281| r1281_4(glval) = VariableAddress[a_arg] : -# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, m1270_8 -# 1281| r1281_6(int) = Constant[-1] : -# 1281| v1281_7(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_6 -# 1281| m1281_8(unknown) = ^CallSideEffect : ~m1280_10 -# 1281| m1281_9(unknown) = Chi : total:m1280_10, partial:m1281_8 -# 1281| v1281_10(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m1279_15 -# 1281| m1281_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 -# 1281| m1281_12(unknown) = Chi : total:m1279_15, partial:m1281_11 -# 1283| r1283_1(glval) = VariableAddress[a] : -# 1283| r1283_2(glval) = FunctionAddress[static_member_without_def] : -# 1283| v1283_3(void) = Call[static_member_without_def] : func:r1283_2 -# 1283| m1283_4(unknown) = ^CallSideEffect : ~m1281_9 -# 1283| m1283_5(unknown) = Chi : total:m1281_9, partial:m1283_4 -# 1284| r1284_1(glval) = FunctionAddress[static_member_without_def] : -# 1284| v1284_2(void) = Call[static_member_without_def] : func:r1284_1 -# 1284| m1284_3(unknown) = ^CallSideEffect : ~m1283_5 -# 1284| m1284_4(unknown) = Chi : total:m1283_5, partial:m1284_3 -# 1286| r1286_1(glval) = FunctionAddress[getAnInstanceOfA] : -# 1286| r1286_2(A *) = Call[getAnInstanceOfA] : func:r1286_1 -# 1286| m1286_3(unknown) = ^CallSideEffect : ~m1284_4 -# 1286| m1286_4(unknown) = Chi : total:m1284_4, partial:m1286_3 -# 1286| r1286_5(glval) = FunctionAddress[static_member_without_def] : -# 1286| v1286_6(void) = Call[static_member_without_def] : func:r1286_5 -# 1286| m1286_7(unknown) = ^CallSideEffect : ~m1286_4 -# 1286| m1286_8(unknown) = Chi : total:m1286_4, partial:m1286_7 -# 1287| v1287_1(void) = NoOp : -# 1270| v1270_11(void) = ReturnIndirection[a_arg] : &:r1270_9, m1281_12 -# 1270| v1270_12(void) = ReturnVoid : -# 1270| v1270_13(void) = AliasedUse : ~m1286_8 -# 1270| v1270_14(void) = ExitFunction : +# 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, m1272_8 +# 1281| r1281_6(glval) = VariableAddress[int_arg] : +# 1281| r1281_7(int) = Load[int_arg] : &:r1281_6, m1272_6 +# 1281| r1281_8(int) = Constant[2] : +# 1281| r1281_9(int) = Add : r1281_7, r1281_8 +# 1281| v1281_10(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_9 +# 1281| m1281_11(unknown) = ^CallSideEffect : ~m1279_8 +# 1281| m1281_12(unknown) = Chi : total:m1279_8, partial:m1281_11 +# 1281| v1281_13(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m1272_10 +# 1281| m1281_14(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 +# 1281| m1281_15(unknown) = Chi : total:m1272_10, partial:m1281_14 +# 1282| r1282_1(glval) = VariableAddress[a_arg] : +# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, m1272_8 +# 1282| r1282_3(glval) = CopyValue : r1282_2 +# 1282| r1282_4(glval) = FunctionAddress[static_member] : +# 1282| r1282_5(glval) = VariableAddress[a] : +# 1282| r1282_6(A *) = CopyValue : r1282_5 +# 1282| r1282_7(int) = Constant[99] : +# 1282| v1282_8(void) = Call[static_member] : func:r1282_4, 0:r1282_6, 1:r1282_7 +# 1282| m1282_9(unknown) = ^CallSideEffect : ~m1281_12 +# 1282| m1282_10(unknown) = Chi : total:m1281_12, partial:m1282_9 +# 1282| v1282_11(void) = ^BufferReadSideEffect[0] : &:r1282_6, ~m1279_11 +# 1282| m1282_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r1282_6 +# 1282| m1282_13(A) = Chi : total:m1279_11, partial:m1282_12 +# 1283| r1283_1(glval) = VariableAddress[a_arg] : +# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, m1272_8 +# 1283| r1283_3(glval) = FunctionAddress[static_member] : +# 1283| r1283_4(glval) = VariableAddress[a_arg] : +# 1283| r1283_5(A *) = Load[a_arg] : &:r1283_4, m1272_8 +# 1283| r1283_6(int) = Constant[-1] : +# 1283| v1283_7(void) = Call[static_member] : func:r1283_3, 0:r1283_5, 1:r1283_6 +# 1283| m1283_8(unknown) = ^CallSideEffect : ~m1282_10 +# 1283| m1283_9(unknown) = Chi : total:m1282_10, partial:m1283_8 +# 1283| v1283_10(void) = ^BufferReadSideEffect[0] : &:r1283_5, ~m1281_15 +# 1283| m1283_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1283_5 +# 1283| m1283_12(unknown) = Chi : total:m1281_15, partial:m1283_11 +# 1285| r1285_1(glval) = VariableAddress[a] : +# 1285| r1285_2(glval) = FunctionAddress[static_member_without_def] : +# 1285| v1285_3(void) = Call[static_member_without_def] : func:r1285_2 +# 1285| m1285_4(unknown) = ^CallSideEffect : ~m1283_9 +# 1285| m1285_5(unknown) = Chi : total:m1283_9, partial:m1285_4 +# 1286| r1286_1(glval) = FunctionAddress[static_member_without_def] : +# 1286| v1286_2(void) = Call[static_member_without_def] : func:r1286_1 +# 1286| m1286_3(unknown) = ^CallSideEffect : ~m1285_5 +# 1286| m1286_4(unknown) = Chi : total:m1285_5, partial:m1286_3 +# 1288| r1288_1(glval) = FunctionAddress[getAnInstanceOfA] : +# 1288| r1288_2(A *) = Call[getAnInstanceOfA] : func:r1288_1 +# 1288| m1288_3(unknown) = ^CallSideEffect : ~m1286_4 +# 1288| m1288_4(unknown) = Chi : total:m1286_4, partial:m1288_3 +# 1288| r1288_5(glval) = FunctionAddress[static_member_without_def] : +# 1288| v1288_6(void) = Call[static_member_without_def] : func:r1288_5 +# 1288| m1288_7(unknown) = ^CallSideEffect : ~m1288_4 +# 1288| m1288_8(unknown) = Chi : total:m1288_4, partial:m1288_7 +# 1289| v1289_1(void) = NoOp : +# 1272| v1272_11(void) = ReturnIndirection[a_arg] : &:r1272_9, m1283_12 +# 1272| v1272_12(void) = ReturnVoid : +# 1272| v1272_13(void) = AliasedUse : ~m1288_8 +# 1272| v1272_14(void) = ExitFunction : -# 1289| int missingReturnValue(bool, int) -# 1289| Block 0 -# 1289| v1289_1(void) = EnterFunction : -# 1289| m1289_2(unknown) = AliasedDefinition : -# 1289| m1289_3(unknown) = InitializeNonLocal : -# 1289| m1289_4(unknown) = Chi : total:m1289_2, partial:m1289_3 -# 1289| r1289_5(glval) = VariableAddress[b] : -# 1289| m1289_6(bool) = InitializeParameter[b] : &:r1289_5 -# 1289| r1289_7(glval) = VariableAddress[x] : -# 1289| m1289_8(int) = InitializeParameter[x] : &:r1289_7 -# 1290| r1290_1(glval) = VariableAddress[b] : -# 1290| r1290_2(bool) = Load[b] : &:r1290_1, m1289_6 -# 1290| v1290_3(void) = ConditionalBranch : r1290_2 +# 1291| int missingReturnValue(bool, int) +# 1291| Block 0 +# 1291| v1291_1(void) = EnterFunction : +# 1291| m1291_2(unknown) = AliasedDefinition : +# 1291| m1291_3(unknown) = InitializeNonLocal : +# 1291| m1291_4(unknown) = Chi : total:m1291_2, partial:m1291_3 +# 1291| r1291_5(glval) = VariableAddress[b] : +# 1291| m1291_6(bool) = InitializeParameter[b] : &:r1291_5 +# 1291| r1291_7(glval) = VariableAddress[x] : +# 1291| m1291_8(int) = InitializeParameter[x] : &:r1291_7 +# 1292| r1292_1(glval) = VariableAddress[b] : +# 1292| r1292_2(bool) = Load[b] : &:r1292_1, m1291_6 +# 1292| v1292_3(void) = ConditionalBranch : r1292_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1289| Block 1 -# 1289| m1289_9(int) = Phi : from 2:m1291_4, from 3:m1293_2 -# 1289| r1289_10(glval) = VariableAddress[#return] : -# 1289| v1289_11(void) = ReturnValue : &:r1289_10, m1289_9 -# 1289| v1289_12(void) = AliasedUse : m1289_3 -# 1289| v1289_13(void) = ExitFunction : +# 1291| Block 1 +# 1291| m1291_9(int) = Phi : from 2:m1293_4, from 3:m1295_2 +# 1291| r1291_10(glval) = VariableAddress[#return] : +# 1291| v1291_11(void) = ReturnValue : &:r1291_10, m1291_9 +# 1291| v1291_12(void) = AliasedUse : m1291_3 +# 1291| v1291_13(void) = ExitFunction : -# 1291| Block 2 -# 1291| r1291_1(glval) = VariableAddress[#return] : -# 1291| r1291_2(glval) = VariableAddress[x] : -# 1291| r1291_3(int) = Load[x] : &:r1291_2, m1289_8 -# 1291| m1291_4(int) = Store[#return] : &:r1291_1, r1291_3 -#-----| Goto -> Block 1 - -# 1293| Block 3 +# 1293| Block 2 # 1293| r1293_1(glval) = VariableAddress[#return] : -# 1293| m1293_2(int) = Uninitialized[#return] : &:r1293_1 +# 1293| r1293_2(glval) = VariableAddress[x] : +# 1293| r1293_3(int) = Load[x] : &:r1293_2, m1291_8 +# 1293| m1293_4(int) = Store[#return] : &:r1293_1, r1293_3 #-----| Goto -> Block 1 -# 1295| void returnVoid(int, int) -# 1295| Block 0 -# 1295| v1295_1(void) = EnterFunction : -# 1295| m1295_2(unknown) = AliasedDefinition : -# 1295| m1295_3(unknown) = InitializeNonLocal : -# 1295| m1295_4(unknown) = Chi : total:m1295_2, partial:m1295_3 -# 1295| r1295_5(glval) = VariableAddress[x] : -# 1295| m1295_6(int) = InitializeParameter[x] : &:r1295_5 -# 1295| r1295_7(glval) = VariableAddress[y] : -# 1295| m1295_8(int) = InitializeParameter[y] : &:r1295_7 -# 1296| r1296_1(glval) = FunctionAddress[IntegerOps] : -# 1296| r1296_2(glval) = VariableAddress[x] : -# 1296| r1296_3(int) = Load[x] : &:r1296_2, m1295_6 -# 1296| r1296_4(glval) = VariableAddress[y] : -# 1296| r1296_5(int) = Load[y] : &:r1296_4, m1295_8 -# 1296| v1296_6(void) = Call[IntegerOps] : func:r1296_1, 0:r1296_3, 1:r1296_5 -# 1296| m1296_7(unknown) = ^CallSideEffect : ~m1295_4 -# 1296| m1296_8(unknown) = Chi : total:m1295_4, partial:m1296_7 -# 1296| v1296_9(void) = NoOp : -# 1295| v1295_9(void) = ReturnVoid : -# 1295| v1295_10(void) = AliasedUse : ~m1296_8 -# 1295| v1295_11(void) = ExitFunction : +# 1295| Block 3 +# 1295| r1295_1(glval) = VariableAddress[#return] : +# 1295| m1295_2(int) = Uninitialized[#return] : &:r1295_1 +#-----| Goto -> Block 1 -# 1299| void gccBinaryConditional(bool, int, long) -# 1299| Block 0 -# 1299| v1299_1(void) = EnterFunction : -# 1299| m1299_2(unknown) = AliasedDefinition : -# 1299| m1299_3(unknown) = InitializeNonLocal : -# 1299| m1299_4(unknown) = Chi : total:m1299_2, partial:m1299_3 -# 1299| r1299_5(glval) = VariableAddress[b] : -# 1299| m1299_6(bool) = InitializeParameter[b] : &:r1299_5 -# 1299| r1299_7(glval) = VariableAddress[x] : -# 1299| m1299_8(int) = InitializeParameter[x] : &:r1299_7 -# 1299| r1299_9(glval) = VariableAddress[y] : -# 1299| m1299_10(long) = InitializeParameter[y] : &:r1299_9 -# 1300| r1300_1(glval) = VariableAddress[z] : -# 1300| r1300_2(glval) = VariableAddress[x] : -# 1300| r1300_3(int) = Load[x] : &:r1300_2, m1299_8 -# 1300| m1300_4(int) = Store[z] : &:r1300_1, r1300_3 -# 1301| r1301_1(glval) = VariableAddress[b] : -# 1301| r1301_2(bool) = Load[b] : &:r1301_1, m1299_6 -# 1301| v1301_3(void) = ConditionalBranch : r1301_2 +# 1297| void returnVoid(int, int) +# 1297| Block 0 +# 1297| v1297_1(void) = EnterFunction : +# 1297| m1297_2(unknown) = AliasedDefinition : +# 1297| m1297_3(unknown) = InitializeNonLocal : +# 1297| m1297_4(unknown) = Chi : total:m1297_2, partial:m1297_3 +# 1297| r1297_5(glval) = VariableAddress[x] : +# 1297| m1297_6(int) = InitializeParameter[x] : &:r1297_5 +# 1297| r1297_7(glval) = VariableAddress[y] : +# 1297| m1297_8(int) = InitializeParameter[y] : &:r1297_7 +# 1298| r1298_1(glval) = FunctionAddress[IntegerOps] : +# 1298| r1298_2(glval) = VariableAddress[x] : +# 1298| r1298_3(int) = Load[x] : &:r1298_2, m1297_6 +# 1298| r1298_4(glval) = VariableAddress[y] : +# 1298| r1298_5(int) = Load[y] : &:r1298_4, m1297_8 +# 1298| v1298_6(void) = Call[IntegerOps] : func:r1298_1, 0:r1298_3, 1:r1298_5 +# 1298| m1298_7(unknown) = ^CallSideEffect : ~m1297_4 +# 1298| m1298_8(unknown) = Chi : total:m1297_4, partial:m1298_7 +# 1298| v1298_9(void) = NoOp : +# 1297| v1297_9(void) = ReturnVoid : +# 1297| v1297_10(void) = AliasedUse : ~m1298_8 +# 1297| v1297_11(void) = ExitFunction : + +# 1301| void gccBinaryConditional(bool, int, long) +# 1301| Block 0 +# 1301| v1301_1(void) = EnterFunction : +# 1301| m1301_2(unknown) = AliasedDefinition : +# 1301| m1301_3(unknown) = InitializeNonLocal : +# 1301| m1301_4(unknown) = Chi : total:m1301_2, partial:m1301_3 +# 1301| r1301_5(glval) = VariableAddress[b] : +# 1301| m1301_6(bool) = InitializeParameter[b] : &:r1301_5 +# 1301| r1301_7(glval) = VariableAddress[x] : +# 1301| m1301_8(int) = InitializeParameter[x] : &:r1301_7 +# 1301| r1301_9(glval) = VariableAddress[y] : +# 1301| m1301_10(long) = InitializeParameter[y] : &:r1301_9 +# 1302| r1302_1(glval) = VariableAddress[z] : +# 1302| r1302_2(glval) = VariableAddress[x] : +# 1302| r1302_3(int) = Load[x] : &:r1302_2, m1301_8 +# 1302| m1302_4(int) = Store[z] : &:r1302_1, r1302_3 +# 1303| r1303_1(glval) = VariableAddress[b] : +# 1303| r1303_2(bool) = Load[b] : &:r1303_1, m1301_6 +# 1303| v1303_3(void) = ConditionalBranch : r1303_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1301| Block 1 -# 1301| m1301_4(int) = Phi : from 2:m1301_10, from 3:m1301_14 -# 1301| r1301_5(glval) = VariableAddress[#temp1301:9] : -# 1301| r1301_6(int) = Load[#temp1301:9] : &:r1301_5, m1301_4 -# 1301| r1301_7(glval) = VariableAddress[z] : -# 1301| m1301_8(int) = Store[z] : &:r1301_7, r1301_6 -# 1302| r1302_1(glval) = VariableAddress[b] : -# 1302| r1302_2(bool) = Load[b] : &:r1302_1, m1299_6 -# 1302| v1302_3(void) = ConditionalBranch : r1302_2 +# 1303| Block 1 +# 1303| m1303_4(int) = Phi : from 2:m1303_10, from 3:m1303_14 +# 1303| r1303_5(glval) = VariableAddress[#temp1303:9] : +# 1303| r1303_6(int) = Load[#temp1303:9] : &:r1303_5, m1303_4 +# 1303| r1303_7(glval) = VariableAddress[z] : +# 1303| m1303_8(int) = Store[z] : &:r1303_7, r1303_6 +# 1304| r1304_1(glval) = VariableAddress[b] : +# 1304| r1304_2(bool) = Load[b] : &:r1304_1, m1301_6 +# 1304| v1304_3(void) = ConditionalBranch : r1304_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1301| Block 2 -# 1301| r1301_9(glval) = VariableAddress[#temp1301:9] : -# 1301| m1301_10(int) = Store[#temp1301:9] : &:r1301_9, r1301_2 +# 1303| Block 2 +# 1303| r1303_9(glval) = VariableAddress[#temp1303:9] : +# 1303| m1303_10(int) = Store[#temp1303:9] : &:r1303_9, r1303_2 #-----| Goto -> Block 1 -# 1301| Block 3 -# 1301| r1301_11(glval) = VariableAddress[x] : -# 1301| r1301_12(int) = Load[x] : &:r1301_11, m1299_8 -# 1301| r1301_13(glval) = VariableAddress[#temp1301:9] : -# 1301| m1301_14(int) = Store[#temp1301:9] : &:r1301_13, r1301_12 +# 1303| Block 3 +# 1303| r1303_11(glval) = VariableAddress[x] : +# 1303| r1303_12(int) = Load[x] : &:r1303_11, m1301_8 +# 1303| r1303_13(glval) = VariableAddress[#temp1303:9] : +# 1303| m1303_14(int) = Store[#temp1303:9] : &:r1303_13, r1303_12 #-----| Goto -> Block 1 -# 1302| Block 4 -# 1302| m1302_4(long) = Phi : from 5:m1302_11, from 6:m1302_15 -# 1302| r1302_5(glval) = VariableAddress[#temp1302:9] : -# 1302| r1302_6(long) = Load[#temp1302:9] : &:r1302_5, m1302_4 -# 1302| r1302_7(int) = Convert : r1302_6 -# 1302| r1302_8(glval) = VariableAddress[z] : -# 1302| m1302_9(int) = Store[z] : &:r1302_8, r1302_7 -# 1303| r1303_1(glval) = VariableAddress[x] : -# 1303| r1303_2(int) = Load[x] : &:r1303_1, m1299_8 -# 1303| r1303_3(int) = Constant[0] : -# 1303| r1303_4(bool) = CompareNE : r1303_2, r1303_3 -# 1303| v1303_5(void) = ConditionalBranch : r1303_4 +# 1304| Block 4 +# 1304| m1304_4(long) = Phi : from 5:m1304_11, from 6:m1304_15 +# 1304| r1304_5(glval) = VariableAddress[#temp1304:9] : +# 1304| r1304_6(long) = Load[#temp1304:9] : &:r1304_5, m1304_4 +# 1304| r1304_7(int) = Convert : r1304_6 +# 1304| r1304_8(glval) = VariableAddress[z] : +# 1304| m1304_9(int) = Store[z] : &:r1304_8, r1304_7 +# 1305| r1305_1(glval) = VariableAddress[x] : +# 1305| r1305_2(int) = Load[x] : &:r1305_1, m1301_8 +# 1305| r1305_3(int) = Constant[0] : +# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 +# 1305| v1305_5(void) = ConditionalBranch : r1305_4 #-----| False -> Block 9 #-----| True -> Block 8 -# 1302| Block 5 -# 1302| r1302_10(glval) = VariableAddress[#temp1302:9] : -# 1302| m1302_11(long) = Store[#temp1302:9] : &:r1302_10, r1302_2 +# 1304| Block 5 +# 1304| r1304_10(glval) = VariableAddress[#temp1304:9] : +# 1304| m1304_11(long) = Store[#temp1304:9] : &:r1304_10, r1304_2 #-----| Goto -> Block 4 -# 1302| Block 6 -# 1302| r1302_12(glval) = VariableAddress[y] : -# 1302| r1302_13(long) = Load[y] : &:r1302_12, m1299_10 -# 1302| r1302_14(glval) = VariableAddress[#temp1302:9] : -# 1302| m1302_15(long) = Store[#temp1302:9] : &:r1302_14, r1302_13 +# 1304| Block 6 +# 1304| r1304_12(glval) = VariableAddress[y] : +# 1304| r1304_13(long) = Load[y] : &:r1304_12, m1301_10 +# 1304| r1304_14(glval) = VariableAddress[#temp1304:9] : +# 1304| m1304_15(long) = Store[#temp1304:9] : &:r1304_14, r1304_13 #-----| Goto -> Block 4 -# 1303| Block 7 -# 1303| m1303_6(int) = Phi : from 8:m1303_12, from 9:m1303_16 -# 1303| r1303_7(glval) = VariableAddress[#temp1303:9] : -# 1303| r1303_8(int) = Load[#temp1303:9] : &:r1303_7, m1303_6 -# 1303| r1303_9(glval) = VariableAddress[z] : -# 1303| m1303_10(int) = Store[z] : &:r1303_9, r1303_8 -# 1304| r1304_1(glval) = VariableAddress[x] : -# 1304| r1304_2(int) = Load[x] : &:r1304_1, m1299_8 -# 1304| r1304_3(int) = Constant[0] : -# 1304| r1304_4(bool) = CompareNE : r1304_2, r1304_3 -# 1304| v1304_5(void) = ConditionalBranch : r1304_4 +# 1305| Block 7 +# 1305| m1305_6(int) = Phi : from 8:m1305_12, from 9:m1305_16 +# 1305| r1305_7(glval) = VariableAddress[#temp1305:9] : +# 1305| r1305_8(int) = Load[#temp1305:9] : &:r1305_7, m1305_6 +# 1305| r1305_9(glval) = VariableAddress[z] : +# 1305| m1305_10(int) = Store[z] : &:r1305_9, r1305_8 +# 1306| r1306_1(glval) = VariableAddress[x] : +# 1306| r1306_2(int) = Load[x] : &:r1306_1, m1301_8 +# 1306| r1306_3(int) = Constant[0] : +# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 +# 1306| v1306_5(void) = ConditionalBranch : r1306_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 1303| Block 8 -# 1303| r1303_11(glval) = VariableAddress[#temp1303:9] : -# 1303| m1303_12(int) = Store[#temp1303:9] : &:r1303_11, r1303_2 +# 1305| Block 8 +# 1305| r1305_11(glval) = VariableAddress[#temp1305:9] : +# 1305| m1305_12(int) = Store[#temp1305:9] : &:r1305_11, r1305_2 #-----| Goto -> Block 7 -# 1303| Block 9 -# 1303| r1303_13(glval) = VariableAddress[x] : -# 1303| r1303_14(int) = Load[x] : &:r1303_13, m1299_8 -# 1303| r1303_15(glval) = VariableAddress[#temp1303:9] : -# 1303| m1303_16(int) = Store[#temp1303:9] : &:r1303_15, r1303_14 +# 1305| Block 9 +# 1305| r1305_13(glval) = VariableAddress[x] : +# 1305| r1305_14(int) = Load[x] : &:r1305_13, m1301_8 +# 1305| r1305_15(glval) = VariableAddress[#temp1305:9] : +# 1305| m1305_16(int) = Store[#temp1305:9] : &:r1305_15, r1305_14 #-----| Goto -> Block 7 -# 1304| Block 10 -# 1304| m1304_6(long) = Phi : from 11:m1304_13, from 12:m1304_17 -# 1304| r1304_7(glval) = VariableAddress[#temp1304:9] : -# 1304| r1304_8(long) = Load[#temp1304:9] : &:r1304_7, m1304_6 -# 1304| r1304_9(int) = Convert : r1304_8 -# 1304| r1304_10(glval) = VariableAddress[z] : -# 1304| m1304_11(int) = Store[z] : &:r1304_10, r1304_9 -# 1305| r1305_1(glval) = VariableAddress[y] : -# 1305| r1305_2(long) = Load[y] : &:r1305_1, m1299_10 -# 1305| r1305_3(long) = Constant[0] : -# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 -# 1305| v1305_5(void) = ConditionalBranch : r1305_4 -#-----| False -> Block 15 -#-----| True -> Block 14 - -# 1304| Block 11 -# 1304| r1304_12(glval) = VariableAddress[#temp1304:9] : -# 1304| m1304_13(long) = Store[#temp1304:9] : &:r1304_12, r1304_2 -#-----| Goto -> Block 10 - -# 1304| Block 12 -# 1304| r1304_14(glval) = VariableAddress[y] : -# 1304| r1304_15(long) = Load[y] : &:r1304_14, m1299_10 -# 1304| r1304_16(glval) = VariableAddress[#temp1304:9] : -# 1304| m1304_17(long) = Store[#temp1304:9] : &:r1304_16, r1304_15 -#-----| Goto -> Block 10 - -# 1305| Block 13 -# 1305| m1305_6(long) = Phi : from 14:m1305_13, from 15:m1305_18 -# 1305| r1305_7(glval) = VariableAddress[#temp1305:9] : -# 1305| r1305_8(long) = Load[#temp1305:9] : &:r1305_7, m1305_6 -# 1305| r1305_9(int) = Convert : r1305_8 -# 1305| r1305_10(glval) = VariableAddress[z] : -# 1305| m1305_11(int) = Store[z] : &:r1305_10, r1305_9 -# 1306| r1306_1(glval) = VariableAddress[y] : -# 1306| r1306_2(long) = Load[y] : &:r1306_1, m1299_10 -# 1306| r1306_3(long) = Constant[0] : -# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 -# 1306| v1306_5(void) = ConditionalBranch : r1306_4 -#-----| False -> Block 18 -#-----| True -> Block 17 - -# 1305| Block 14 -# 1305| r1305_12(glval) = VariableAddress[#temp1305:9] : -# 1305| m1305_13(long) = Store[#temp1305:9] : &:r1305_12, r1305_2 -#-----| Goto -> Block 13 - -# 1305| Block 15 -# 1305| r1305_14(glval) = VariableAddress[x] : -# 1305| r1305_15(int) = Load[x] : &:r1305_14, m1299_8 -# 1305| r1305_16(long) = Convert : r1305_15 -# 1305| r1305_17(glval) = VariableAddress[#temp1305:9] : -# 1305| m1305_18(long) = Store[#temp1305:9] : &:r1305_17, r1305_16 -#-----| Goto -> Block 13 - -# 1306| Block 16 -# 1306| m1306_6(long) = Phi : from 17:m1306_13, from 18:m1306_17 +# 1306| Block 10 +# 1306| m1306_6(long) = Phi : from 11:m1306_13, from 12:m1306_17 # 1306| r1306_7(glval) = VariableAddress[#temp1306:9] : # 1306| r1306_8(long) = Load[#temp1306:9] : &:r1306_7, m1306_6 # 1306| r1306_9(int) = Convert : r1306_8 # 1306| r1306_10(glval) = VariableAddress[z] : # 1306| m1306_11(int) = Store[z] : &:r1306_10, r1306_9 -# 1308| r1308_1(glval) = VariableAddress[x] : -# 1308| r1308_2(int) = Load[x] : &:r1308_1, m1299_8 -# 1308| r1308_3(int) = Constant[0] : +# 1307| r1307_1(glval) = VariableAddress[y] : +# 1307| r1307_2(long) = Load[y] : &:r1307_1, m1301_10 +# 1307| r1307_3(long) = Constant[0] : +# 1307| r1307_4(bool) = CompareNE : r1307_2, r1307_3 +# 1307| v1307_5(void) = ConditionalBranch : r1307_4 +#-----| False -> Block 15 +#-----| True -> Block 14 + +# 1306| Block 11 +# 1306| r1306_12(glval) = VariableAddress[#temp1306:9] : +# 1306| m1306_13(long) = Store[#temp1306:9] : &:r1306_12, r1306_2 +#-----| Goto -> Block 10 + +# 1306| Block 12 +# 1306| r1306_14(glval) = VariableAddress[y] : +# 1306| r1306_15(long) = Load[y] : &:r1306_14, m1301_10 +# 1306| r1306_16(glval) = VariableAddress[#temp1306:9] : +# 1306| m1306_17(long) = Store[#temp1306:9] : &:r1306_16, r1306_15 +#-----| Goto -> Block 10 + +# 1307| Block 13 +# 1307| m1307_6(long) = Phi : from 14:m1307_13, from 15:m1307_18 +# 1307| r1307_7(glval) = VariableAddress[#temp1307:9] : +# 1307| r1307_8(long) = Load[#temp1307:9] : &:r1307_7, m1307_6 +# 1307| r1307_9(int) = Convert : r1307_8 +# 1307| r1307_10(glval) = VariableAddress[z] : +# 1307| m1307_11(int) = Store[z] : &:r1307_10, r1307_9 +# 1308| r1308_1(glval) = VariableAddress[y] : +# 1308| r1308_2(long) = Load[y] : &:r1308_1, m1301_10 +# 1308| r1308_3(long) = Constant[0] : # 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 # 1308| v1308_5(void) = ConditionalBranch : r1308_4 +#-----| False -> Block 18 +#-----| True -> Block 17 + +# 1307| Block 14 +# 1307| r1307_12(glval) = VariableAddress[#temp1307:9] : +# 1307| m1307_13(long) = Store[#temp1307:9] : &:r1307_12, r1307_2 +#-----| Goto -> Block 13 + +# 1307| Block 15 +# 1307| r1307_14(glval) = VariableAddress[x] : +# 1307| r1307_15(int) = Load[x] : &:r1307_14, m1301_8 +# 1307| r1307_16(long) = Convert : r1307_15 +# 1307| r1307_17(glval) = VariableAddress[#temp1307:9] : +# 1307| m1307_18(long) = Store[#temp1307:9] : &:r1307_17, r1307_16 +#-----| Goto -> Block 13 + +# 1308| Block 16 +# 1308| m1308_6(long) = Phi : from 17:m1308_13, from 18:m1308_17 +# 1308| r1308_7(glval) = VariableAddress[#temp1308:9] : +# 1308| r1308_8(long) = Load[#temp1308:9] : &:r1308_7, m1308_6 +# 1308| r1308_9(int) = Convert : r1308_8 +# 1308| r1308_10(glval) = VariableAddress[z] : +# 1308| m1308_11(int) = Store[z] : &:r1308_10, r1308_9 +# 1310| r1310_1(glval) = VariableAddress[x] : +# 1310| r1310_2(int) = Load[x] : &:r1310_1, m1301_8 +# 1310| r1310_3(int) = Constant[0] : +# 1310| r1310_4(bool) = CompareNE : r1310_2, r1310_3 +# 1310| v1310_5(void) = ConditionalBranch : r1310_4 #-----| False -> Block 25 #-----| True -> Block 24 -# 1306| Block 17 -# 1306| r1306_12(glval) = VariableAddress[#temp1306:9] : -# 1306| m1306_13(long) = Store[#temp1306:9] : &:r1306_12, r1306_2 +# 1308| Block 17 +# 1308| r1308_12(glval) = VariableAddress[#temp1308:9] : +# 1308| m1308_13(long) = Store[#temp1308:9] : &:r1308_12, r1308_2 #-----| Goto -> Block 16 -# 1306| Block 18 -# 1306| r1306_14(glval) = VariableAddress[y] : -# 1306| r1306_15(long) = Load[y] : &:r1306_14, m1299_10 -# 1306| r1306_16(glval) = VariableAddress[#temp1306:9] : -# 1306| m1306_17(long) = Store[#temp1306:9] : &:r1306_16, r1306_15 +# 1308| Block 18 +# 1308| r1308_14(glval) = VariableAddress[y] : +# 1308| r1308_15(long) = Load[y] : &:r1308_14, m1301_10 +# 1308| r1308_16(glval) = VariableAddress[#temp1308:9] : +# 1308| m1308_17(long) = Store[#temp1308:9] : &:r1308_16, r1308_15 #-----| Goto -> Block 16 -# 1308| Block 19 -# 1308| m1308_6(int) = Phi : from 20:m1308_12, from 26:m1308_34 -# 1308| r1308_7(glval) = VariableAddress[#temp1308:9] : -# 1308| r1308_8(int) = Load[#temp1308:9] : &:r1308_7, m1308_6 -# 1308| r1308_9(glval) = VariableAddress[z] : -# 1308| m1308_10(int) = Store[z] : &:r1308_9, r1308_8 -# 1309| v1309_1(void) = NoOp : -# 1299| v1299_11(void) = ReturnVoid : -# 1299| v1299_12(void) = AliasedUse : m1299_3 -# 1299| v1299_13(void) = ExitFunction : +# 1310| Block 19 +# 1310| m1310_6(int) = Phi : from 20:m1310_12, from 26:m1310_34 +# 1310| r1310_7(glval) = VariableAddress[#temp1310:9] : +# 1310| r1310_8(int) = Load[#temp1310:9] : &:r1310_7, m1310_6 +# 1310| r1310_9(glval) = VariableAddress[z] : +# 1310| m1310_10(int) = Store[z] : &:r1310_9, r1310_8 +# 1311| v1311_1(void) = NoOp : +# 1301| v1301_11(void) = ReturnVoid : +# 1301| v1301_12(void) = AliasedUse : m1301_3 +# 1301| v1301_13(void) = ExitFunction : -# 1308| Block 20 -# 1308| r1308_11(glval) = VariableAddress[#temp1308:9] : -# 1308| m1308_12(int) = Store[#temp1308:9] : &:r1308_11, r1308_18 +# 1310| Block 20 +# 1310| r1310_11(glval) = VariableAddress[#temp1310:9] : +# 1310| m1310_12(int) = Store[#temp1310:9] : &:r1310_11, r1310_18 #-----| Goto -> Block 19 -# 1308| Block 21 -# 1308| r1308_13(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_14(bool) = Constant[0] : -# 1308| m1308_15(bool) = Store[#temp1308:10] : &:r1308_13, r1308_14 +# 1310| Block 21 +# 1310| r1310_13(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_14(bool) = Constant[0] : +# 1310| m1310_15(bool) = Store[#temp1310:10] : &:r1310_13, r1310_14 #-----| Goto -> Block 22 -# 1308| Block 22 -# 1308| m1308_16(bool) = Phi : from 21:m1308_15, from 23:m1308_22 -# 1308| r1308_17(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_18(bool) = Load[#temp1308:10] : &:r1308_17, m1308_16 -# 1308| v1308_19(void) = ConditionalBranch : r1308_18 +# 1310| Block 22 +# 1310| m1310_16(bool) = Phi : from 21:m1310_15, from 23:m1310_22 +# 1310| r1310_17(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_18(bool) = Load[#temp1310:10] : &:r1310_17, m1310_16 +# 1310| v1310_19(void) = ConditionalBranch : r1310_18 #-----| False -> Block 26 #-----| True -> Block 20 -# 1308| Block 23 -# 1308| r1308_20(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_21(bool) = Constant[1] : -# 1308| m1308_22(bool) = Store[#temp1308:10] : &:r1308_20, r1308_21 +# 1310| Block 23 +# 1310| r1310_20(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_21(bool) = Constant[1] : +# 1310| m1310_22(bool) = Store[#temp1310:10] : &:r1310_20, r1310_21 #-----| Goto -> Block 22 -# 1308| Block 24 -# 1308| r1308_23(glval) = VariableAddress[b] : -# 1308| r1308_24(bool) = Load[b] : &:r1308_23, m1299_6 -# 1308| v1308_25(void) = ConditionalBranch : r1308_24 +# 1310| Block 24 +# 1310| r1310_23(glval) = VariableAddress[b] : +# 1310| r1310_24(bool) = Load[b] : &:r1310_23, m1301_6 +# 1310| v1310_25(void) = ConditionalBranch : r1310_24 #-----| False -> Block 25 #-----| True -> Block 23 -# 1308| Block 25 -# 1308| r1308_26(glval) = VariableAddress[y] : -# 1308| r1308_27(long) = Load[y] : &:r1308_26, m1299_10 -# 1308| r1308_28(long) = Constant[0] : -# 1308| r1308_29(bool) = CompareNE : r1308_27, r1308_28 -# 1308| v1308_30(void) = ConditionalBranch : r1308_29 +# 1310| Block 25 +# 1310| r1310_26(glval) = VariableAddress[y] : +# 1310| r1310_27(long) = Load[y] : &:r1310_26, m1301_10 +# 1310| r1310_28(long) = Constant[0] : +# 1310| r1310_29(bool) = CompareNE : r1310_27, r1310_28 +# 1310| v1310_30(void) = ConditionalBranch : r1310_29 #-----| False -> Block 21 #-----| True -> Block 23 -# 1308| Block 26 -# 1308| r1308_31(glval) = VariableAddress[x] : -# 1308| r1308_32(int) = Load[x] : &:r1308_31, m1299_8 -# 1308| r1308_33(glval) = VariableAddress[#temp1308:9] : -# 1308| m1308_34(int) = Store[#temp1308:9] : &:r1308_33, r1308_32 +# 1310| Block 26 +# 1310| r1310_31(glval) = VariableAddress[x] : +# 1310| r1310_32(int) = Load[x] : &:r1310_31, m1301_8 +# 1310| r1310_33(glval) = VariableAddress[#temp1310:9] : +# 1310| m1310_34(int) = Store[#temp1310:9] : &:r1310_33, r1310_32 #-----| Goto -> Block 19 -# 1314| int shortCircuitConditional(int, int) -# 1314| Block 0 -# 1314| v1314_1(void) = EnterFunction : -# 1314| m1314_2(unknown) = AliasedDefinition : -# 1314| m1314_3(unknown) = InitializeNonLocal : -# 1314| m1314_4(unknown) = Chi : total:m1314_2, partial:m1314_3 -# 1314| r1314_5(glval) = VariableAddress[x] : -# 1314| m1314_6(int) = InitializeParameter[x] : &:r1314_5 -# 1314| r1314_7(glval) = VariableAddress[y] : -# 1314| m1314_8(int) = InitializeParameter[y] : &:r1314_7 -# 1315| r1315_1(glval) = VariableAddress[#return] : -# 1315| r1315_2(glval) = FunctionAddress[predicateA] : -# 1315| r1315_3(bool) = Call[predicateA] : func:r1315_2 -# 1315| m1315_4(unknown) = ^CallSideEffect : ~m1314_4 -# 1315| m1315_5(unknown) = Chi : total:m1314_4, partial:m1315_4 -# 1315| v1315_6(void) = ConditionalBranch : r1315_3 +# 1316| int shortCircuitConditional(int, int) +# 1316| Block 0 +# 1316| v1316_1(void) = EnterFunction : +# 1316| m1316_2(unknown) = AliasedDefinition : +# 1316| m1316_3(unknown) = InitializeNonLocal : +# 1316| m1316_4(unknown) = Chi : total:m1316_2, partial:m1316_3 +# 1316| r1316_5(glval) = VariableAddress[x] : +# 1316| m1316_6(int) = InitializeParameter[x] : &:r1316_5 +# 1316| r1316_7(glval) = VariableAddress[y] : +# 1316| m1316_8(int) = InitializeParameter[y] : &:r1316_7 +# 1317| r1317_1(glval) = VariableAddress[#return] : +# 1317| r1317_2(glval) = FunctionAddress[predicateA] : +# 1317| r1317_3(bool) = Call[predicateA] : func:r1317_2 +# 1317| m1317_4(unknown) = ^CallSideEffect : ~m1316_4 +# 1317| m1317_5(unknown) = Chi : total:m1316_4, partial:m1317_4 +# 1317| v1317_6(void) = ConditionalBranch : r1317_3 #-----| False -> Block 4 #-----| True -> Block 2 -# 1315| Block 1 -# 1315| m1315_7(unknown) = Phi : from 3:~m1315_15, from 4:~m1315_21 -# 1315| m1315_8(int) = Phi : from 3:m1315_20, from 4:m1315_25 -# 1315| r1315_9(glval) = VariableAddress[#temp1315:12] : -# 1315| r1315_10(int) = Load[#temp1315:12] : &:r1315_9, m1315_8 -# 1315| m1315_11(int) = Store[#return] : &:r1315_1, r1315_10 -# 1314| r1314_9(glval) = VariableAddress[#return] : -# 1314| v1314_10(void) = ReturnValue : &:r1314_9, m1315_11 -# 1314| v1314_11(void) = AliasedUse : ~m1315_7 -# 1314| v1314_12(void) = ExitFunction : +# 1317| Block 1 +# 1317| m1317_7(unknown) = Phi : from 3:~m1317_15, from 4:~m1317_21 +# 1317| m1317_8(int) = Phi : from 3:m1317_20, from 4:m1317_25 +# 1317| r1317_9(glval) = VariableAddress[#temp1317:12] : +# 1317| r1317_10(int) = Load[#temp1317:12] : &:r1317_9, m1317_8 +# 1317| m1317_11(int) = Store[#return] : &:r1317_1, r1317_10 +# 1316| r1316_9(glval) = VariableAddress[#return] : +# 1316| v1316_10(void) = ReturnValue : &:r1316_9, m1317_11 +# 1316| v1316_11(void) = AliasedUse : ~m1317_7 +# 1316| v1316_12(void) = ExitFunction : -# 1315| Block 2 -# 1315| r1315_12(glval) = FunctionAddress[predicateB] : -# 1315| r1315_13(bool) = Call[predicateB] : func:r1315_12 -# 1315| m1315_14(unknown) = ^CallSideEffect : ~m1315_5 -# 1315| m1315_15(unknown) = Chi : total:m1315_5, partial:m1315_14 -# 1315| v1315_16(void) = ConditionalBranch : r1315_13 +# 1317| Block 2 +# 1317| r1317_12(glval) = FunctionAddress[predicateB] : +# 1317| r1317_13(bool) = Call[predicateB] : func:r1317_12 +# 1317| m1317_14(unknown) = ^CallSideEffect : ~m1317_5 +# 1317| m1317_15(unknown) = Chi : total:m1317_5, partial:m1317_14 +# 1317| v1317_16(void) = ConditionalBranch : r1317_13 #-----| False -> Block 4 #-----| True -> Block 3 -# 1315| Block 3 -# 1315| r1315_17(glval) = VariableAddress[x] : -# 1315| r1315_18(int) = Load[x] : &:r1315_17, m1314_6 -# 1315| r1315_19(glval) = VariableAddress[#temp1315:12] : -# 1315| m1315_20(int) = Store[#temp1315:12] : &:r1315_19, r1315_18 +# 1317| Block 3 +# 1317| r1317_17(glval) = VariableAddress[x] : +# 1317| r1317_18(int) = Load[x] : &:r1317_17, m1316_6 +# 1317| r1317_19(glval) = VariableAddress[#temp1317:12] : +# 1317| m1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 #-----| Goto -> Block 1 -# 1315| Block 4 -# 1315| m1315_21(unknown) = Phi : from 0:~m1315_5, from 2:~m1315_15 -# 1315| r1315_22(glval) = VariableAddress[y] : -# 1315| r1315_23(int) = Load[y] : &:r1315_22, m1314_8 -# 1315| r1315_24(glval) = VariableAddress[#temp1315:12] : -# 1315| m1315_25(int) = Store[#temp1315:12] : &:r1315_24, r1315_23 +# 1317| Block 4 +# 1317| m1317_21(unknown) = Phi : from 0:~m1317_5, from 2:~m1317_15 +# 1317| r1317_22(glval) = VariableAddress[y] : +# 1317| r1317_23(int) = Load[y] : &:r1317_22, m1316_8 +# 1317| r1317_24(glval) = VariableAddress[#temp1317:12] : +# 1317| m1317_25(int) = Store[#temp1317:12] : &:r1317_24, r1317_23 #-----| Goto -> Block 1 -# 1320| void f(int*) -# 1320| Block 0 -# 1320| v1320_1(void) = EnterFunction : -# 1320| m1320_2(unknown) = AliasedDefinition : -# 1320| m1320_3(unknown) = InitializeNonLocal : -# 1320| m1320_4(unknown) = Chi : total:m1320_2, partial:m1320_3 -# 1320| r1320_5(glval) = VariableAddress[p] : -# 1320| m1320_6(int *) = InitializeParameter[p] : &:r1320_5 -# 1320| r1320_7(int *) = Load[p] : &:r1320_5, m1320_6 -# 1320| m1320_8(unknown) = InitializeIndirection[p] : &:r1320_7 -# 1322| r1322_1(glval) = FunctionAddress[operator new] : -# 1322| r1322_2(unsigned long) = Constant[4] : -# 1322| r1322_3(glval) = VariableAddress[p] : -# 1322| r1322_4(int *) = Load[p] : &:r1322_3, m1320_6 -# 1322| r1322_5(void *) = Convert : r1322_4 -# 1322| r1322_6(void *) = Call[operator new] : func:r1322_1, 0:r1322_2, 1:r1322_5 -# 1322| m1322_7(unknown) = ^CallSideEffect : ~m1320_4 -# 1322| m1322_8(unknown) = Chi : total:m1320_4, partial:m1322_7 -# 1322| m1322_9(unknown) = ^InitializeDynamicAllocation : &:r1322_6 -# 1322| r1322_10(int *) = Convert : r1322_6 -# 1323| v1323_1(void) = NoOp : -# 1320| v1320_9(void) = ReturnIndirection[p] : &:r1320_7, m1320_8 -# 1320| v1320_10(void) = ReturnVoid : -# 1320| v1320_11(void) = AliasedUse : ~m1322_8 -# 1320| v1320_12(void) = ExitFunction : +# 1322| void f(int*) +# 1322| Block 0 +# 1322| v1322_1(void) = EnterFunction : +# 1322| m1322_2(unknown) = AliasedDefinition : +# 1322| m1322_3(unknown) = InitializeNonLocal : +# 1322| m1322_4(unknown) = Chi : total:m1322_2, partial:m1322_3 +# 1322| r1322_5(glval) = VariableAddress[p] : +# 1322| m1322_6(int *) = InitializeParameter[p] : &:r1322_5 +# 1322| r1322_7(int *) = Load[p] : &:r1322_5, m1322_6 +# 1322| m1322_8(unknown) = InitializeIndirection[p] : &:r1322_7 +# 1324| r1324_1(glval) = FunctionAddress[operator new] : +# 1324| r1324_2(unsigned long) = Constant[4] : +# 1324| r1324_3(glval) = VariableAddress[p] : +# 1324| r1324_4(int *) = Load[p] : &:r1324_3, m1322_6 +# 1324| r1324_5(void *) = Convert : r1324_4 +# 1324| r1324_6(void *) = Call[operator new] : func:r1324_1, 0:r1324_2, 1:r1324_5 +# 1324| m1324_7(unknown) = ^CallSideEffect : ~m1322_4 +# 1324| m1324_8(unknown) = Chi : total:m1322_4, partial:m1324_7 +# 1324| m1324_9(unknown) = ^InitializeDynamicAllocation : &:r1324_6 +# 1324| r1324_10(int *) = Convert : r1324_6 +# 1325| v1325_1(void) = NoOp : +# 1322| v1322_9(void) = ReturnIndirection[p] : &:r1322_7, m1322_8 +# 1322| v1322_10(void) = ReturnVoid : +# 1322| v1322_11(void) = AliasedUse : ~m1324_8 +# 1322| v1322_12(void) = ExitFunction : -# 1326| Point defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(Point) = Constant[0] : -# 1327| m1327_3(Point) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_3 -# 1326| v1326_7(void) = AliasedUse : m1326_3 -# 1326| v1326_8(void) = ExitFunction : +# 1328| Point defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(Point) = Constant[0] : +# 1329| m1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_3 +# 1328| v1328_7(void) = AliasedUse : m1328_3 +# 1328| v1328_8(void) = ExitFunction : -# 1326| String defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| m1327_2(String) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[String] : -# 1327| v1327_4(void) = Call[String] : func:r1327_3, this:r1327_1 -# 1327| m1327_5(unknown) = ^CallSideEffect : ~m1326_4 -# 1327| m1327_6(unknown) = Chi : total:m1326_4, partial:m1327_5 -# 1327| m1327_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1327| m1327_8(String) = Chi : total:m1327_2, partial:m1327_7 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_8 -# 1326| v1326_7(void) = AliasedUse : ~m1327_6 -# 1326| v1326_8(void) = ExitFunction : +# 1328| String defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| m1329_2(String) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[String] : +# 1329| v1329_4(void) = Call[String] : func:r1329_3, this:r1329_1 +# 1329| m1329_5(unknown) = ^CallSideEffect : ~m1328_4 +# 1329| m1329_6(unknown) = Chi : total:m1328_4, partial:m1329_5 +# 1329| m1329_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1329| m1329_8(String) = Chi : total:m1329_2, partial:m1329_7 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_8 +# 1328| v1328_7(void) = AliasedUse : ~m1329_6 +# 1328| v1328_8(void) = ExitFunction : -# 1326| copy_constructor defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| m1327_2(copy_constructor) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[copy_constructor] : -# 1327| v1327_4(void) = Call[copy_constructor] : func:r1327_3, this:r1327_1 -# 1327| m1327_5(unknown) = ^CallSideEffect : ~m1326_4 -# 1327| m1327_6(unknown) = Chi : total:m1326_4, partial:m1327_5 -# 1327| m1327_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1327| m1327_8(copy_constructor) = Chi : total:m1327_2, partial:m1327_7 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_8 -# 1326| v1326_7(void) = AliasedUse : ~m1327_6 -# 1326| v1326_8(void) = ExitFunction : +# 1328| copy_constructor defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| m1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[copy_constructor] : +# 1329| v1329_4(void) = Call[copy_constructor] : func:r1329_3, this:r1329_1 +# 1329| m1329_5(unknown) = ^CallSideEffect : ~m1328_4 +# 1329| m1329_6(unknown) = Chi : total:m1328_4, partial:m1329_5 +# 1329| m1329_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1329| m1329_8(copy_constructor) = Chi : total:m1329_2, partial:m1329_7 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_8 +# 1328| v1328_7(void) = AliasedUse : ~m1329_6 +# 1328| v1328_8(void) = ExitFunction : -# 1326| destructor_only defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| m1326_2(unknown) = AliasedDefinition : -# 1326| m1326_3(unknown) = InitializeNonLocal : -# 1326| m1326_4(unknown) = Chi : total:m1326_2, partial:m1326_3 -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(destructor_only) = Constant[0] : -# 1327| m1327_3(destructor_only) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_5(glval) = VariableAddress[#return] : -# 1326| v1326_6(void) = ReturnValue : &:r1326_5, m1327_3 -# 1326| v1326_7(void) = AliasedUse : m1326_3 -# 1326| v1326_8(void) = ExitFunction : +# 1328| destructor_only defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| m1328_2(unknown) = AliasedDefinition : +# 1328| m1328_3(unknown) = InitializeNonLocal : +# 1328| m1328_4(unknown) = Chi : total:m1328_2, partial:m1328_3 +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(destructor_only) = Constant[0] : +# 1329| m1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_5(glval) = VariableAddress[#return] : +# 1328| v1328_6(void) = ReturnValue : &:r1328_5, m1329_3 +# 1328| v1328_7(void) = AliasedUse : m1328_3 +# 1328| v1328_8(void) = ExitFunction : -# 1365| void temporary_string() -# 1365| Block 0 -# 1365| v1365_1(void) = EnterFunction : -# 1365| m1365_2(unknown) = AliasedDefinition : -# 1365| m1365_3(unknown) = InitializeNonLocal : -# 1365| m1365_4(unknown) = Chi : total:m1365_2, partial:m1365_3 -# 1366| r1366_1(glval) = VariableAddress[s] : -# 1366| r1366_2(glval) = FunctionAddress[returnValue] : -# 1366| r1366_3(String) = Call[returnValue] : func:r1366_2 -# 1366| m1366_4(unknown) = ^CallSideEffect : ~m1365_4 -# 1366| m1366_5(unknown) = Chi : total:m1365_4, partial:m1366_4 -# 1366| m1366_6(String) = Store[s] : &:r1366_1, r1366_3 -# 1367| r1367_1(glval) = VariableAddress[rs] : -# 1367| r1367_2(glval) = VariableAddress[#temp1367:24] : -# 1367| r1367_3(glval) = FunctionAddress[returnValue] : -# 1367| r1367_4(String) = Call[returnValue] : func:r1367_3 -# 1367| m1367_5(unknown) = ^CallSideEffect : ~m1366_5 -# 1367| m1367_6(unknown) = Chi : total:m1366_5, partial:m1367_5 -# 1367| m1367_7(String) = Store[#temp1367:24] : &:r1367_2, r1367_4 -# 1367| r1367_8(glval) = Convert : r1367_2 -# 1367| r1367_9(String &) = CopyValue : r1367_8 -# 1367| m1367_10(String &) = Store[rs] : &:r1367_1, r1367_9 -# 1369| r1369_1(glval) = FunctionAddress[acceptRef] : -# 1369| r1369_2(glval) = VariableAddress[s] : -# 1369| r1369_3(glval) = Convert : r1369_2 -# 1369| r1369_4(String &) = CopyValue : r1369_3 -# 1369| v1369_5(void) = Call[acceptRef] : func:r1369_1, 0:r1369_4 -# 1369| m1369_6(unknown) = ^CallSideEffect : ~m1367_6 -# 1369| m1369_7(unknown) = Chi : total:m1367_6, partial:m1369_6 -# 1369| v1369_8(void) = ^BufferReadSideEffect[0] : &:r1369_4, ~m1366_6 -# 1370| r1370_1(glval) = FunctionAddress[acceptRef] : -# 1370| r1370_2(glval) = VariableAddress[#temp1370:23] : -# 1370| m1370_3(String) = Uninitialized[#temp1370:23] : &:r1370_2 -# 1370| r1370_4(glval) = FunctionAddress[String] : -# 1370| r1370_5(glval) = StringConstant["foo"] : -# 1370| r1370_6(char *) = Convert : r1370_5 -# 1370| v1370_7(void) = Call[String] : func:r1370_4, this:r1370_2, 0:r1370_6 -# 1370| m1370_8(unknown) = ^CallSideEffect : ~m1369_7 -# 1370| m1370_9(unknown) = Chi : total:m1369_7, partial:m1370_8 -# 1370| v1370_10(void) = ^BufferReadSideEffect[0] : &:r1370_6, ~m1365_3 -# 1370| m1370_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1370_2 -# 1370| m1370_12(String) = Chi : total:m1370_3, partial:m1370_11 -# 1370| r1370_13(String &) = CopyValue : r1370_2 -# 1370| v1370_14(void) = Call[acceptRef] : func:r1370_1, 0:r1370_13 -# 1370| m1370_15(unknown) = ^CallSideEffect : ~m1370_9 -# 1370| m1370_16(unknown) = Chi : total:m1370_9, partial:m1370_15 -# 1370| v1370_17(void) = ^BufferReadSideEffect[0] : &:r1370_13, ~m1370_12 -# 1371| r1371_1(glval) = FunctionAddress[acceptValue] : -# 1371| r1371_2(glval) = VariableAddress[#temp1371:17] : -# 1371| m1371_3(String) = Uninitialized[#temp1371:17] : &:r1371_2 -# 1371| r1371_4(glval) = FunctionAddress[String] : -# 1371| r1371_5(glval) = VariableAddress[s] : -# 1371| r1371_6(glval) = Convert : r1371_5 -# 1371| r1371_7(String &) = CopyValue : r1371_6 -# 1371| v1371_8(void) = Call[String] : func:r1371_4, this:r1371_2, 0:r1371_7 -# 1371| m1371_9(unknown) = ^CallSideEffect : ~m1370_16 -# 1371| m1371_10(unknown) = Chi : total:m1370_16, partial:m1371_9 -# 1371| v1371_11(void) = ^BufferReadSideEffect[0] : &:r1371_7, ~m1366_6 -# 1371| m1371_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1371_2 -# 1371| m1371_13(String) = Chi : total:m1371_3, partial:m1371_12 -# 1371| r1371_14(String) = Load[#temp1371:17] : &:r1371_2, m1371_13 -# 1371| v1371_15(void) = Call[acceptValue] : func:r1371_1, 0:r1371_14 -# 1371| m1371_16(unknown) = ^CallSideEffect : ~m1371_10 -# 1371| m1371_17(unknown) = Chi : total:m1371_10, partial:m1371_16 -# 1372| r1372_1(glval) = FunctionAddress[acceptValue] : -# 1372| r1372_2(glval) = VariableAddress[#temp1372:25] : -# 1372| m1372_3(String) = Uninitialized[#temp1372:25] : &:r1372_2 +# 1367| void temporary_string() +# 1367| Block 0 +# 1367| v1367_1(void) = EnterFunction : +# 1367| m1367_2(unknown) = AliasedDefinition : +# 1367| m1367_3(unknown) = InitializeNonLocal : +# 1367| m1367_4(unknown) = Chi : total:m1367_2, partial:m1367_3 +# 1368| r1368_1(glval) = VariableAddress[s] : +# 1368| r1368_2(glval) = FunctionAddress[returnValue] : +# 1368| r1368_3(String) = Call[returnValue] : func:r1368_2 +# 1368| m1368_4(unknown) = ^CallSideEffect : ~m1367_4 +# 1368| m1368_5(unknown) = Chi : total:m1367_4, partial:m1368_4 +# 1368| m1368_6(String) = Store[s] : &:r1368_1, r1368_3 +# 1369| r1369_1(glval) = VariableAddress[rs] : +# 1369| r1369_2(glval) = VariableAddress[#temp1369:24] : +# 1369| r1369_3(glval) = FunctionAddress[returnValue] : +# 1369| r1369_4(String) = Call[returnValue] : func:r1369_3 +# 1369| m1369_5(unknown) = ^CallSideEffect : ~m1368_5 +# 1369| m1369_6(unknown) = Chi : total:m1368_5, partial:m1369_5 +# 1369| m1369_7(String) = Store[#temp1369:24] : &:r1369_2, r1369_4 +# 1369| r1369_8(glval) = Convert : r1369_2 +# 1369| r1369_9(String &) = CopyValue : r1369_8 +# 1369| m1369_10(String &) = Store[rs] : &:r1369_1, r1369_9 +# 1371| r1371_1(glval) = FunctionAddress[acceptRef] : +# 1371| r1371_2(glval) = VariableAddress[s] : +# 1371| r1371_3(glval) = Convert : r1371_2 +# 1371| r1371_4(String &) = CopyValue : r1371_3 +# 1371| v1371_5(void) = Call[acceptRef] : func:r1371_1, 0:r1371_4 +# 1371| m1371_6(unknown) = ^CallSideEffect : ~m1369_6 +# 1371| m1371_7(unknown) = Chi : total:m1369_6, partial:m1371_6 +# 1371| v1371_8(void) = ^BufferReadSideEffect[0] : &:r1371_4, ~m1368_6 +# 1372| r1372_1(glval) = FunctionAddress[acceptRef] : +# 1372| r1372_2(glval) = VariableAddress[#temp1372:23] : +# 1372| m1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 # 1372| r1372_4(glval) = FunctionAddress[String] : # 1372| r1372_5(glval) = StringConstant["foo"] : # 1372| r1372_6(char *) = Convert : r1372_5 # 1372| v1372_7(void) = Call[String] : func:r1372_4, this:r1372_2, 0:r1372_6 -# 1372| m1372_8(unknown) = ^CallSideEffect : ~m1371_17 -# 1372| m1372_9(unknown) = Chi : total:m1371_17, partial:m1372_8 -# 1372| v1372_10(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m1365_3 +# 1372| m1372_8(unknown) = ^CallSideEffect : ~m1371_7 +# 1372| m1372_9(unknown) = Chi : total:m1371_7, partial:m1372_8 +# 1372| v1372_10(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m1367_3 # 1372| m1372_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_2 # 1372| m1372_12(String) = Chi : total:m1372_3, partial:m1372_11 -# 1372| r1372_13(String) = Load[#temp1372:25] : &:r1372_2, m1372_12 -# 1372| v1372_14(void) = Call[acceptValue] : func:r1372_1, 0:r1372_13 +# 1372| r1372_13(String &) = CopyValue : r1372_2 +# 1372| v1372_14(void) = Call[acceptRef] : func:r1372_1, 0:r1372_13 # 1372| m1372_15(unknown) = ^CallSideEffect : ~m1372_9 # 1372| m1372_16(unknown) = Chi : total:m1372_9, partial:m1372_15 -# 1373| r1373_1(glval) = VariableAddress[#temp1373:5] : -# 1373| m1373_2(String) = Uninitialized[#temp1373:5] : &:r1373_1 -# 1373| r1373_3(glval) = FunctionAddress[String] : -# 1373| v1373_4(void) = Call[String] : func:r1373_3, this:r1373_1 -# 1373| m1373_5(unknown) = ^CallSideEffect : ~m1372_16 -# 1373| m1373_6(unknown) = Chi : total:m1372_16, partial:m1373_5 -# 1373| m1373_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_1 -# 1373| m1373_8(String) = Chi : total:m1373_2, partial:m1373_7 -# 1373| r1373_9(glval) = Convert : r1373_1 -# 1373| r1373_10(glval) = FunctionAddress[c_str] : -# 1373| r1373_11(char *) = Call[c_str] : func:r1373_10, this:r1373_9 -# 1373| m1373_12(unknown) = ^CallSideEffect : ~m1373_6 -# 1373| m1373_13(unknown) = Chi : total:m1373_6, partial:m1373_12 -# 1373| v1373_14(void) = ^IndirectReadSideEffect[-1] : &:r1373_9, m1373_8 -# 1374| r1374_1(glval) = VariableAddress[#temp1374:5] : -# 1374| r1374_2(glval) = FunctionAddress[returnValue] : -# 1374| r1374_3(String) = Call[returnValue] : func:r1374_2 -# 1374| m1374_4(unknown) = ^CallSideEffect : ~m1373_13 -# 1374| m1374_5(unknown) = Chi : total:m1373_13, partial:m1374_4 -# 1374| m1374_6(String) = Store[#temp1374:5] : &:r1374_1, r1374_3 -# 1374| r1374_7(glval) = Convert : r1374_1 -# 1374| r1374_8(glval) = FunctionAddress[c_str] : -# 1374| r1374_9(char *) = Call[c_str] : func:r1374_8, this:r1374_7 -# 1374| m1374_10(unknown) = ^CallSideEffect : ~m1374_5 -# 1374| m1374_11(unknown) = Chi : total:m1374_5, partial:m1374_10 -# 1374| v1374_12(void) = ^IndirectReadSideEffect[-1] : &:r1374_7, m1374_6 +# 1372| v1372_17(void) = ^BufferReadSideEffect[0] : &:r1372_13, ~m1372_12 +# 1373| r1373_1(glval) = FunctionAddress[acceptValue] : +# 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : +# 1373| m1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 +# 1373| r1373_4(glval) = FunctionAddress[String] : +# 1373| r1373_5(glval) = VariableAddress[s] : +# 1373| r1373_6(glval) = Convert : r1373_5 +# 1373| r1373_7(String &) = CopyValue : r1373_6 +# 1373| v1373_8(void) = Call[String] : func:r1373_4, this:r1373_2, 0:r1373_7 +# 1373| m1373_9(unknown) = ^CallSideEffect : ~m1372_16 +# 1373| m1373_10(unknown) = Chi : total:m1372_16, partial:m1373_9 +# 1373| v1373_11(void) = ^BufferReadSideEffect[0] : &:r1373_7, ~m1368_6 +# 1373| m1373_12(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_2 +# 1373| m1373_13(String) = Chi : total:m1373_3, partial:m1373_12 +# 1373| r1373_14(String) = Load[#temp1373:17] : &:r1373_2, m1373_13 +# 1373| v1373_15(void) = Call[acceptValue] : func:r1373_1, 0:r1373_14 +# 1373| m1373_16(unknown) = ^CallSideEffect : ~m1373_10 +# 1373| m1373_17(unknown) = Chi : total:m1373_10, partial:m1373_16 +# 1374| r1374_1(glval) = FunctionAddress[acceptValue] : +# 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : +# 1374| m1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 +# 1374| r1374_4(glval) = FunctionAddress[String] : +# 1374| r1374_5(glval) = StringConstant["foo"] : +# 1374| r1374_6(char *) = Convert : r1374_5 +# 1374| v1374_7(void) = Call[String] : func:r1374_4, this:r1374_2, 0:r1374_6 +# 1374| m1374_8(unknown) = ^CallSideEffect : ~m1373_17 +# 1374| m1374_9(unknown) = Chi : total:m1373_17, partial:m1374_8 +# 1374| v1374_10(void) = ^BufferReadSideEffect[0] : &:r1374_6, ~m1367_3 +# 1374| m1374_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_2 +# 1374| m1374_12(String) = Chi : total:m1374_3, partial:m1374_11 +# 1374| r1374_13(String) = Load[#temp1374:25] : &:r1374_2, m1374_12 +# 1374| v1374_14(void) = Call[acceptValue] : func:r1374_1, 0:r1374_13 +# 1374| m1374_15(unknown) = ^CallSideEffect : ~m1374_9 +# 1374| m1374_16(unknown) = Chi : total:m1374_9, partial:m1374_15 +# 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : +# 1375| m1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 +# 1375| r1375_3(glval) = FunctionAddress[String] : +# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 +# 1375| m1375_5(unknown) = ^CallSideEffect : ~m1374_16 +# 1375| m1375_6(unknown) = Chi : total:m1374_16, partial:m1375_5 +# 1375| m1375_7(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 +# 1375| m1375_8(String) = Chi : total:m1375_2, partial:m1375_7 +# 1375| r1375_9(glval) = Convert : r1375_1 +# 1375| r1375_10(glval) = FunctionAddress[c_str] : +# 1375| r1375_11(char *) = Call[c_str] : func:r1375_10, this:r1375_9 +# 1375| m1375_12(unknown) = ^CallSideEffect : ~m1375_6 +# 1375| m1375_13(unknown) = Chi : total:m1375_6, partial:m1375_12 +# 1375| v1375_14(void) = ^IndirectReadSideEffect[-1] : &:r1375_9, m1375_8 # 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval) = FunctionAddress[defaultConstruct] : -# 1376| r1376_3(String) = Call[defaultConstruct] : func:r1376_2 -# 1376| m1376_4(unknown) = ^CallSideEffect : ~m1374_11 -# 1376| m1376_5(unknown) = Chi : total:m1374_11, partial:m1376_4 +# 1376| r1376_2(glval) = FunctionAddress[returnValue] : +# 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 +# 1376| m1376_4(unknown) = ^CallSideEffect : ~m1375_13 +# 1376| m1376_5(unknown) = Chi : total:m1375_13, partial:m1376_4 # 1376| m1376_6(String) = Store[#temp1376:5] : &:r1376_1, r1376_3 -# 1377| v1377_1(void) = NoOp : -# 1365| v1365_5(void) = ReturnVoid : -# 1365| v1365_6(void) = AliasedUse : ~m1376_5 -# 1365| v1365_7(void) = ExitFunction : +# 1376| r1376_7(glval) = Convert : r1376_1 +# 1376| r1376_8(glval) = FunctionAddress[c_str] : +# 1376| r1376_9(char *) = Call[c_str] : func:r1376_8, this:r1376_7 +# 1376| m1376_10(unknown) = ^CallSideEffect : ~m1376_5 +# 1376| m1376_11(unknown) = Chi : total:m1376_5, partial:m1376_10 +# 1376| v1376_12(void) = ^IndirectReadSideEffect[-1] : &:r1376_7, m1376_6 +# 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : +# 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : +# 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 +# 1378| m1378_4(unknown) = ^CallSideEffect : ~m1376_11 +# 1378| m1378_5(unknown) = Chi : total:m1376_11, partial:m1378_4 +# 1378| m1378_6(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 +# 1379| v1379_1(void) = NoOp : +# 1367| v1367_5(void) = ReturnVoid : +# 1367| v1367_6(void) = AliasedUse : ~m1378_5 +# 1367| v1367_7(void) = ExitFunction : -# 1379| void temporary_destructor_only() -# 1379| Block 0 -# 1379| v1379_1(void) = EnterFunction : -# 1379| m1379_2(unknown) = AliasedDefinition : -# 1379| m1379_3(unknown) = InitializeNonLocal : -# 1379| m1379_4(unknown) = Chi : total:m1379_2, partial:m1379_3 -# 1380| r1380_1(glval) = VariableAddress[d] : -# 1380| r1380_2(glval) = FunctionAddress[returnValue] : -# 1380| r1380_3(destructor_only) = Call[returnValue] : func:r1380_2 -# 1380| m1380_4(unknown) = ^CallSideEffect : ~m1379_4 -# 1380| m1380_5(unknown) = Chi : total:m1379_4, partial:m1380_4 -# 1380| m1380_6(destructor_only) = Store[d] : &:r1380_1, r1380_3 -# 1381| r1381_1(glval) = VariableAddress[rd] : -# 1381| r1381_2(glval) = VariableAddress[#temp1381:33] : -# 1381| r1381_3(glval) = FunctionAddress[returnValue] : -# 1381| r1381_4(destructor_only) = Call[returnValue] : func:r1381_3 -# 1381| m1381_5(unknown) = ^CallSideEffect : ~m1380_5 -# 1381| m1381_6(unknown) = Chi : total:m1380_5, partial:m1381_5 -# 1381| m1381_7(destructor_only) = Store[#temp1381:33] : &:r1381_2, r1381_4 -# 1381| r1381_8(glval) = Convert : r1381_2 -# 1381| r1381_9(destructor_only &) = CopyValue : r1381_8 -# 1381| m1381_10(destructor_only &) = Store[rd] : &:r1381_1, r1381_9 -# 1382| r1382_1(glval) = VariableAddress[d2] : -# 1382| m1382_2(destructor_only) = Uninitialized[d2] : &:r1382_1 -# 1383| r1383_1(glval) = FunctionAddress[acceptRef] : -# 1383| r1383_2(glval) = VariableAddress[d] : -# 1383| r1383_3(glval) = Convert : r1383_2 -# 1383| r1383_4(destructor_only &) = CopyValue : r1383_3 -# 1383| v1383_5(void) = Call[acceptRef] : func:r1383_1, 0:r1383_4 -# 1383| m1383_6(unknown) = ^CallSideEffect : ~m1381_6 -# 1383| m1383_7(unknown) = Chi : total:m1381_6, partial:m1383_6 -# 1383| v1383_8(void) = ^BufferReadSideEffect[0] : &:r1383_4, ~m1380_6 -# 1384| r1384_1(glval) = FunctionAddress[acceptValue] : -# 1384| r1384_2(glval) = VariableAddress[#temp1384:17] : -# 1384| r1384_3(glval) = VariableAddress[d] : -# 1384| r1384_4(destructor_only) = Load[d] : &:r1384_3, m1380_6 -# 1384| m1384_5(destructor_only) = Store[#temp1384:17] : &:r1384_2, r1384_4 -# 1384| r1384_6(destructor_only) = Load[#temp1384:17] : &:r1384_2, m1384_5 -# 1384| v1384_7(void) = Call[acceptValue] : func:r1384_1, 0:r1384_6 -# 1384| m1384_8(unknown) = ^CallSideEffect : ~m1383_7 -# 1384| m1384_9(unknown) = Chi : total:m1383_7, partial:m1384_8 -# 1385| r1385_1(glval) = VariableAddress[#temp1385:5] : -# 1385| r1385_2(destructor_only) = Constant[0] : -# 1385| m1385_3(destructor_only) = Store[#temp1385:5] : &:r1385_1, r1385_2 -# 1385| r1385_4(glval) = FunctionAddress[method] : -# 1385| v1385_5(void) = Call[method] : func:r1385_4, this:r1385_1 -# 1385| m1385_6(unknown) = ^CallSideEffect : ~m1384_9 -# 1385| m1385_7(unknown) = Chi : total:m1384_9, partial:m1385_6 -# 1385| v1385_8(void) = ^IndirectReadSideEffect[-1] : &:r1385_1, m1385_3 -# 1385| m1385_9(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1385_1 -# 1385| m1385_10(destructor_only) = Chi : total:m1385_3, partial:m1385_9 -# 1386| r1386_1(glval) = VariableAddress[#temp1386:5] : -# 1386| r1386_2(glval) = FunctionAddress[returnValue] : -# 1386| r1386_3(destructor_only) = Call[returnValue] : func:r1386_2 -# 1386| m1386_4(unknown) = ^CallSideEffect : ~m1385_7 -# 1386| m1386_5(unknown) = Chi : total:m1385_7, partial:m1386_4 -# 1386| m1386_6(destructor_only) = Store[#temp1386:5] : &:r1386_1, r1386_3 -# 1386| r1386_7(glval) = FunctionAddress[method] : -# 1386| v1386_8(void) = Call[method] : func:r1386_7, this:r1386_1 -# 1386| m1386_9(unknown) = ^CallSideEffect : ~m1386_5 -# 1386| m1386_10(unknown) = Chi : total:m1386_5, partial:m1386_9 -# 1386| v1386_11(void) = ^IndirectReadSideEffect[-1] : &:r1386_1, m1386_6 -# 1386| m1386_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1386_1 -# 1386| m1386_13(destructor_only) = Chi : total:m1386_6, partial:m1386_12 +# 1381| void temporary_destructor_only() +# 1381| Block 0 +# 1381| v1381_1(void) = EnterFunction : +# 1381| m1381_2(unknown) = AliasedDefinition : +# 1381| m1381_3(unknown) = InitializeNonLocal : +# 1381| m1381_4(unknown) = Chi : total:m1381_2, partial:m1381_3 +# 1382| r1382_1(glval) = VariableAddress[d] : +# 1382| r1382_2(glval) = FunctionAddress[returnValue] : +# 1382| r1382_3(destructor_only) = Call[returnValue] : func:r1382_2 +# 1382| m1382_4(unknown) = ^CallSideEffect : ~m1381_4 +# 1382| m1382_5(unknown) = Chi : total:m1381_4, partial:m1382_4 +# 1382| m1382_6(destructor_only) = Store[d] : &:r1382_1, r1382_3 +# 1383| r1383_1(glval) = VariableAddress[rd] : +# 1383| r1383_2(glval) = VariableAddress[#temp1383:33] : +# 1383| r1383_3(glval) = FunctionAddress[returnValue] : +# 1383| r1383_4(destructor_only) = Call[returnValue] : func:r1383_3 +# 1383| m1383_5(unknown) = ^CallSideEffect : ~m1382_5 +# 1383| m1383_6(unknown) = Chi : total:m1382_5, partial:m1383_5 +# 1383| m1383_7(destructor_only) = Store[#temp1383:33] : &:r1383_2, r1383_4 +# 1383| r1383_8(glval) = Convert : r1383_2 +# 1383| r1383_9(destructor_only &) = CopyValue : r1383_8 +# 1383| m1383_10(destructor_only &) = Store[rd] : &:r1383_1, r1383_9 +# 1384| r1384_1(glval) = VariableAddress[d2] : +# 1384| m1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 +# 1385| r1385_1(glval) = FunctionAddress[acceptRef] : +# 1385| r1385_2(glval) = VariableAddress[d] : +# 1385| r1385_3(glval) = Convert : r1385_2 +# 1385| r1385_4(destructor_only &) = CopyValue : r1385_3 +# 1385| v1385_5(void) = Call[acceptRef] : func:r1385_1, 0:r1385_4 +# 1385| m1385_6(unknown) = ^CallSideEffect : ~m1383_6 +# 1385| m1385_7(unknown) = Chi : total:m1383_6, partial:m1385_6 +# 1385| v1385_8(void) = ^BufferReadSideEffect[0] : &:r1385_4, ~m1382_6 +# 1386| r1386_1(glval) = FunctionAddress[acceptValue] : +# 1386| r1386_2(glval) = VariableAddress[#temp1386:17] : +# 1386| r1386_3(glval) = VariableAddress[d] : +# 1386| r1386_4(destructor_only) = Load[d] : &:r1386_3, m1382_6 +# 1386| m1386_5(destructor_only) = Store[#temp1386:17] : &:r1386_2, r1386_4 +# 1386| r1386_6(destructor_only) = Load[#temp1386:17] : &:r1386_2, m1386_5 +# 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 +# 1386| m1386_8(unknown) = ^CallSideEffect : ~m1385_7 +# 1386| m1386_9(unknown) = Chi : total:m1385_7, partial:m1386_8 +# 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : +# 1387| r1387_2(destructor_only) = Constant[0] : +# 1387| m1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 +# 1387| r1387_4(glval) = FunctionAddress[method] : +# 1387| v1387_5(void) = Call[method] : func:r1387_4, this:r1387_1 +# 1387| m1387_6(unknown) = ^CallSideEffect : ~m1386_9 +# 1387| m1387_7(unknown) = Chi : total:m1386_9, partial:m1387_6 +# 1387| v1387_8(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, m1387_3 +# 1387| m1387_9(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 +# 1387| m1387_10(destructor_only) = Chi : total:m1387_3, partial:m1387_9 # 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval) = FunctionAddress[defaultConstruct] : -# 1388| r1388_3(destructor_only) = Call[defaultConstruct] : func:r1388_2 -# 1388| m1388_4(unknown) = ^CallSideEffect : ~m1386_10 -# 1388| m1388_5(unknown) = Chi : total:m1386_10, partial:m1388_4 +# 1388| r1388_2(glval) = FunctionAddress[returnValue] : +# 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 +# 1388| m1388_4(unknown) = ^CallSideEffect : ~m1387_7 +# 1388| m1388_5(unknown) = Chi : total:m1387_7, partial:m1388_4 # 1388| m1388_6(destructor_only) = Store[#temp1388:5] : &:r1388_1, r1388_3 -# 1389| v1389_1(void) = NoOp : -# 1379| v1379_5(void) = ReturnVoid : -# 1379| v1379_6(void) = AliasedUse : ~m1388_5 -# 1379| v1379_7(void) = ExitFunction : +# 1388| r1388_7(glval) = FunctionAddress[method] : +# 1388| v1388_8(void) = Call[method] : func:r1388_7, this:r1388_1 +# 1388| m1388_9(unknown) = ^CallSideEffect : ~m1388_5 +# 1388| m1388_10(unknown) = Chi : total:m1388_5, partial:m1388_9 +# 1388| v1388_11(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, m1388_6 +# 1388| m1388_12(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 +# 1388| m1388_13(destructor_only) = Chi : total:m1388_6, partial:m1388_12 +# 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : +# 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : +# 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 +# 1390| m1390_4(unknown) = ^CallSideEffect : ~m1388_10 +# 1390| m1390_5(unknown) = Chi : total:m1388_10, partial:m1390_4 +# 1390| m1390_6(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 +# 1391| v1391_1(void) = NoOp : +# 1381| v1381_5(void) = ReturnVoid : +# 1381| v1381_6(void) = AliasedUse : ~m1390_5 +# 1381| v1381_7(void) = ExitFunction : -# 1391| void temporary_copy_constructor() -# 1391| Block 0 -# 1391| v1391_1(void) = EnterFunction : -# 1391| m1391_2(unknown) = AliasedDefinition : -# 1391| m1391_3(unknown) = InitializeNonLocal : -# 1391| m1391_4(unknown) = Chi : total:m1391_2, partial:m1391_3 -# 1392| r1392_1(glval) = VariableAddress[d] : -# 1392| r1392_2(glval) = FunctionAddress[returnValue] : -# 1392| r1392_3(copy_constructor) = Call[returnValue] : func:r1392_2 -# 1392| m1392_4(unknown) = ^CallSideEffect : ~m1391_4 -# 1392| m1392_5(unknown) = Chi : total:m1391_4, partial:m1392_4 -# 1392| m1392_6(copy_constructor) = Store[d] : &:r1392_1, r1392_3 -# 1393| r1393_1(glval) = VariableAddress[rd] : -# 1393| r1393_2(glval) = VariableAddress[#temp1393:34] : -# 1393| r1393_3(glval) = FunctionAddress[returnValue] : -# 1393| r1393_4(copy_constructor) = Call[returnValue] : func:r1393_3 -# 1393| m1393_5(unknown) = ^CallSideEffect : ~m1392_5 -# 1393| m1393_6(unknown) = Chi : total:m1392_5, partial:m1393_5 -# 1393| m1393_7(copy_constructor) = Store[#temp1393:34] : &:r1393_2, r1393_4 -# 1393| r1393_8(glval) = Convert : r1393_2 -# 1393| r1393_9(copy_constructor &) = CopyValue : r1393_8 -# 1393| m1393_10(copy_constructor &) = Store[rd] : &:r1393_1, r1393_9 -# 1394| r1394_1(glval) = VariableAddress[d2] : -# 1394| m1394_2(copy_constructor) = Uninitialized[d2] : &:r1394_1 -# 1394| r1394_3(glval) = FunctionAddress[copy_constructor] : -# 1394| v1394_4(void) = Call[copy_constructor] : func:r1394_3, this:r1394_1 -# 1394| m1394_5(unknown) = ^CallSideEffect : ~m1393_6 -# 1394| m1394_6(unknown) = Chi : total:m1393_6, partial:m1394_5 -# 1394| m1394_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1394_1 -# 1394| m1394_8(copy_constructor) = Chi : total:m1394_2, partial:m1394_7 -# 1395| r1395_1(glval) = FunctionAddress[acceptRef] : -# 1395| r1395_2(glval) = VariableAddress[d] : -# 1395| r1395_3(glval) = Convert : r1395_2 -# 1395| r1395_4(copy_constructor &) = CopyValue : r1395_3 -# 1395| v1395_5(void) = Call[acceptRef] : func:r1395_1, 0:r1395_4 -# 1395| m1395_6(unknown) = ^CallSideEffect : ~m1394_6 -# 1395| m1395_7(unknown) = Chi : total:m1394_6, partial:m1395_6 -# 1395| v1395_8(void) = ^BufferReadSideEffect[0] : &:r1395_4, ~m1392_6 -# 1396| r1396_1(glval) = FunctionAddress[acceptValue] : -# 1396| r1396_2(glval) = VariableAddress[#temp1396:17] : -# 1396| m1396_3(copy_constructor) = Uninitialized[#temp1396:17] : &:r1396_2 -# 1396| r1396_4(glval) = FunctionAddress[copy_constructor] : -# 1396| r1396_5(glval) = VariableAddress[d] : -# 1396| r1396_6(glval) = Convert : r1396_5 -# 1396| r1396_7(copy_constructor &) = CopyValue : r1396_6 -# 1396| v1396_8(void) = Call[copy_constructor] : func:r1396_4, this:r1396_2, 0:r1396_7 -# 1396| m1396_9(unknown) = ^CallSideEffect : ~m1395_7 -# 1396| m1396_10(unknown) = Chi : total:m1395_7, partial:m1396_9 -# 1396| v1396_11(void) = ^BufferReadSideEffect[0] : &:r1396_7, ~m1392_6 -# 1396| m1396_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_2 -# 1396| m1396_13(copy_constructor) = Chi : total:m1396_3, partial:m1396_12 -# 1396| r1396_14(copy_constructor) = Load[#temp1396:17] : &:r1396_2, m1396_13 -# 1396| v1396_15(void) = Call[acceptValue] : func:r1396_1, 0:r1396_14 -# 1396| m1396_16(unknown) = ^CallSideEffect : ~m1396_10 -# 1396| m1396_17(unknown) = Chi : total:m1396_10, partial:m1396_16 -# 1397| r1397_1(glval) = VariableAddress[#temp1397:5] : -# 1397| m1397_2(copy_constructor) = Uninitialized[#temp1397:5] : &:r1397_1 -# 1397| r1397_3(glval) = FunctionAddress[copy_constructor] : -# 1397| v1397_4(void) = Call[copy_constructor] : func:r1397_3, this:r1397_1 -# 1397| m1397_5(unknown) = ^CallSideEffect : ~m1396_17 -# 1397| m1397_6(unknown) = Chi : total:m1396_17, partial:m1397_5 -# 1397| m1397_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| m1397_8(copy_constructor) = Chi : total:m1397_2, partial:m1397_7 -# 1397| r1397_9(glval) = FunctionAddress[method] : -# 1397| v1397_10(void) = Call[method] : func:r1397_9, this:r1397_1 -# 1397| m1397_11(unknown) = ^CallSideEffect : ~m1397_6 -# 1397| m1397_12(unknown) = Chi : total:m1397_6, partial:m1397_11 -# 1397| v1397_13(void) = ^IndirectReadSideEffect[-1] : &:r1397_1, m1397_8 -# 1397| m1397_14(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| m1397_15(copy_constructor) = Chi : total:m1397_8, partial:m1397_14 -# 1398| r1398_1(glval) = VariableAddress[#temp1398:5] : -# 1398| r1398_2(glval) = FunctionAddress[returnValue] : -# 1398| r1398_3(copy_constructor) = Call[returnValue] : func:r1398_2 -# 1398| m1398_4(unknown) = ^CallSideEffect : ~m1397_12 -# 1398| m1398_5(unknown) = Chi : total:m1397_12, partial:m1398_4 -# 1398| m1398_6(copy_constructor) = Store[#temp1398:5] : &:r1398_1, r1398_3 -# 1398| r1398_7(glval) = FunctionAddress[method] : -# 1398| v1398_8(void) = Call[method] : func:r1398_7, this:r1398_1 -# 1398| m1398_9(unknown) = ^CallSideEffect : ~m1398_5 -# 1398| m1398_10(unknown) = Chi : total:m1398_5, partial:m1398_9 -# 1398| v1398_11(void) = ^IndirectReadSideEffect[-1] : &:r1398_1, m1398_6 -# 1398| m1398_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_1 -# 1398| m1398_13(copy_constructor) = Chi : total:m1398_6, partial:m1398_12 +# 1393| void temporary_copy_constructor() +# 1393| Block 0 +# 1393| v1393_1(void) = EnterFunction : +# 1393| m1393_2(unknown) = AliasedDefinition : +# 1393| m1393_3(unknown) = InitializeNonLocal : +# 1393| m1393_4(unknown) = Chi : total:m1393_2, partial:m1393_3 +# 1394| r1394_1(glval) = VariableAddress[d] : +# 1394| r1394_2(glval) = FunctionAddress[returnValue] : +# 1394| r1394_3(copy_constructor) = Call[returnValue] : func:r1394_2 +# 1394| m1394_4(unknown) = ^CallSideEffect : ~m1393_4 +# 1394| m1394_5(unknown) = Chi : total:m1393_4, partial:m1394_4 +# 1394| m1394_6(copy_constructor) = Store[d] : &:r1394_1, r1394_3 +# 1395| r1395_1(glval) = VariableAddress[rd] : +# 1395| r1395_2(glval) = VariableAddress[#temp1395:34] : +# 1395| r1395_3(glval) = FunctionAddress[returnValue] : +# 1395| r1395_4(copy_constructor) = Call[returnValue] : func:r1395_3 +# 1395| m1395_5(unknown) = ^CallSideEffect : ~m1394_5 +# 1395| m1395_6(unknown) = Chi : total:m1394_5, partial:m1395_5 +# 1395| m1395_7(copy_constructor) = Store[#temp1395:34] : &:r1395_2, r1395_4 +# 1395| r1395_8(glval) = Convert : r1395_2 +# 1395| r1395_9(copy_constructor &) = CopyValue : r1395_8 +# 1395| m1395_10(copy_constructor &) = Store[rd] : &:r1395_1, r1395_9 +# 1396| r1396_1(glval) = VariableAddress[d2] : +# 1396| m1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 +# 1396| r1396_3(glval) = FunctionAddress[copy_constructor] : +# 1396| v1396_4(void) = Call[copy_constructor] : func:r1396_3, this:r1396_1 +# 1396| m1396_5(unknown) = ^CallSideEffect : ~m1395_6 +# 1396| m1396_6(unknown) = Chi : total:m1395_6, partial:m1396_5 +# 1396| m1396_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 +# 1396| m1396_8(copy_constructor) = Chi : total:m1396_2, partial:m1396_7 +# 1397| r1397_1(glval) = FunctionAddress[acceptRef] : +# 1397| r1397_2(glval) = VariableAddress[d] : +# 1397| r1397_3(glval) = Convert : r1397_2 +# 1397| r1397_4(copy_constructor &) = CopyValue : r1397_3 +# 1397| v1397_5(void) = Call[acceptRef] : func:r1397_1, 0:r1397_4 +# 1397| m1397_6(unknown) = ^CallSideEffect : ~m1396_6 +# 1397| m1397_7(unknown) = Chi : total:m1396_6, partial:m1397_6 +# 1397| v1397_8(void) = ^BufferReadSideEffect[0] : &:r1397_4, ~m1394_6 +# 1398| r1398_1(glval) = FunctionAddress[acceptValue] : +# 1398| r1398_2(glval) = VariableAddress[#temp1398:17] : +# 1398| m1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 +# 1398| r1398_4(glval) = FunctionAddress[copy_constructor] : +# 1398| r1398_5(glval) = VariableAddress[d] : +# 1398| r1398_6(glval) = Convert : r1398_5 +# 1398| r1398_7(copy_constructor &) = CopyValue : r1398_6 +# 1398| v1398_8(void) = Call[copy_constructor] : func:r1398_4, this:r1398_2, 0:r1398_7 +# 1398| m1398_9(unknown) = ^CallSideEffect : ~m1397_7 +# 1398| m1398_10(unknown) = Chi : total:m1397_7, partial:m1398_9 +# 1398| v1398_11(void) = ^BufferReadSideEffect[0] : &:r1398_7, ~m1394_6 +# 1398| m1398_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_2 +# 1398| m1398_13(copy_constructor) = Chi : total:m1398_3, partial:m1398_12 +# 1398| r1398_14(copy_constructor) = Load[#temp1398:17] : &:r1398_2, m1398_13 +# 1398| v1398_15(void) = Call[acceptValue] : func:r1398_1, 0:r1398_14 +# 1398| m1398_16(unknown) = ^CallSideEffect : ~m1398_10 +# 1398| m1398_17(unknown) = Chi : total:m1398_10, partial:m1398_16 # 1399| r1399_1(glval) = VariableAddress[#temp1399:5] : -# 1399| r1399_2(glval) = FunctionAddress[defaultConstruct] : -# 1399| r1399_3(copy_constructor) = Call[defaultConstruct] : func:r1399_2 -# 1399| m1399_4(unknown) = ^CallSideEffect : ~m1398_10 -# 1399| m1399_5(unknown) = Chi : total:m1398_10, partial:m1399_4 -# 1399| m1399_6(copy_constructor) = Store[#temp1399:5] : &:r1399_1, r1399_3 -# 1401| r1401_1(glval) = VariableAddress[y] : -# 1401| r1401_2(glval) = VariableAddress[#temp1401:13] : -# 1401| r1401_3(glval) = FunctionAddress[returnValue] : -# 1401| r1401_4(copy_constructor) = Call[returnValue] : func:r1401_3 -# 1401| m1401_5(unknown) = ^CallSideEffect : ~m1399_5 -# 1401| m1401_6(unknown) = Chi : total:m1399_5, partial:m1401_5 -# 1401| m1401_7(copy_constructor) = Store[#temp1401:13] : &:r1401_2, r1401_4 -# 1401| r1401_8(glval) = FieldAddress[y] : r1401_2 -# 1401| r1401_9(int) = Load[?] : &:r1401_8, ~m1401_7 -# 1401| m1401_10(int) = Store[y] : &:r1401_1, r1401_9 -# 1402| v1402_1(void) = NoOp : -# 1391| v1391_5(void) = ReturnVoid : -# 1391| v1391_6(void) = AliasedUse : ~m1401_6 -# 1391| v1391_7(void) = ExitFunction : +# 1399| m1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 +# 1399| r1399_3(glval) = FunctionAddress[copy_constructor] : +# 1399| v1399_4(void) = Call[copy_constructor] : func:r1399_3, this:r1399_1 +# 1399| m1399_5(unknown) = ^CallSideEffect : ~m1398_17 +# 1399| m1399_6(unknown) = Chi : total:m1398_17, partial:m1399_5 +# 1399| m1399_7(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1399| m1399_8(copy_constructor) = Chi : total:m1399_2, partial:m1399_7 +# 1399| r1399_9(glval) = FunctionAddress[method] : +# 1399| v1399_10(void) = Call[method] : func:r1399_9, this:r1399_1 +# 1399| m1399_11(unknown) = ^CallSideEffect : ~m1399_6 +# 1399| m1399_12(unknown) = Chi : total:m1399_6, partial:m1399_11 +# 1399| v1399_13(void) = ^IndirectReadSideEffect[-1] : &:r1399_1, m1399_8 +# 1399| m1399_14(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1399| m1399_15(copy_constructor) = Chi : total:m1399_8, partial:m1399_14 +# 1400| r1400_1(glval) = VariableAddress[#temp1400:5] : +# 1400| r1400_2(glval) = FunctionAddress[returnValue] : +# 1400| r1400_3(copy_constructor) = Call[returnValue] : func:r1400_2 +# 1400| m1400_4(unknown) = ^CallSideEffect : ~m1399_12 +# 1400| m1400_5(unknown) = Chi : total:m1399_12, partial:m1400_4 +# 1400| m1400_6(copy_constructor) = Store[#temp1400:5] : &:r1400_1, r1400_3 +# 1400| r1400_7(glval) = FunctionAddress[method] : +# 1400| v1400_8(void) = Call[method] : func:r1400_7, this:r1400_1 +# 1400| m1400_9(unknown) = ^CallSideEffect : ~m1400_5 +# 1400| m1400_10(unknown) = Chi : total:m1400_5, partial:m1400_9 +# 1400| v1400_11(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, m1400_6 +# 1400| m1400_12(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 +# 1400| m1400_13(copy_constructor) = Chi : total:m1400_6, partial:m1400_12 +# 1401| r1401_1(glval) = VariableAddress[#temp1401:5] : +# 1401| r1401_2(glval) = FunctionAddress[defaultConstruct] : +# 1401| r1401_3(copy_constructor) = Call[defaultConstruct] : func:r1401_2 +# 1401| m1401_4(unknown) = ^CallSideEffect : ~m1400_10 +# 1401| m1401_5(unknown) = Chi : total:m1400_10, partial:m1401_4 +# 1401| m1401_6(copy_constructor) = Store[#temp1401:5] : &:r1401_1, r1401_3 +# 1403| r1403_1(glval) = VariableAddress[y] : +# 1403| r1403_2(glval) = VariableAddress[#temp1403:13] : +# 1403| r1403_3(glval) = FunctionAddress[returnValue] : +# 1403| r1403_4(copy_constructor) = Call[returnValue] : func:r1403_3 +# 1403| m1403_5(unknown) = ^CallSideEffect : ~m1401_5 +# 1403| m1403_6(unknown) = Chi : total:m1401_5, partial:m1403_5 +# 1403| m1403_7(copy_constructor) = Store[#temp1403:13] : &:r1403_2, r1403_4 +# 1403| r1403_8(glval) = FieldAddress[y] : r1403_2 +# 1403| r1403_9(int) = Load[?] : &:r1403_8, ~m1403_7 +# 1403| m1403_10(int) = Store[y] : &:r1403_1, r1403_9 +# 1404| v1404_1(void) = NoOp : +# 1393| v1393_5(void) = ReturnVoid : +# 1393| v1393_6(void) = AliasedUse : ~m1403_6 +# 1393| v1393_7(void) = ExitFunction : -# 1404| void temporary_point() -# 1404| Block 0 -# 1404| v1404_1(void) = EnterFunction : -# 1404| m1404_2(unknown) = AliasedDefinition : -# 1404| m1404_3(unknown) = InitializeNonLocal : -# 1404| m1404_4(unknown) = Chi : total:m1404_2, partial:m1404_3 -# 1405| r1405_1(glval) = VariableAddress[p] : -# 1405| r1405_2(glval) = FunctionAddress[returnValue] : -# 1405| r1405_3(Point) = Call[returnValue] : func:r1405_2 -# 1405| m1405_4(unknown) = ^CallSideEffect : ~m1404_4 -# 1405| m1405_5(unknown) = Chi : total:m1404_4, partial:m1405_4 -# 1405| m1405_6(Point) = Store[p] : &:r1405_1, r1405_3 -# 1406| r1406_1(glval) = VariableAddress[rp] : -# 1406| r1406_2(glval) = VariableAddress[#temp1406:23] : -# 1406| r1406_3(glval) = FunctionAddress[returnValue] : -# 1406| r1406_4(Point) = Call[returnValue] : func:r1406_3 -# 1406| m1406_5(unknown) = ^CallSideEffect : ~m1405_5 -# 1406| m1406_6(unknown) = Chi : total:m1405_5, partial:m1406_5 -# 1406| m1406_7(Point) = Store[#temp1406:23] : &:r1406_2, r1406_4 -# 1406| r1406_8(glval) = Convert : r1406_2 -# 1406| r1406_9(Point &) = CopyValue : r1406_8 -# 1406| m1406_10(Point &) = Store[rp] : &:r1406_1, r1406_9 -# 1408| r1408_1(glval) = FunctionAddress[acceptRef] : -# 1408| r1408_2(glval) = VariableAddress[p] : -# 1408| r1408_3(glval) = Convert : r1408_2 -# 1408| r1408_4(Point &) = CopyValue : r1408_3 -# 1408| v1408_5(void) = Call[acceptRef] : func:r1408_1, 0:r1408_4 -# 1408| m1408_6(unknown) = ^CallSideEffect : ~m1406_6 -# 1408| m1408_7(unknown) = Chi : total:m1406_6, partial:m1408_6 -# 1408| v1408_8(void) = ^BufferReadSideEffect[0] : &:r1408_4, ~m1405_6 -# 1409| r1409_1(glval) = FunctionAddress[acceptValue] : -# 1409| r1409_2(glval) = VariableAddress[p] : -# 1409| r1409_3(Point) = Load[p] : &:r1409_2, m1405_6 -# 1409| v1409_4(void) = Call[acceptValue] : func:r1409_1, 0:r1409_3 -# 1409| m1409_5(unknown) = ^CallSideEffect : ~m1408_7 -# 1409| m1409_6(unknown) = Chi : total:m1408_7, partial:m1409_5 -# 1410| r1410_1(int) = Constant[0] : -# 1411| r1411_1(glval) = VariableAddress[y] : -# 1411| r1411_2(glval) = FunctionAddress[returnValue] : -# 1411| r1411_3(Point) = Call[returnValue] : func:r1411_2 -# 1411| m1411_4(unknown) = ^CallSideEffect : ~m1409_6 -# 1411| m1411_5(unknown) = Chi : total:m1409_6, partial:m1411_4 -# 1411| r1411_6(glval) = VariableAddress[#temp1411:13] : -# 1411| m1411_7(Point) = Store[#temp1411:13] : &:r1411_6, r1411_3 -# 1411| r1411_8(glval) = FieldAddress[y] : r1411_6 -# 1411| r1411_9(int) = Load[?] : &:r1411_8, ~m1411_7 -# 1411| m1411_10(int) = Store[y] : &:r1411_1, r1411_9 -# 1413| r1413_1(glval) = FunctionAddress[defaultConstruct] : -# 1413| r1413_2(Point) = Call[defaultConstruct] : func:r1413_1 -# 1413| m1413_3(unknown) = ^CallSideEffect : ~m1411_5 -# 1413| m1413_4(unknown) = Chi : total:m1411_5, partial:m1413_3 -# 1414| v1414_1(void) = NoOp : -# 1404| v1404_5(void) = ReturnVoid : -# 1404| v1404_6(void) = AliasedUse : ~m1413_4 -# 1404| v1404_7(void) = ExitFunction : +# 1406| void temporary_point() +# 1406| Block 0 +# 1406| v1406_1(void) = EnterFunction : +# 1406| m1406_2(unknown) = AliasedDefinition : +# 1406| m1406_3(unknown) = InitializeNonLocal : +# 1406| m1406_4(unknown) = Chi : total:m1406_2, partial:m1406_3 +# 1407| r1407_1(glval) = VariableAddress[p] : +# 1407| r1407_2(glval) = FunctionAddress[returnValue] : +# 1407| r1407_3(Point) = Call[returnValue] : func:r1407_2 +# 1407| m1407_4(unknown) = ^CallSideEffect : ~m1406_4 +# 1407| m1407_5(unknown) = Chi : total:m1406_4, partial:m1407_4 +# 1407| m1407_6(Point) = Store[p] : &:r1407_1, r1407_3 +# 1408| r1408_1(glval) = VariableAddress[rp] : +# 1408| r1408_2(glval) = VariableAddress[#temp1408:23] : +# 1408| r1408_3(glval) = FunctionAddress[returnValue] : +# 1408| r1408_4(Point) = Call[returnValue] : func:r1408_3 +# 1408| m1408_5(unknown) = ^CallSideEffect : ~m1407_5 +# 1408| m1408_6(unknown) = Chi : total:m1407_5, partial:m1408_5 +# 1408| m1408_7(Point) = Store[#temp1408:23] : &:r1408_2, r1408_4 +# 1408| r1408_8(glval) = Convert : r1408_2 +# 1408| r1408_9(Point &) = CopyValue : r1408_8 +# 1408| m1408_10(Point &) = Store[rp] : &:r1408_1, r1408_9 +# 1410| r1410_1(glval) = FunctionAddress[acceptRef] : +# 1410| r1410_2(glval) = VariableAddress[p] : +# 1410| r1410_3(glval) = Convert : r1410_2 +# 1410| r1410_4(Point &) = CopyValue : r1410_3 +# 1410| v1410_5(void) = Call[acceptRef] : func:r1410_1, 0:r1410_4 +# 1410| m1410_6(unknown) = ^CallSideEffect : ~m1408_6 +# 1410| m1410_7(unknown) = Chi : total:m1408_6, partial:m1410_6 +# 1410| v1410_8(void) = ^BufferReadSideEffect[0] : &:r1410_4, ~m1407_6 +# 1411| r1411_1(glval) = FunctionAddress[acceptValue] : +# 1411| r1411_2(glval) = VariableAddress[p] : +# 1411| r1411_3(Point) = Load[p] : &:r1411_2, m1407_6 +# 1411| v1411_4(void) = Call[acceptValue] : func:r1411_1, 0:r1411_3 +# 1411| m1411_5(unknown) = ^CallSideEffect : ~m1410_7 +# 1411| m1411_6(unknown) = Chi : total:m1410_7, partial:m1411_5 +# 1412| r1412_1(int) = Constant[0] : +# 1413| r1413_1(glval) = VariableAddress[y] : +# 1413| r1413_2(glval) = FunctionAddress[returnValue] : +# 1413| r1413_3(Point) = Call[returnValue] : func:r1413_2 +# 1413| m1413_4(unknown) = ^CallSideEffect : ~m1411_6 +# 1413| m1413_5(unknown) = Chi : total:m1411_6, partial:m1413_4 +# 1413| r1413_6(glval) = VariableAddress[#temp1413:13] : +# 1413| m1413_7(Point) = Store[#temp1413:13] : &:r1413_6, r1413_3 +# 1413| r1413_8(glval) = FieldAddress[y] : r1413_6 +# 1413| r1413_9(int) = Load[?] : &:r1413_8, ~m1413_7 +# 1413| m1413_10(int) = Store[y] : &:r1413_1, r1413_9 +# 1415| r1415_1(glval) = FunctionAddress[defaultConstruct] : +# 1415| r1415_2(Point) = Call[defaultConstruct] : func:r1415_1 +# 1415| m1415_3(unknown) = ^CallSideEffect : ~m1413_5 +# 1415| m1415_4(unknown) = Chi : total:m1413_5, partial:m1415_3 +# 1416| v1416_1(void) = NoOp : +# 1406| v1406_5(void) = ReturnVoid : +# 1406| v1406_6(void) = AliasedUse : ~m1415_4 +# 1406| v1406_7(void) = ExitFunction : -# 1421| void temporary_unusual_fields() -# 1421| Block 0 -# 1421| v1421_1(void) = EnterFunction : -# 1421| m1421_2(unknown) = AliasedDefinition : -# 1421| m1421_3(unknown) = InitializeNonLocal : -# 1421| m1421_4(unknown) = Chi : total:m1421_2, partial:m1421_3 -# 1422| r1422_1(glval) = VariableAddress[rx] : -# 1422| r1422_2(glval) = FunctionAddress[returnValue] : -# 1422| r1422_3(UnusualFields) = Call[returnValue] : func:r1422_2 -# 1422| m1422_4(unknown) = ^CallSideEffect : ~m1421_4 -# 1422| m1422_5(unknown) = Chi : total:m1421_4, partial:m1422_4 -# 1422| r1422_6(glval) = VariableAddress[#temp1422:21] : -# 1422| m1422_7(UnusualFields) = Store[#temp1422:21] : &:r1422_6, r1422_3 -# 1422| r1422_8(glval) = FieldAddress[r] : r1422_6 -# 1422| r1422_9(int &) = Load[?] : &:r1422_8, ~m1422_7 -# 1422| r1422_10(glval) = CopyValue : r1422_9 -# 1422| r1422_11(glval) = Convert : r1422_10 -# 1422| r1422_12(int &) = CopyValue : r1422_11 -# 1422| m1422_13(int &) = Store[rx] : &:r1422_1, r1422_12 -# 1423| r1423_1(glval) = VariableAddress[x] : -# 1423| r1423_2(glval) = FunctionAddress[returnValue] : -# 1423| r1423_3(UnusualFields) = Call[returnValue] : func:r1423_2 -# 1423| m1423_4(unknown) = ^CallSideEffect : ~m1422_5 -# 1423| m1423_5(unknown) = Chi : total:m1422_5, partial:m1423_4 -# 1423| r1423_6(glval) = VariableAddress[#temp1423:13] : -# 1423| m1423_7(UnusualFields) = Store[#temp1423:13] : &:r1423_6, r1423_3 -# 1423| r1423_8(glval) = FieldAddress[r] : r1423_6 -# 1423| r1423_9(int &) = Load[?] : &:r1423_8, ~m1423_7 -# 1423| r1423_10(int) = Load[?] : &:r1423_9, ~m1423_5 -# 1423| m1423_11(int) = Store[x] : &:r1423_1, r1423_10 -# 1425| r1425_1(glval) = VariableAddress[rf] : +# 1423| void temporary_unusual_fields() +# 1423| Block 0 +# 1423| v1423_1(void) = EnterFunction : +# 1423| m1423_2(unknown) = AliasedDefinition : +# 1423| m1423_3(unknown) = InitializeNonLocal : +# 1423| m1423_4(unknown) = Chi : total:m1423_2, partial:m1423_3 +# 1424| r1424_1(glval) = VariableAddress[rx] : +# 1424| r1424_2(glval) = FunctionAddress[returnValue] : +# 1424| r1424_3(UnusualFields) = Call[returnValue] : func:r1424_2 +# 1424| m1424_4(unknown) = ^CallSideEffect : ~m1423_4 +# 1424| m1424_5(unknown) = Chi : total:m1423_4, partial:m1424_4 +# 1424| r1424_6(glval) = VariableAddress[#temp1424:21] : +# 1424| m1424_7(UnusualFields) = Store[#temp1424:21] : &:r1424_6, r1424_3 +# 1424| r1424_8(glval) = FieldAddress[r] : r1424_6 +# 1424| r1424_9(int &) = Load[?] : &:r1424_8, ~m1424_7 +# 1424| r1424_10(glval) = CopyValue : r1424_9 +# 1424| r1424_11(glval) = Convert : r1424_10 +# 1424| r1424_12(int &) = CopyValue : r1424_11 +# 1424| m1424_13(int &) = Store[rx] : &:r1424_1, r1424_12 +# 1425| r1425_1(glval) = VariableAddress[x] : # 1425| r1425_2(glval) = FunctionAddress[returnValue] : # 1425| r1425_3(UnusualFields) = Call[returnValue] : func:r1425_2 -# 1425| m1425_4(unknown) = ^CallSideEffect : ~m1423_5 -# 1425| m1425_5(unknown) = Chi : total:m1423_5, partial:m1425_4 -# 1425| r1425_6(glval) = VariableAddress[#temp1425:23] : -# 1425| m1425_7(UnusualFields) = Store[#temp1425:23] : &:r1425_6, r1425_3 -# 1425| r1425_8(glval) = FieldAddress[a] : r1425_6 -# 1425| r1425_9(float *) = Convert : r1425_8 -# 1425| r1425_10(int) = Constant[3] : -# 1425| r1425_11(glval) = PointerAdd[4] : r1425_9, r1425_10 -# 1425| r1425_12(glval) = Convert : r1425_11 -# 1425| r1425_13(float &) = CopyValue : r1425_12 -# 1425| m1425_14(float &) = Store[rf] : &:r1425_1, r1425_13 -# 1426| r1426_1(glval) = VariableAddress[f] : -# 1426| r1426_2(glval) = FunctionAddress[returnValue] : -# 1426| r1426_3(UnusualFields) = Call[returnValue] : func:r1426_2 -# 1426| m1426_4(unknown) = ^CallSideEffect : ~m1425_5 -# 1426| m1426_5(unknown) = Chi : total:m1425_5, partial:m1426_4 -# 1426| r1426_6(glval) = VariableAddress[#temp1426:15] : -# 1426| m1426_7(UnusualFields) = Store[#temp1426:15] : &:r1426_6, r1426_3 -# 1426| r1426_8(glval) = FieldAddress[a] : r1426_6 -# 1426| r1426_9(float *) = Convert : r1426_8 -# 1426| r1426_10(int) = Constant[5] : -# 1426| r1426_11(glval) = PointerAdd[4] : r1426_9, r1426_10 -# 1426| r1426_12(float) = Load[?] : &:r1426_11, ~m1426_7 -# 1426| m1426_13(float) = Store[f] : &:r1426_1, r1426_12 -# 1427| v1427_1(void) = NoOp : -# 1421| v1421_5(void) = ReturnVoid : -# 1421| v1421_6(void) = AliasedUse : ~m1426_5 -# 1421| v1421_7(void) = ExitFunction : +# 1425| m1425_4(unknown) = ^CallSideEffect : ~m1424_5 +# 1425| m1425_5(unknown) = Chi : total:m1424_5, partial:m1425_4 +# 1425| r1425_6(glval) = VariableAddress[#temp1425:13] : +# 1425| m1425_7(UnusualFields) = Store[#temp1425:13] : &:r1425_6, r1425_3 +# 1425| r1425_8(glval) = FieldAddress[r] : r1425_6 +# 1425| r1425_9(int &) = Load[?] : &:r1425_8, ~m1425_7 +# 1425| r1425_10(int) = Load[?] : &:r1425_9, ~m1425_5 +# 1425| m1425_11(int) = Store[x] : &:r1425_1, r1425_10 +# 1427| r1427_1(glval) = VariableAddress[rf] : +# 1427| r1427_2(glval) = FunctionAddress[returnValue] : +# 1427| r1427_3(UnusualFields) = Call[returnValue] : func:r1427_2 +# 1427| m1427_4(unknown) = ^CallSideEffect : ~m1425_5 +# 1427| m1427_5(unknown) = Chi : total:m1425_5, partial:m1427_4 +# 1427| r1427_6(glval) = VariableAddress[#temp1427:23] : +# 1427| m1427_7(UnusualFields) = Store[#temp1427:23] : &:r1427_6, r1427_3 +# 1427| r1427_8(glval) = FieldAddress[a] : r1427_6 +# 1427| r1427_9(float *) = Convert : r1427_8 +# 1427| r1427_10(int) = Constant[3] : +# 1427| r1427_11(glval) = PointerAdd[4] : r1427_9, r1427_10 +# 1427| r1427_12(glval) = Convert : r1427_11 +# 1427| r1427_13(float &) = CopyValue : r1427_12 +# 1427| m1427_14(float &) = Store[rf] : &:r1427_1, r1427_13 +# 1428| r1428_1(glval) = VariableAddress[f] : +# 1428| r1428_2(glval) = FunctionAddress[returnValue] : +# 1428| r1428_3(UnusualFields) = Call[returnValue] : func:r1428_2 +# 1428| m1428_4(unknown) = ^CallSideEffect : ~m1427_5 +# 1428| m1428_5(unknown) = Chi : total:m1427_5, partial:m1428_4 +# 1428| r1428_6(glval) = VariableAddress[#temp1428:15] : +# 1428| m1428_7(UnusualFields) = Store[#temp1428:15] : &:r1428_6, r1428_3 +# 1428| r1428_8(glval) = FieldAddress[a] : r1428_6 +# 1428| r1428_9(float *) = Convert : r1428_8 +# 1428| r1428_10(int) = Constant[5] : +# 1428| r1428_11(glval) = PointerAdd[4] : r1428_9, r1428_10 +# 1428| r1428_12(float) = Load[?] : &:r1428_11, ~m1428_7 +# 1428| m1428_13(float) = Store[f] : &:r1428_1, r1428_12 +# 1429| v1429_1(void) = NoOp : +# 1423| v1423_5(void) = ReturnVoid : +# 1423| v1423_6(void) = AliasedUse : ~m1428_5 +# 1423| v1423_7(void) = ExitFunction : -# 1443| void temporary_hierarchy() -# 1443| Block 0 -# 1443| v1443_1(void) = EnterFunction : -# 1443| m1443_2(unknown) = AliasedDefinition : -# 1443| m1443_3(unknown) = InitializeNonLocal : -# 1443| m1443_4(unknown) = Chi : total:m1443_2, partial:m1443_3 -# 1444| r1444_1(glval) = VariableAddress[b] : +# 1445| void temporary_hierarchy() +# 1445| Block 0 +# 1445| v1445_1(void) = EnterFunction : +# 1445| m1445_2(unknown) = AliasedDefinition : +# 1445| m1445_3(unknown) = InitializeNonLocal : +# 1445| m1445_4(unknown) = Chi : total:m1445_2, partial:m1445_3 +# 1446| r1446_1(glval) = VariableAddress[b] : #-----| r0_1(glval) = VariableAddress[#temp0:0] : -# 1444| r1444_2(glval) = FunctionAddress[returnValue] : -# 1444| r1444_3(POD_Middle) = Call[returnValue] : func:r1444_2 -# 1444| m1444_4(unknown) = ^CallSideEffect : ~m1443_4 -# 1444| m1444_5(unknown) = Chi : total:m1443_4, partial:m1444_4 -# 1444| m1444_6(POD_Middle) = Store[#temp0:0] : &:r0_1, r1444_3 -#-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 -#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m1444_6 -#-----| m0_4(POD_Base) = Store[b] : &:r1444_1, r0_3 -# 1445| r1445_1(glval) = VariableAddress[#temp1445:9] : -# 1445| r1445_2(glval) = FunctionAddress[returnValue] : -# 1445| r1445_3(POD_Derived) = Call[returnValue] : func:r1445_2 -# 1445| m1445_4(unknown) = ^CallSideEffect : ~m1444_5 -# 1445| m1445_5(unknown) = Chi : total:m1444_5, partial:m1445_4 -# 1445| m1445_6(POD_Derived) = Store[#temp1445:9] : &:r1445_1, r1445_3 -# 1445| r1445_7(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1445_1 -# 1445| r1445_8(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1445_7 -# 1445| r1445_9(POD_Base) = Load[?] : &:r1445_8, ~m1445_6 -# 1445| r1445_10(glval) = VariableAddress[b] : -# 1445| m1445_11(POD_Base) = Store[b] : &:r1445_10, r1445_9 -# 1446| r1446_1(glval) = VariableAddress[x] : -#-----| r0_5(glval) = VariableAddress[#temp0:0] : # 1446| r1446_2(glval) = FunctionAddress[returnValue] : -# 1446| r1446_3(POD_Derived) = Call[returnValue] : func:r1446_2 -# 1446| m1446_4(unknown) = ^CallSideEffect : ~m1445_5 -# 1446| m1446_5(unknown) = Chi : total:m1445_5, partial:m1446_4 -# 1446| m1446_6(POD_Derived) = Store[#temp0:0] : &:r0_5, r1446_3 -#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 -#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1446| r1446_7(glval) = FieldAddress[x] : r0_7 -# 1446| r1446_8(int) = Load[?] : &:r1446_7, ~m1446_6 -# 1446| m1446_9(int) = Store[x] : &:r1446_1, r1446_8 -# 1447| r1447_1(glval) = VariableAddress[f] : -#-----| r0_8(glval) = VariableAddress[#temp0:0] : +# 1446| r1446_3(POD_Middle) = Call[returnValue] : func:r1446_2 +# 1446| m1446_4(unknown) = ^CallSideEffect : ~m1445_4 +# 1446| m1446_5(unknown) = Chi : total:m1445_4, partial:m1446_4 +# 1446| m1446_6(POD_Middle) = Store[#temp0:0] : &:r0_1, r1446_3 +#-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 +#-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m1446_6 +#-----| m0_4(POD_Base) = Store[b] : &:r1446_1, r0_3 +# 1447| r1447_1(glval) = VariableAddress[#temp1447:9] : # 1447| r1447_2(glval) = FunctionAddress[returnValue] : # 1447| r1447_3(POD_Derived) = Call[returnValue] : func:r1447_2 # 1447| m1447_4(unknown) = ^CallSideEffect : ~m1446_5 # 1447| m1447_5(unknown) = Chi : total:m1446_5, partial:m1447_4 -# 1447| m1447_6(POD_Derived) = Store[#temp0:0] : &:r0_8, r1447_3 +# 1447| m1447_6(POD_Derived) = Store[#temp1447:9] : &:r1447_1, r1447_3 +# 1447| r1447_7(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 +# 1447| r1447_8(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_7 +# 1447| r1447_9(POD_Base) = Load[?] : &:r1447_8, ~m1447_6 +# 1447| r1447_10(glval) = VariableAddress[b] : +# 1447| m1447_11(POD_Base) = Store[b] : &:r1447_10, r1447_9 +# 1448| r1448_1(glval) = VariableAddress[x] : +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 1448| r1448_2(glval) = FunctionAddress[returnValue] : +# 1448| r1448_3(POD_Derived) = Call[returnValue] : func:r1448_2 +# 1448| m1448_4(unknown) = ^CallSideEffect : ~m1447_5 +# 1448| m1448_5(unknown) = Chi : total:m1447_5, partial:m1448_4 +# 1448| m1448_6(POD_Derived) = Store[#temp0:0] : &:r0_5, r1448_3 +#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 +#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 +# 1448| r1448_7(glval) = FieldAddress[x] : r0_7 +# 1448| r1448_8(int) = Load[?] : &:r1448_7, ~m1448_6 +# 1448| m1448_9(int) = Store[x] : &:r1448_1, r1448_8 +# 1449| r1449_1(glval) = VariableAddress[f] : +#-----| r0_8(glval) = VariableAddress[#temp0:0] : +# 1449| r1449_2(glval) = FunctionAddress[returnValue] : +# 1449| r1449_3(POD_Derived) = Call[returnValue] : func:r1449_2 +# 1449| m1449_4(unknown) = ^CallSideEffect : ~m1448_5 +# 1449| m1449_5(unknown) = Chi : total:m1448_5, partial:m1449_4 +# 1449| m1449_6(POD_Derived) = Store[#temp0:0] : &:r0_8, r1449_3 #-----| r0_9(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval) = Convert : r0_10 -# 1447| r1447_7(glval) = FunctionAddress[f] : -# 1447| r1447_8(float) = Call[f] : func:r1447_7, this:r0_11 -# 1447| m1447_9(unknown) = ^CallSideEffect : ~m1447_5 -# 1447| m1447_10(unknown) = Chi : total:m1447_5, partial:m1447_9 -#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1447_6 -# 1447| m1447_11(float) = Store[f] : &:r1447_1, r1447_8 -# 1448| v1448_1(void) = NoOp : -# 1443| v1443_5(void) = ReturnVoid : -# 1443| v1443_6(void) = AliasedUse : ~m1447_10 -# 1443| v1443_7(void) = ExitFunction : +# 1449| r1449_7(glval) = FunctionAddress[f] : +# 1449| r1449_8(float) = Call[f] : func:r1449_7, this:r0_11 +# 1449| m1449_9(unknown) = ^CallSideEffect : ~m1449_5 +# 1449| m1449_10(unknown) = Chi : total:m1449_5, partial:m1449_9 +#-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m1449_6 +# 1449| m1449_11(float) = Store[f] : &:r1449_1, r1449_8 +# 1450| v1450_1(void) = NoOp : +# 1445| v1445_5(void) = ReturnVoid : +# 1445| v1445_6(void) = AliasedUse : ~m1449_10 +# 1445| v1445_7(void) = ExitFunction : -# 1451| void Inheritance_Test_B::~Inheritance_Test_B() -# 1451| Block 0 -# 1451| v1451_1(void) = EnterFunction : -# 1451| m1451_2(unknown) = AliasedDefinition : -# 1451| m1451_3(unknown) = InitializeNonLocal : -# 1451| m1451_4(unknown) = Chi : total:m1451_2, partial:m1451_3 -# 1451| r1451_5(glval) = VariableAddress[#this] : -# 1451| m1451_6(glval) = InitializeParameter[#this] : &:r1451_5 -# 1451| r1451_7(glval) = Load[#this] : &:r1451_5, m1451_6 -# 1451| m1451_8(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1451_7 -# 1451| v1451_9(void) = NoOp : -# 1451| v1451_10(void) = ReturnIndirection[#this] : &:r1451_7, m1451_8 -# 1451| v1451_11(void) = ReturnVoid : -# 1451| v1451_12(void) = AliasedUse : m1451_3 -# 1451| v1451_13(void) = ExitFunction : +# 1453| void Inheritance_Test_B::~Inheritance_Test_B() +# 1453| Block 0 +# 1453| v1453_1(void) = EnterFunction : +# 1453| m1453_2(unknown) = AliasedDefinition : +# 1453| m1453_3(unknown) = InitializeNonLocal : +# 1453| m1453_4(unknown) = Chi : total:m1453_2, partial:m1453_3 +# 1453| r1453_5(glval) = VariableAddress[#this] : +# 1453| m1453_6(glval) = InitializeParameter[#this] : &:r1453_5 +# 1453| r1453_7(glval) = Load[#this] : &:r1453_5, m1453_6 +# 1453| m1453_8(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1453_7 +# 1453| v1453_9(void) = NoOp : +# 1453| v1453_10(void) = ReturnIndirection[#this] : &:r1453_7, m1453_8 +# 1453| v1453_11(void) = ReturnVoid : +# 1453| v1453_12(void) = AliasedUse : m1453_3 +# 1453| v1453_13(void) = ExitFunction : -# 1457| void Inheritance_Test_A::Inheritance_Test_A() -# 1457| Block 0 -# 1457| v1457_1(void) = EnterFunction : -# 1457| m1457_2(unknown) = AliasedDefinition : -# 1457| m1457_3(unknown) = InitializeNonLocal : -# 1457| m1457_4(unknown) = Chi : total:m1457_2, partial:m1457_3 -# 1457| r1457_5(glval) = VariableAddress[#this] : -# 1457| m1457_6(glval) = InitializeParameter[#this] : &:r1457_5 -# 1457| r1457_7(glval) = Load[#this] : &:r1457_5, m1457_6 -# 1457| m1457_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1457_7 -# 1457| r1457_9(glval) = FieldAddress[x] : m1457_6 -# 1457| r1457_10(int) = Constant[42] : -# 1457| m1457_11(int) = Store[?] : &:r1457_9, r1457_10 -# 1457| m1457_12(unknown) = Chi : total:m1457_8, partial:m1457_11 -# 1458| r1458_1(int) = Constant[3] : -# 1458| r1458_2(glval) = VariableAddress[#this] : -# 1458| r1458_3(Inheritance_Test_A *) = Load[#this] : &:r1458_2, m1457_6 -# 1458| r1458_4(glval) = FieldAddress[y] : r1458_3 -# 1458| m1458_5(int) = Store[?] : &:r1458_4, r1458_1 -# 1458| m1458_6(unknown) = Chi : total:m1457_12, partial:m1458_5 -# 1459| v1459_1(void) = NoOp : -# 1457| v1457_13(void) = ReturnIndirection[#this] : &:r1457_7, m1458_6 -# 1457| v1457_14(void) = ReturnVoid : -# 1457| v1457_15(void) = AliasedUse : m1457_3 -# 1457| v1457_16(void) = ExitFunction : +# 1459| void Inheritance_Test_A::Inheritance_Test_A() +# 1459| Block 0 +# 1459| v1459_1(void) = EnterFunction : +# 1459| m1459_2(unknown) = AliasedDefinition : +# 1459| m1459_3(unknown) = InitializeNonLocal : +# 1459| m1459_4(unknown) = Chi : total:m1459_2, partial:m1459_3 +# 1459| r1459_5(glval) = VariableAddress[#this] : +# 1459| m1459_6(glval) = InitializeParameter[#this] : &:r1459_5 +# 1459| r1459_7(glval) = Load[#this] : &:r1459_5, m1459_6 +# 1459| m1459_8(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_7 +# 1459| r1459_9(glval) = FieldAddress[x] : m1459_6 +# 1459| r1459_10(int) = Constant[42] : +# 1459| m1459_11(int) = Store[?] : &:r1459_9, r1459_10 +# 1459| m1459_12(unknown) = Chi : total:m1459_8, partial:m1459_11 +# 1460| r1460_1(int) = Constant[3] : +# 1460| r1460_2(glval) = VariableAddress[#this] : +# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, m1459_6 +# 1460| r1460_4(glval) = FieldAddress[y] : r1460_3 +# 1460| m1460_5(int) = Store[?] : &:r1460_4, r1460_1 +# 1460| m1460_6(unknown) = Chi : total:m1459_12, partial:m1460_5 +# 1461| v1461_1(void) = NoOp : +# 1459| v1459_13(void) = ReturnIndirection[#this] : &:r1459_7, m1460_6 +# 1459| v1459_14(void) = ReturnVoid : +# 1459| v1459_15(void) = AliasedUse : m1459_3 +# 1459| v1459_16(void) = ExitFunction : -# 1462| void array_structured_binding() -# 1462| Block 0 -# 1462| v1462_1(void) = EnterFunction : -# 1462| m1462_2(unknown) = AliasedDefinition : -# 1462| m1462_3(unknown) = InitializeNonLocal : -# 1462| m1462_4(unknown) = Chi : total:m1462_2, partial:m1462_3 -# 1463| r1463_1(glval) = VariableAddress[xs] : -# 1463| m1463_2(int[2]) = Uninitialized[xs] : &:r1463_1 -# 1463| r1463_3(int) = Constant[0] : -# 1463| r1463_4(glval) = PointerAdd[4] : r1463_1, r1463_3 -# 1463| r1463_5(int) = Constant[1] : -# 1463| m1463_6(int) = Store[?] : &:r1463_4, r1463_5 -# 1463| m1463_7(int[2]) = Chi : total:m1463_2, partial:m1463_6 -# 1463| r1463_8(int) = Constant[1] : -# 1463| r1463_9(glval) = PointerAdd[4] : r1463_1, r1463_8 -# 1463| r1463_10(int) = Constant[2] : -# 1463| m1463_11(int) = Store[?] : &:r1463_9, r1463_10 -# 1463| m1463_12(int[2]) = Chi : total:m1463_7, partial:m1463_11 -# 1466| r1466_1(glval) = VariableAddress[(unnamed local variable)] : -# 1466| r1466_2(glval) = VariableAddress[xs] : -# 1466| r1466_3(int(&)[2]) = CopyValue : r1466_2 -# 1466| m1466_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1466_1, r1466_3 -# 1466| r1466_5(glval) = VariableAddress[x0] : +# 1464| void array_structured_binding() +# 1464| Block 0 +# 1464| v1464_1(void) = EnterFunction : +# 1464| m1464_2(unknown) = AliasedDefinition : +# 1464| m1464_3(unknown) = InitializeNonLocal : +# 1464| m1464_4(unknown) = Chi : total:m1464_2, partial:m1464_3 +# 1465| r1465_1(glval) = VariableAddress[xs] : +# 1465| m1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 +# 1465| r1465_3(int) = Constant[0] : +# 1465| r1465_4(glval) = PointerAdd[4] : r1465_1, r1465_3 +# 1465| r1465_5(int) = Constant[1] : +# 1465| m1465_6(int) = Store[?] : &:r1465_4, r1465_5 +# 1465| m1465_7(int[2]) = Chi : total:m1465_2, partial:m1465_6 +# 1465| r1465_8(int) = Constant[1] : +# 1465| r1465_9(glval) = PointerAdd[4] : r1465_1, r1465_8 +# 1465| r1465_10(int) = Constant[2] : +# 1465| m1465_11(int) = Store[?] : &:r1465_9, r1465_10 +# 1465| m1465_12(int[2]) = Chi : total:m1465_7, partial:m1465_11 +# 1468| r1468_1(glval) = VariableAddress[(unnamed local variable)] : +# 1468| r1468_2(glval) = VariableAddress[xs] : +# 1468| r1468_3(int(&)[2]) = CopyValue : r1468_2 +# 1468| m1468_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1468_1, r1468_3 +# 1468| r1468_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, m1466_4 +#-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, m1468_4 #-----| r0_3(glval) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval) = PointerAdd[4] : r0_4, r0_5 -#-----| m0_7(int &) = Store[x0] : &:r1466_5, r0_6 -# 1466| r1466_6(glval) = VariableAddress[x1] : +#-----| m0_7(int &) = Store[x0] : &:r1468_5, r0_6 +# 1468| r1468_6(glval) = VariableAddress[x1] : #-----| r0_8(glval) = VariableAddress[(unnamed local variable)] : -#-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, m1466_4 +#-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, m1468_4 #-----| r0_10(glval) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval) = PointerAdd[4] : r0_11, r0_12 -#-----| m0_14(int &) = Store[x1] : &:r1466_6, r0_13 -# 1467| r1467_1(int) = Constant[3] : -# 1467| r1467_2(glval) = VariableAddress[x1] : -# 1467| r1467_3(int &) = Load[x1] : &:r1467_2, m0_14 -# 1467| m1467_4(int) = Store[?] : &:r1467_3, r1467_1 -# 1467| m1467_5(int[2]) = Chi : total:m1463_12, partial:m1467_4 -# 1468| r1468_1(glval) = VariableAddress[rx1] : -# 1468| r1468_2(glval) = VariableAddress[x1] : -# 1468| r1468_3(int &) = Load[x1] : &:r1468_2, m0_14 -# 1468| r1468_4(int &) = CopyValue : r1468_3 -# 1468| m1468_5(int &) = Store[rx1] : &:r1468_1, r1468_4 -# 1469| r1469_1(glval) = VariableAddress[x] : +#-----| m0_14(int &) = Store[x1] : &:r1468_6, r0_13 +# 1469| r1469_1(int) = Constant[3] : # 1469| r1469_2(glval) = VariableAddress[x1] : # 1469| r1469_3(int &) = Load[x1] : &:r1469_2, m0_14 -# 1469| r1469_4(int) = Load[?] : &:r1469_3, m1467_4 -# 1469| m1469_5(int) = Store[x] : &:r1469_1, r1469_4 -# 1473| r1473_1(glval) = VariableAddress[unnamed_local_variable] : -# 1473| r1473_2(glval) = VariableAddress[xs] : -# 1473| r1473_3(int(&)[2]) = CopyValue : r1473_2 -# 1473| m1473_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1473_1, r1473_3 -# 1474| r1474_1(glval) = VariableAddress[x0] : -# 1474| r1474_2(glval) = VariableAddress[unnamed_local_variable] : -# 1474| r1474_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1474_2, m1473_4 -# 1474| r1474_4(glval) = CopyValue : r1474_3 -# 1474| r1474_5(int *) = Convert : r1474_4 -# 1474| r1474_6(int) = Constant[0] : -# 1474| r1474_7(glval) = PointerAdd[4] : r1474_5, r1474_6 -# 1474| r1474_8(int &) = CopyValue : r1474_7 -# 1474| m1474_9(int &) = Store[x0] : &:r1474_1, r1474_8 -# 1475| r1475_1(glval) = VariableAddress[x1] : -# 1475| r1475_2(glval) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1475_2, m1473_4 -# 1475| r1475_4(glval) = CopyValue : r1475_3 -# 1475| r1475_5(int *) = Convert : r1475_4 -# 1475| r1475_6(int) = Constant[1] : -# 1475| r1475_7(glval) = PointerAdd[4] : r1475_5, r1475_6 -# 1475| r1475_8(int &) = CopyValue : r1475_7 -# 1475| m1475_9(int &) = Store[x1] : &:r1475_1, r1475_8 -# 1476| r1476_1(int) = Constant[3] : -# 1476| r1476_2(glval) = VariableAddress[x1] : -# 1476| r1476_3(int &) = Load[x1] : &:r1476_2, m1475_9 -# 1476| r1476_4(glval) = CopyValue : r1476_3 -# 1476| m1476_5(int) = Store[?] : &:r1476_4, r1476_1 -# 1476| m1476_6(int[2]) = Chi : total:m1467_5, partial:m1476_5 -# 1477| r1477_1(glval) = VariableAddress[rx1] : -# 1477| r1477_2(glval) = VariableAddress[x1] : -# 1477| r1477_3(int &) = Load[x1] : &:r1477_2, m1475_9 -# 1477| r1477_4(glval) = CopyValue : r1477_3 -# 1477| r1477_5(int &) = CopyValue : r1477_4 -# 1477| m1477_6(int &) = Store[rx1] : &:r1477_1, r1477_5 -# 1478| r1478_1(glval) = VariableAddress[x] : +# 1469| m1469_4(int) = Store[?] : &:r1469_3, r1469_1 +# 1469| m1469_5(int[2]) = Chi : total:m1465_12, partial:m1469_4 +# 1470| r1470_1(glval) = VariableAddress[rx1] : +# 1470| r1470_2(glval) = VariableAddress[x1] : +# 1470| r1470_3(int &) = Load[x1] : &:r1470_2, m0_14 +# 1470| r1470_4(int &) = CopyValue : r1470_3 +# 1470| m1470_5(int &) = Store[rx1] : &:r1470_1, r1470_4 +# 1471| r1471_1(glval) = VariableAddress[x] : +# 1471| r1471_2(glval) = VariableAddress[x1] : +# 1471| r1471_3(int &) = Load[x1] : &:r1471_2, m0_14 +# 1471| r1471_4(int) = Load[?] : &:r1471_3, m1469_4 +# 1471| m1471_5(int) = Store[x] : &:r1471_1, r1471_4 +# 1475| r1475_1(glval) = VariableAddress[unnamed_local_variable] : +# 1475| r1475_2(glval) = VariableAddress[xs] : +# 1475| r1475_3(int(&)[2]) = CopyValue : r1475_2 +# 1475| m1475_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1475_1, r1475_3 +# 1476| r1476_1(glval) = VariableAddress[x0] : +# 1476| r1476_2(glval) = VariableAddress[unnamed_local_variable] : +# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, m1475_4 +# 1476| r1476_4(glval) = CopyValue : r1476_3 +# 1476| r1476_5(int *) = Convert : r1476_4 +# 1476| r1476_6(int) = Constant[0] : +# 1476| r1476_7(glval) = PointerAdd[4] : r1476_5, r1476_6 +# 1476| r1476_8(int &) = CopyValue : r1476_7 +# 1476| m1476_9(int &) = Store[x0] : &:r1476_1, r1476_8 +# 1477| r1477_1(glval) = VariableAddress[x1] : +# 1477| r1477_2(glval) = VariableAddress[unnamed_local_variable] : +# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, m1475_4 +# 1477| r1477_4(glval) = CopyValue : r1477_3 +# 1477| r1477_5(int *) = Convert : r1477_4 +# 1477| r1477_6(int) = Constant[1] : +# 1477| r1477_7(glval) = PointerAdd[4] : r1477_5, r1477_6 +# 1477| r1477_8(int &) = CopyValue : r1477_7 +# 1477| m1477_9(int &) = Store[x1] : &:r1477_1, r1477_8 +# 1478| r1478_1(int) = Constant[3] : # 1478| r1478_2(glval) = VariableAddress[x1] : -# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, m1475_9 -# 1478| r1478_4(int) = Load[?] : &:r1478_3, m1476_5 -# 1478| m1478_5(int) = Store[x] : &:r1478_1, r1478_4 -# 1480| v1480_1(void) = NoOp : -# 1462| v1462_5(void) = ReturnVoid : -# 1462| v1462_6(void) = AliasedUse : m1462_3 -# 1462| v1462_7(void) = ExitFunction : +# 1478| r1478_3(int &) = Load[x1] : &:r1478_2, m1477_9 +# 1478| r1478_4(glval) = CopyValue : r1478_3 +# 1478| m1478_5(int) = Store[?] : &:r1478_4, r1478_1 +# 1478| m1478_6(int[2]) = Chi : total:m1469_5, partial:m1478_5 +# 1479| r1479_1(glval) = VariableAddress[rx1] : +# 1479| r1479_2(glval) = VariableAddress[x1] : +# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, m1477_9 +# 1479| r1479_4(glval) = CopyValue : r1479_3 +# 1479| r1479_5(int &) = CopyValue : r1479_4 +# 1479| m1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 +# 1480| r1480_1(glval) = VariableAddress[x] : +# 1480| r1480_2(glval) = VariableAddress[x1] : +# 1480| r1480_3(int &) = Load[x1] : &:r1480_2, m1477_9 +# 1480| r1480_4(int) = Load[?] : &:r1480_3, m1478_5 +# 1480| m1480_5(int) = Store[x] : &:r1480_1, r1480_4 +# 1482| v1482_1(void) = NoOp : +# 1464| v1464_5(void) = ReturnVoid : +# 1464| v1464_6(void) = AliasedUse : m1464_3 +# 1464| v1464_7(void) = ExitFunction : -# 1482| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1482| Block 0 -# 1482| v1482_1(void) = EnterFunction : -# 1482| m1482_2(unknown) = AliasedDefinition : -# 1482| m1482_3(unknown) = InitializeNonLocal : -# 1482| m1482_4(unknown) = Chi : total:m1482_2, partial:m1482_3 -# 1482| r1482_5(glval) = VariableAddress[#this] : -# 1482| m1482_6(glval) = InitializeParameter[#this] : &:r1482_5 -# 1482| r1482_7(glval) = Load[#this] : &:r1482_5, m1482_6 -# 1482| m1482_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1482_7 -# 1482| v1482_9(void) = NoOp : -# 1482| v1482_10(void) = ReturnIndirection[#this] : &:r1482_7, m1482_8 -# 1482| v1482_11(void) = ReturnVoid : -# 1482| v1482_12(void) = AliasedUse : m1482_3 -# 1482| v1482_13(void) = ExitFunction : +# 1484| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1484| Block 0 +# 1484| v1484_1(void) = EnterFunction : +# 1484| m1484_2(unknown) = AliasedDefinition : +# 1484| m1484_3(unknown) = InitializeNonLocal : +# 1484| m1484_4(unknown) = Chi : total:m1484_2, partial:m1484_3 +# 1484| r1484_5(glval) = VariableAddress[#this] : +# 1484| m1484_6(glval) = InitializeParameter[#this] : &:r1484_5 +# 1484| r1484_7(glval) = Load[#this] : &:r1484_5, m1484_6 +# 1484| m1484_8(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1484_7 +# 1484| v1484_9(void) = NoOp : +# 1484| v1484_10(void) = ReturnIndirection[#this] : &:r1484_7, m1484_8 +# 1484| v1484_11(void) = ReturnVoid : +# 1484| v1484_12(void) = AliasedUse : m1484_3 +# 1484| v1484_13(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| m1486_2(unknown) = AliasedDefinition : -# 1486| m1486_3(unknown) = InitializeNonLocal : -# 1486| m1486_4(unknown) = Chi : total:m1486_2, partial:m1486_3 -# 1486| r1486_5(glval) = VariableAddress[#this] : -# 1486| m1486_6(glval) = InitializeParameter[#this] : &:r1486_5 -# 1486| r1486_7(glval) = Load[#this] : &:r1486_5, m1486_6 -# 1486| m1486_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_7 -# 1486| v1486_9(void) = NoOp : -# 1486| v1486_10(void) = ReturnIndirection[#this] : &:r1486_7, m1486_8 -# 1486| v1486_11(void) = ReturnVoid : -# 1486| v1486_12(void) = AliasedUse : m1486_3 -# 1486| v1486_13(void) = ExitFunction : +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| m1488_2(unknown) = AliasedDefinition : +# 1488| m1488_3(unknown) = InitializeNonLocal : +# 1488| m1488_4(unknown) = Chi : total:m1488_2, partial:m1488_3 +# 1488| r1488_5(glval) = VariableAddress[#this] : +# 1488| m1488_6(glval) = InitializeParameter[#this] : &:r1488_5 +# 1488| r1488_7(glval) = Load[#this] : &:r1488_5, m1488_6 +# 1488| m1488_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_7 +# 1488| v1488_9(void) = NoOp : +# 1488| v1488_10(void) = ReturnIndirection[#this] : &:r1488_7, m1488_8 +# 1488| v1488_11(void) = ReturnVoid : +# 1488| v1488_12(void) = AliasedUse : m1488_3 +# 1488| v1488_13(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| m1486_2(unknown) = AliasedDefinition : -# 1486| m1486_3(unknown) = InitializeNonLocal : -# 1486| m1486_4(unknown) = Chi : total:m1486_2, partial:m1486_3 -# 1486| r1486_5(glval) = VariableAddress[#this] : -# 1486| m1486_6(glval) = InitializeParameter[#this] : &:r1486_5 -# 1486| r1486_7(glval) = Load[#this] : &:r1486_5, m1486_6 -# 1486| m1486_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_7 +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| m1488_2(unknown) = AliasedDefinition : +# 1488| m1488_3(unknown) = InitializeNonLocal : +# 1488| m1488_4(unknown) = Chi : total:m1488_2, partial:m1488_3 +# 1488| r1488_5(glval) = VariableAddress[#this] : +# 1488| m1488_6(glval) = InitializeParameter[#this] : &:r1488_5 +# 1488| r1488_7(glval) = Load[#this] : &:r1488_5, m1488_6 +# 1488| m1488_8(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1486| r1486_9(glval) = FieldAddress[i] : m1486_6 -# 1486| r1486_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_10, m0_2 -# 1486| r1486_12(glval) = CopyValue : r1486_11 -# 1486| r1486_13(glval) = FieldAddress[i] : r1486_12 -# 1486| r1486_14(int) = Load[?] : &:r1486_13, ~m0_4 -# 1486| m1486_15(int) = Store[?] : &:r1486_9, r1486_14 -# 1486| m1486_16(unknown) = Chi : total:m1486_8, partial:m1486_15 -# 1486| r1486_17(glval) = FieldAddress[d] : m1486_6 -# 1486| r1486_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_18, m0_2 -# 1486| r1486_20(glval) = CopyValue : r1486_19 -# 1486| r1486_21(glval) = FieldAddress[d] : r1486_20 -# 1486| r1486_22(double) = Load[?] : &:r1486_21, ~m0_4 -# 1486| m1486_23(double) = Store[?] : &:r1486_17, r1486_22 -# 1486| m1486_24(unknown) = Chi : total:m1486_16, partial:m1486_23 -# 1486| r1486_25(glval) = FieldAddress[b] : m1486_6 -# 1486| r1486_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_26, m0_2 -# 1486| r1486_28(glval) = CopyValue : r1486_27 -# 1486| r1486_29(glval) = FieldAddress[b] : r1486_28 -# 1486| r1486_30(unsigned int) = Load[?] : &:r1486_29, ~m0_4 -# 1486| m1486_31(unsigned int) = Store[?] : &:r1486_25, r1486_30 -# 1486| m1486_32(unknown) = Chi : total:m1486_24, partial:m1486_31 -# 1486| r1486_33(glval) = FieldAddress[r] : m1486_6 -# 1486| r1486_34(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_34, m0_2 -# 1486| r1486_36(glval) = CopyValue : r1486_35 -# 1486| r1486_37(glval) = FieldAddress[r] : r1486_36 -# 1486| r1486_38(int &) = Load[?] : &:r1486_37, ~m0_4 -# 1486| m1486_39(int &) = Store[?] : &:r1486_33, r1486_38 -# 1486| m1486_40(unknown) = Chi : total:m1486_32, partial:m1486_39 -# 1486| r1486_41(glval) = FieldAddress[p] : m1486_6 -# 1486| r1486_42(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_42, m0_2 -# 1486| r1486_44(glval) = CopyValue : r1486_43 -# 1486| r1486_45(glval) = FieldAddress[p] : r1486_44 -# 1486| r1486_46(int *) = Load[?] : &:r1486_45, ~m0_4 -# 1486| m1486_47(int *) = Store[?] : &:r1486_41, r1486_46 -# 1486| m1486_48(unknown) = Chi : total:m1486_40, partial:m1486_47 -# 1486| r1486_49(glval) = FieldAddress[xs] : m1486_6 -# 1486| r1486_50(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_50, m0_2 -# 1486| r1486_52(glval) = CopyValue : r1486_51 -# 1486| r1486_53(glval) = FieldAddress[xs] : r1486_52 -# 1486| r1486_54(int[2]) = Load[?] : &:r1486_53, ~m0_4 -# 1486| m1486_55(int[2]) = Store[?] : &:r1486_49, r1486_54 -# 1486| m1486_56(unknown) = Chi : total:m1486_48, partial:m1486_55 -# 1486| r1486_57(glval) = FieldAddress[r_alt] : m1486_6 -# 1486| r1486_58(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_58, m0_2 -# 1486| r1486_60(glval) = CopyValue : r1486_59 -# 1486| r1486_61(glval) = FieldAddress[r_alt] : r1486_60 -# 1486| r1486_62(int &) = Load[?] : &:r1486_61, ~m0_4 -# 1486| m1486_63(int &) = Store[?] : &:r1486_57, r1486_62 -# 1486| m1486_64(unknown) = Chi : total:m1486_56, partial:m1486_63 -# 1486| r1486_65(glval) = FieldAddress[m] : m1486_6 -# 1486| r1486_66(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_66, m0_2 -# 1486| r1486_68(glval) = CopyValue : r1486_67 -# 1486| r1486_69(glval) = FieldAddress[m] : r1486_68 -# 1486| r1486_70(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1486_69, ~m0_4 -# 1486| m1486_71(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1486_65, r1486_70 -# 1486| m1486_72(unknown) = Chi : total:m1486_64, partial:m1486_71 -# 1486| v1486_73(void) = NoOp : -# 1486| v1486_74(void) = ReturnIndirection[#this] : &:r1486_7, m1486_72 +# 1488| r1488_9(glval) = FieldAddress[i] : m1488_6 +# 1488| r1488_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_11(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_10, m0_2 +# 1488| r1488_12(glval) = CopyValue : r1488_11 +# 1488| r1488_13(glval) = FieldAddress[i] : r1488_12 +# 1488| r1488_14(int) = Load[?] : &:r1488_13, ~m0_4 +# 1488| m1488_15(int) = Store[?] : &:r1488_9, r1488_14 +# 1488| m1488_16(unknown) = Chi : total:m1488_8, partial:m1488_15 +# 1488| r1488_17(glval) = FieldAddress[d] : m1488_6 +# 1488| r1488_18(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_19(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_18, m0_2 +# 1488| r1488_20(glval) = CopyValue : r1488_19 +# 1488| r1488_21(glval) = FieldAddress[d] : r1488_20 +# 1488| r1488_22(double) = Load[?] : &:r1488_21, ~m0_4 +# 1488| m1488_23(double) = Store[?] : &:r1488_17, r1488_22 +# 1488| m1488_24(unknown) = Chi : total:m1488_16, partial:m1488_23 +# 1488| r1488_25(glval) = FieldAddress[b] : m1488_6 +# 1488| r1488_26(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_27(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_26, m0_2 +# 1488| r1488_28(glval) = CopyValue : r1488_27 +# 1488| r1488_29(glval) = FieldAddress[b] : r1488_28 +# 1488| r1488_30(unsigned int) = Load[?] : &:r1488_29, ~m0_4 +# 1488| m1488_31(unsigned int) = Store[?] : &:r1488_25, r1488_30 +# 1488| m1488_32(unknown) = Chi : total:m1488_24, partial:m1488_31 +# 1488| r1488_33(glval) = FieldAddress[r] : m1488_6 +# 1488| r1488_34(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_35(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_34, m0_2 +# 1488| r1488_36(glval) = CopyValue : r1488_35 +# 1488| r1488_37(glval) = FieldAddress[r] : r1488_36 +# 1488| r1488_38(int &) = Load[?] : &:r1488_37, ~m0_4 +# 1488| m1488_39(int &) = Store[?] : &:r1488_33, r1488_38 +# 1488| m1488_40(unknown) = Chi : total:m1488_32, partial:m1488_39 +# 1488| r1488_41(glval) = FieldAddress[p] : m1488_6 +# 1488| r1488_42(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_43(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_42, m0_2 +# 1488| r1488_44(glval) = CopyValue : r1488_43 +# 1488| r1488_45(glval) = FieldAddress[p] : r1488_44 +# 1488| r1488_46(int *) = Load[?] : &:r1488_45, ~m0_4 +# 1488| m1488_47(int *) = Store[?] : &:r1488_41, r1488_46 +# 1488| m1488_48(unknown) = Chi : total:m1488_40, partial:m1488_47 +# 1488| r1488_49(glval) = FieldAddress[xs] : m1488_6 +# 1488| r1488_50(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_51(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_50, m0_2 +# 1488| r1488_52(glval) = CopyValue : r1488_51 +# 1488| r1488_53(glval) = FieldAddress[xs] : r1488_52 +# 1488| r1488_54(int[2]) = Load[?] : &:r1488_53, ~m0_4 +# 1488| m1488_55(int[2]) = Store[?] : &:r1488_49, r1488_54 +# 1488| m1488_56(unknown) = Chi : total:m1488_48, partial:m1488_55 +# 1488| r1488_57(glval) = FieldAddress[r_alt] : m1488_6 +# 1488| r1488_58(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, m0_2 +# 1488| r1488_60(glval) = CopyValue : r1488_59 +# 1488| r1488_61(glval) = FieldAddress[r_alt] : r1488_60 +# 1488| r1488_62(int &) = Load[?] : &:r1488_61, ~m0_4 +# 1488| m1488_63(int &) = Store[?] : &:r1488_57, r1488_62 +# 1488| m1488_64(unknown) = Chi : total:m1488_56, partial:m1488_63 +# 1488| r1488_65(glval) = FieldAddress[m] : m1488_6 +# 1488| r1488_66(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_67(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_66, m0_2 +# 1488| r1488_68(glval) = CopyValue : r1488_67 +# 1488| r1488_69(glval) = FieldAddress[m] : r1488_68 +# 1488| r1488_70(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1488_69, ~m0_4 +# 1488| m1488_71(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1488_65, r1488_70 +# 1488| m1488_72(unknown) = Chi : total:m1488_64, partial:m1488_71 +# 1488| v1488_73(void) = NoOp : +# 1488| v1488_74(void) = ReturnIndirection[#this] : &:r1488_7, m1488_72 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1486| v1486_75(void) = ReturnVoid : -# 1486| v1486_76(void) = AliasedUse : m1486_3 -# 1486| v1486_77(void) = ExitFunction : +# 1488| v1488_75(void) = ReturnVoid : +# 1488| v1488_76(void) = AliasedUse : m1488_3 +# 1488| v1488_77(void) = ExitFunction : -# 1499| void data_member_structured_binding() -# 1499| Block 0 -# 1499| v1499_1(void) = EnterFunction : -# 1499| m1499_2(unknown) = AliasedDefinition : -# 1499| m1499_3(unknown) = InitializeNonLocal : -# 1499| m1499_4(unknown) = Chi : total:m1499_2, partial:m1499_3 -# 1500| r1500_1(glval) = VariableAddress[s] : -# 1500| m1500_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1500_1 -# 1500| r1500_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : -# 1500| v1500_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1500_3, this:r1500_1 -# 1500| m1500_5(unknown) = ^CallSideEffect : ~m1499_4 -# 1500| m1500_6(unknown) = Chi : total:m1499_4, partial:m1500_5 -# 1500| m1500_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1500_1 -# 1500| m1500_8(StructuredBindingDataMemberStruct) = Chi : total:m1500_2, partial:m1500_7 -# 1503| r1503_1(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_2(glval) = VariableAddress[s] : -# 1503| r1503_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1503_2, m1500_8 -# 1503| m1503_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1503_1, r1503_3 -# 1503| r1503_5(glval) = VariableAddress[i] : -# 1503| r1503_6(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_7(glval) = FieldAddress[i] : r1503_6 -# 1503| m1503_8(int &) = Store[i] : &:r1503_5, r1503_7 -# 1503| r1503_9(glval) = VariableAddress[d] : -# 1503| r1503_10(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_11(glval) = FieldAddress[d] : r1503_10 -# 1503| m1503_12(double &) = Store[d] : &:r1503_9, r1503_11 -# 1503| r1503_13(glval) = VariableAddress[b] : -# 1503| r1503_14(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_15(glval) = FieldAddress[b] : r1503_14 -# 1503| m1503_16(unsigned int &) = Store[b] : &:r1503_13, r1503_15 -# 1503| r1503_17(glval) = VariableAddress[r] : -# 1503| r1503_18(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_19(glval) = FieldAddress[r] : r1503_18 -# 1503| r1503_20(int &) = Load[?] : &:r1503_19, ~m1503_4 -# 1503| r1503_21(glval) = CopyValue : r1503_20 -# 1503| m1503_22(int &) = Store[r] : &:r1503_17, r1503_21 -# 1503| r1503_23(glval) = VariableAddress[p] : -# 1503| r1503_24(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_25(glval) = FieldAddress[p] : r1503_24 -# 1503| m1503_26(int *&) = Store[p] : &:r1503_23, r1503_25 -# 1503| r1503_27(glval) = VariableAddress[xs] : -# 1503| r1503_28(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_29(glval) = FieldAddress[xs] : r1503_28 -# 1503| m1503_30(int(&)[2]) = Store[xs] : &:r1503_27, r1503_29 -# 1503| r1503_31(glval) = VariableAddress[r_alt] : -# 1503| r1503_32(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_33(glval) = FieldAddress[r_alt] : r1503_32 -# 1503| r1503_34(int &) = Load[?] : &:r1503_33, ~m1503_4 -# 1503| r1503_35(glval) = CopyValue : r1503_34 -# 1503| m1503_36(int &) = Store[r_alt] : &:r1503_31, r1503_35 -# 1503| r1503_37(glval) = VariableAddress[m] : -# 1503| r1503_38(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_39(glval) = FieldAddress[m] : r1503_38 -# 1503| m1503_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1503_37, r1503_39 -# 1504| r1504_1(double) = Constant[4.0] : -# 1504| r1504_2(glval) = VariableAddress[d] : -# 1504| r1504_3(double &) = Load[d] : &:r1504_2, m1503_12 -# 1504| m1504_4(double) = Store[?] : &:r1504_3, r1504_1 -# 1504| m1504_5(StructuredBindingDataMemberStruct) = Chi : total:m1503_4, partial:m1504_4 -# 1505| r1505_1(glval) = VariableAddress[rd] : -# 1505| r1505_2(glval) = VariableAddress[d] : -# 1505| r1505_3(double &) = Load[d] : &:r1505_2, m1503_12 -# 1505| r1505_4(double &) = CopyValue : r1505_3 -# 1505| m1505_5(double &) = Store[rd] : &:r1505_1, r1505_4 -# 1506| r1506_1(glval) = VariableAddress[v] : -# 1506| r1506_2(glval) = VariableAddress[i] : -# 1506| r1506_3(int &) = Load[i] : &:r1506_2, m1503_8 -# 1506| r1506_4(int) = Load[?] : &:r1506_3, ~m1503_4 -# 1506| m1506_5(int) = Store[v] : &:r1506_1, r1506_4 -# 1507| r1507_1(int) = Constant[5] : -# 1507| r1507_2(glval) = VariableAddress[r] : -# 1507| r1507_3(int &) = Load[r] : &:r1507_2, m1503_22 -# 1507| m1507_4(int) = Store[?] : &:r1507_3, r1507_1 -# 1507| m1507_5(unknown) = Chi : total:m1500_6, partial:m1507_4 -# 1508| r1508_1(int) = Constant[6] : -# 1508| r1508_2(glval) = VariableAddress[p] : -# 1508| r1508_3(int *&) = Load[p] : &:r1508_2, m1503_26 -# 1508| r1508_4(int *) = Load[?] : &:r1508_3, ~m1503_4 -# 1508| r1508_5(glval) = CopyValue : r1508_4 -# 1508| m1508_6(int) = Store[?] : &:r1508_5, r1508_1 -# 1508| m1508_7(unknown) = Chi : total:m1507_5, partial:m1508_6 -# 1509| r1509_1(glval) = VariableAddress[rr] : +# 1501| void data_member_structured_binding() +# 1501| Block 0 +# 1501| v1501_1(void) = EnterFunction : +# 1501| m1501_2(unknown) = AliasedDefinition : +# 1501| m1501_3(unknown) = InitializeNonLocal : +# 1501| m1501_4(unknown) = Chi : total:m1501_2, partial:m1501_3 +# 1502| r1502_1(glval) = VariableAddress[s] : +# 1502| m1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 +# 1502| r1502_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : +# 1502| v1502_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1502_3, this:r1502_1 +# 1502| m1502_5(unknown) = ^CallSideEffect : ~m1501_4 +# 1502| m1502_6(unknown) = Chi : total:m1501_4, partial:m1502_5 +# 1502| m1502_7(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 +# 1502| m1502_8(StructuredBindingDataMemberStruct) = Chi : total:m1502_2, partial:m1502_7 +# 1505| r1505_1(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_2(glval) = VariableAddress[s] : +# 1505| r1505_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1505_2, m1502_8 +# 1505| m1505_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1505_1, r1505_3 +# 1505| r1505_5(glval) = VariableAddress[i] : +# 1505| r1505_6(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_7(glval) = FieldAddress[i] : r1505_6 +# 1505| m1505_8(int &) = Store[i] : &:r1505_5, r1505_7 +# 1505| r1505_9(glval) = VariableAddress[d] : +# 1505| r1505_10(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_11(glval) = FieldAddress[d] : r1505_10 +# 1505| m1505_12(double &) = Store[d] : &:r1505_9, r1505_11 +# 1505| r1505_13(glval) = VariableAddress[b] : +# 1505| r1505_14(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_15(glval) = FieldAddress[b] : r1505_14 +# 1505| m1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 +# 1505| r1505_17(glval) = VariableAddress[r] : +# 1505| r1505_18(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_19(glval) = FieldAddress[r] : r1505_18 +# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m1505_4 +# 1505| r1505_21(glval) = CopyValue : r1505_20 +# 1505| m1505_22(int &) = Store[r] : &:r1505_17, r1505_21 +# 1505| r1505_23(glval) = VariableAddress[p] : +# 1505| r1505_24(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_25(glval) = FieldAddress[p] : r1505_24 +# 1505| m1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 +# 1505| r1505_27(glval) = VariableAddress[xs] : +# 1505| r1505_28(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_29(glval) = FieldAddress[xs] : r1505_28 +# 1505| m1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 +# 1505| r1505_31(glval) = VariableAddress[r_alt] : +# 1505| r1505_32(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_33(glval) = FieldAddress[r_alt] : r1505_32 +# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m1505_4 +# 1505| r1505_35(glval) = CopyValue : r1505_34 +# 1505| m1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 +# 1505| r1505_37(glval) = VariableAddress[m] : +# 1505| r1505_38(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_39(glval) = FieldAddress[m] : r1505_38 +# 1505| m1505_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1505_37, r1505_39 +# 1506| r1506_1(double) = Constant[4.0] : +# 1506| r1506_2(glval) = VariableAddress[d] : +# 1506| r1506_3(double &) = Load[d] : &:r1506_2, m1505_12 +# 1506| m1506_4(double) = Store[?] : &:r1506_3, r1506_1 +# 1506| m1506_5(StructuredBindingDataMemberStruct) = Chi : total:m1505_4, partial:m1506_4 +# 1507| r1507_1(glval) = VariableAddress[rd] : +# 1507| r1507_2(glval) = VariableAddress[d] : +# 1507| r1507_3(double &) = Load[d] : &:r1507_2, m1505_12 +# 1507| r1507_4(double &) = CopyValue : r1507_3 +# 1507| m1507_5(double &) = Store[rd] : &:r1507_1, r1507_4 +# 1508| r1508_1(glval) = VariableAddress[v] : +# 1508| r1508_2(glval) = VariableAddress[i] : +# 1508| r1508_3(int &) = Load[i] : &:r1508_2, m1505_8 +# 1508| r1508_4(int) = Load[?] : &:r1508_3, ~m1505_4 +# 1508| m1508_5(int) = Store[v] : &:r1508_1, r1508_4 +# 1509| r1509_1(int) = Constant[5] : # 1509| r1509_2(glval) = VariableAddress[r] : -# 1509| r1509_3(int &) = Load[r] : &:r1509_2, m1503_22 -# 1509| r1509_4(int &) = CopyValue : r1509_3 -# 1509| m1509_5(int &) = Store[rr] : &:r1509_1, r1509_4 -# 1510| r1510_1(glval) = VariableAddress[pr] : -# 1510| r1510_2(glval) = VariableAddress[r] : -# 1510| r1510_3(int &) = Load[r] : &:r1510_2, m1503_22 -# 1510| r1510_4(int *) = CopyValue : r1510_3 -# 1510| m1510_5(int *) = Store[pr] : &:r1510_1, r1510_4 -# 1511| r1511_1(glval) = VariableAddress[w] : +# 1509| r1509_3(int &) = Load[r] : &:r1509_2, m1505_22 +# 1509| m1509_4(int) = Store[?] : &:r1509_3, r1509_1 +# 1509| m1509_5(unknown) = Chi : total:m1502_6, partial:m1509_4 +# 1510| r1510_1(int) = Constant[6] : +# 1510| r1510_2(glval) = VariableAddress[p] : +# 1510| r1510_3(int *&) = Load[p] : &:r1510_2, m1505_26 +# 1510| r1510_4(int *) = Load[?] : &:r1510_3, ~m1505_4 +# 1510| r1510_5(glval) = CopyValue : r1510_4 +# 1510| m1510_6(int) = Store[?] : &:r1510_5, r1510_1 +# 1510| m1510_7(unknown) = Chi : total:m1509_5, partial:m1510_6 +# 1511| r1511_1(glval) = VariableAddress[rr] : # 1511| r1511_2(glval) = VariableAddress[r] : -# 1511| r1511_3(int &) = Load[r] : &:r1511_2, m1503_22 -# 1511| r1511_4(int) = Load[?] : &:r1511_3, ~m1508_7 -# 1511| m1511_5(int) = Store[w] : &:r1511_1, r1511_4 -# 1515| r1515_1(glval) = VariableAddress[unnamed_local_variable] : -# 1515| r1515_2(glval) = VariableAddress[s] : -# 1515| r1515_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1515_2, m1500_8 -# 1515| m1515_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1515_1, r1515_3 -# 1516| r1516_1(glval) = VariableAddress[i] : -# 1516| r1516_2(glval) = VariableAddress[unnamed_local_variable] : -# 1516| r1516_3(glval) = FieldAddress[i] : r1516_2 -# 1516| r1516_4(int &) = CopyValue : r1516_3 -# 1516| m1516_5(int &) = Store[i] : &:r1516_1, r1516_4 -# 1517| r1517_1(glval) = VariableAddress[d] : -# 1517| r1517_2(glval) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_3(glval) = FieldAddress[d] : r1517_2 -# 1517| r1517_4(double &) = CopyValue : r1517_3 -# 1517| m1517_5(double &) = Store[d] : &:r1517_1, r1517_4 -# 1519| r1519_1(glval) = VariableAddress[r] : +# 1511| r1511_3(int &) = Load[r] : &:r1511_2, m1505_22 +# 1511| r1511_4(int &) = CopyValue : r1511_3 +# 1511| m1511_5(int &) = Store[rr] : &:r1511_1, r1511_4 +# 1512| r1512_1(glval) = VariableAddress[pr] : +# 1512| r1512_2(glval) = VariableAddress[r] : +# 1512| r1512_3(int &) = Load[r] : &:r1512_2, m1505_22 +# 1512| r1512_4(int *) = CopyValue : r1512_3 +# 1512| m1512_5(int *) = Store[pr] : &:r1512_1, r1512_4 +# 1513| r1513_1(glval) = VariableAddress[w] : +# 1513| r1513_2(glval) = VariableAddress[r] : +# 1513| r1513_3(int &) = Load[r] : &:r1513_2, m1505_22 +# 1513| r1513_4(int) = Load[?] : &:r1513_3, ~m1510_7 +# 1513| m1513_5(int) = Store[w] : &:r1513_1, r1513_4 +# 1517| r1517_1(glval) = VariableAddress[unnamed_local_variable] : +# 1517| r1517_2(glval) = VariableAddress[s] : +# 1517| r1517_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1517_2, m1502_8 +# 1517| m1517_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1517_1, r1517_3 +# 1518| r1518_1(glval) = VariableAddress[i] : +# 1518| r1518_2(glval) = VariableAddress[unnamed_local_variable] : +# 1518| r1518_3(glval) = FieldAddress[i] : r1518_2 +# 1518| r1518_4(int &) = CopyValue : r1518_3 +# 1518| m1518_5(int &) = Store[i] : &:r1518_1, r1518_4 +# 1519| r1519_1(glval) = VariableAddress[d] : # 1519| r1519_2(glval) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval) = FieldAddress[r] : r1519_2 -# 1519| r1519_4(int &) = Load[?] : &:r1519_3, ~m1515_4 -# 1519| r1519_5(glval) = CopyValue : r1519_4 -# 1519| r1519_6(int &) = CopyValue : r1519_5 -# 1519| m1519_7(int &) = Store[r] : &:r1519_1, r1519_6 -# 1520| r1520_1(glval) = VariableAddress[p] : -# 1520| r1520_2(glval) = VariableAddress[unnamed_local_variable] : -# 1520| r1520_3(glval) = FieldAddress[p] : r1520_2 -# 1520| r1520_4(int *&) = CopyValue : r1520_3 -# 1520| m1520_5(int *&) = Store[p] : &:r1520_1, r1520_4 -# 1521| r1521_1(double) = Constant[4.0] : -# 1521| r1521_2(glval) = VariableAddress[d] : -# 1521| r1521_3(double &) = Load[d] : &:r1521_2, m1517_5 -# 1521| r1521_4(glval) = CopyValue : r1521_3 -# 1521| m1521_5(double) = Store[?] : &:r1521_4, r1521_1 -# 1521| m1521_6(StructuredBindingDataMemberStruct) = Chi : total:m1515_4, partial:m1521_5 -# 1522| r1522_1(glval) = VariableAddress[rd] : -# 1522| r1522_2(glval) = VariableAddress[d] : -# 1522| r1522_3(double &) = Load[d] : &:r1522_2, m1517_5 -# 1522| r1522_4(glval) = CopyValue : r1522_3 -# 1522| r1522_5(double &) = CopyValue : r1522_4 -# 1522| m1522_6(double &) = Store[rd] : &:r1522_1, r1522_5 -# 1523| r1523_1(glval) = VariableAddress[v] : -# 1523| r1523_2(glval) = VariableAddress[i] : -# 1523| r1523_3(int &) = Load[i] : &:r1523_2, m1516_5 -# 1523| r1523_4(int) = Load[?] : &:r1523_3, ~m1515_4 -# 1523| m1523_5(int) = Store[v] : &:r1523_1, r1523_4 -# 1524| r1524_1(int) = Constant[5] : -# 1524| r1524_2(glval) = VariableAddress[r] : -# 1524| r1524_3(int &) = Load[r] : &:r1524_2, m1519_7 -# 1524| r1524_4(glval) = CopyValue : r1524_3 -# 1524| m1524_5(int) = Store[?] : &:r1524_4, r1524_1 -# 1524| m1524_6(unknown) = Chi : total:m1508_7, partial:m1524_5 -# 1525| r1525_1(int) = Constant[6] : -# 1525| r1525_2(glval) = VariableAddress[p] : -# 1525| r1525_3(int *&) = Load[p] : &:r1525_2, m1520_5 -# 1525| r1525_4(int *) = Load[?] : &:r1525_3, ~m1515_4 -# 1525| r1525_5(glval) = CopyValue : r1525_4 -# 1525| m1525_6(int) = Store[?] : &:r1525_5, r1525_1 -# 1525| m1525_7(unknown) = Chi : total:m1524_6, partial:m1525_6 -# 1526| r1526_1(glval) = VariableAddress[rr] : +# 1519| r1519_3(glval) = FieldAddress[d] : r1519_2 +# 1519| r1519_4(double &) = CopyValue : r1519_3 +# 1519| m1519_5(double &) = Store[d] : &:r1519_1, r1519_4 +# 1521| r1521_1(glval) = VariableAddress[r] : +# 1521| r1521_2(glval) = VariableAddress[unnamed_local_variable] : +# 1521| r1521_3(glval) = FieldAddress[r] : r1521_2 +# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m1517_4 +# 1521| r1521_5(glval) = CopyValue : r1521_4 +# 1521| r1521_6(int &) = CopyValue : r1521_5 +# 1521| m1521_7(int &) = Store[r] : &:r1521_1, r1521_6 +# 1522| r1522_1(glval) = VariableAddress[p] : +# 1522| r1522_2(glval) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_3(glval) = FieldAddress[p] : r1522_2 +# 1522| r1522_4(int *&) = CopyValue : r1522_3 +# 1522| m1522_5(int *&) = Store[p] : &:r1522_1, r1522_4 +# 1523| r1523_1(double) = Constant[4.0] : +# 1523| r1523_2(glval) = VariableAddress[d] : +# 1523| r1523_3(double &) = Load[d] : &:r1523_2, m1519_5 +# 1523| r1523_4(glval) = CopyValue : r1523_3 +# 1523| m1523_5(double) = Store[?] : &:r1523_4, r1523_1 +# 1523| m1523_6(StructuredBindingDataMemberStruct) = Chi : total:m1517_4, partial:m1523_5 +# 1524| r1524_1(glval) = VariableAddress[rd] : +# 1524| r1524_2(glval) = VariableAddress[d] : +# 1524| r1524_3(double &) = Load[d] : &:r1524_2, m1519_5 +# 1524| r1524_4(glval) = CopyValue : r1524_3 +# 1524| r1524_5(double &) = CopyValue : r1524_4 +# 1524| m1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 +# 1525| r1525_1(glval) = VariableAddress[v] : +# 1525| r1525_2(glval) = VariableAddress[i] : +# 1525| r1525_3(int &) = Load[i] : &:r1525_2, m1518_5 +# 1525| r1525_4(int) = Load[?] : &:r1525_3, ~m1517_4 +# 1525| m1525_5(int) = Store[v] : &:r1525_1, r1525_4 +# 1526| r1526_1(int) = Constant[5] : # 1526| r1526_2(glval) = VariableAddress[r] : -# 1526| r1526_3(int &) = Load[r] : &:r1526_2, m1519_7 +# 1526| r1526_3(int &) = Load[r] : &:r1526_2, m1521_7 # 1526| r1526_4(glval) = CopyValue : r1526_3 -# 1526| r1526_5(int &) = CopyValue : r1526_4 -# 1526| m1526_6(int &) = Store[rr] : &:r1526_1, r1526_5 -# 1527| r1527_1(glval) = VariableAddress[pr] : -# 1527| r1527_2(glval) = VariableAddress[r] : -# 1527| r1527_3(int &) = Load[r] : &:r1527_2, m1519_7 -# 1527| r1527_4(glval) = CopyValue : r1527_3 -# 1527| r1527_5(int *) = CopyValue : r1527_4 -# 1527| m1527_6(int *) = Store[pr] : &:r1527_1, r1527_5 -# 1528| r1528_1(glval) = VariableAddress[w] : +# 1526| m1526_5(int) = Store[?] : &:r1526_4, r1526_1 +# 1526| m1526_6(unknown) = Chi : total:m1510_7, partial:m1526_5 +# 1527| r1527_1(int) = Constant[6] : +# 1527| r1527_2(glval) = VariableAddress[p] : +# 1527| r1527_3(int *&) = Load[p] : &:r1527_2, m1522_5 +# 1527| r1527_4(int *) = Load[?] : &:r1527_3, ~m1517_4 +# 1527| r1527_5(glval) = CopyValue : r1527_4 +# 1527| m1527_6(int) = Store[?] : &:r1527_5, r1527_1 +# 1527| m1527_7(unknown) = Chi : total:m1526_6, partial:m1527_6 +# 1528| r1528_1(glval) = VariableAddress[rr] : # 1528| r1528_2(glval) = VariableAddress[r] : -# 1528| r1528_3(int &) = Load[r] : &:r1528_2, m1519_7 -# 1528| r1528_4(int) = Load[?] : &:r1528_3, ~m1525_7 -# 1528| m1528_5(int) = Store[w] : &:r1528_1, r1528_4 -# 1530| v1530_1(void) = NoOp : -# 1499| v1499_5(void) = ReturnVoid : -# 1499| v1499_6(void) = AliasedUse : ~m1525_7 -# 1499| v1499_7(void) = ExitFunction : +# 1528| r1528_3(int &) = Load[r] : &:r1528_2, m1521_7 +# 1528| r1528_4(glval) = CopyValue : r1528_3 +# 1528| r1528_5(int &) = CopyValue : r1528_4 +# 1528| m1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 +# 1529| r1529_1(glval) = VariableAddress[pr] : +# 1529| r1529_2(glval) = VariableAddress[r] : +# 1529| r1529_3(int &) = Load[r] : &:r1529_2, m1521_7 +# 1529| r1529_4(glval) = CopyValue : r1529_3 +# 1529| r1529_5(int *) = CopyValue : r1529_4 +# 1529| m1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 +# 1530| r1530_1(glval) = VariableAddress[w] : +# 1530| r1530_2(glval) = VariableAddress[r] : +# 1530| r1530_3(int &) = Load[r] : &:r1530_2, m1521_7 +# 1530| r1530_4(int) = Load[?] : &:r1530_3, ~m1527_7 +# 1530| m1530_5(int) = Store[w] : &:r1530_1, r1530_4 +# 1532| v1532_1(void) = NoOp : +# 1501| v1501_5(void) = ReturnVoid : +# 1501| v1501_6(void) = AliasedUse : ~m1527_7 +# 1501| v1501_7(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| m1539_2(unknown) = AliasedDefinition : -# 1539| m1539_3(unknown) = InitializeNonLocal : -# 1539| m1539_4(unknown) = Chi : total:m1539_2, partial:m1539_3 -# 1539| r1539_5(glval) = VariableAddress[#this] : -# 1539| m1539_6(glval) = InitializeParameter[#this] : &:r1539_5 -# 1539| r1539_7(glval) = Load[#this] : &:r1539_5, m1539_6 -# 1539| m1539_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_7 -# 1539| v1539_9(void) = NoOp : -# 1539| v1539_10(void) = ReturnIndirection[#this] : &:r1539_7, m1539_8 -# 1539| v1539_11(void) = ReturnVoid : -# 1539| v1539_12(void) = AliasedUse : m1539_3 -# 1539| v1539_13(void) = ExitFunction : +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| m1541_2(unknown) = AliasedDefinition : +# 1541| m1541_3(unknown) = InitializeNonLocal : +# 1541| m1541_4(unknown) = Chi : total:m1541_2, partial:m1541_3 +# 1541| r1541_5(glval) = VariableAddress[#this] : +# 1541| m1541_6(glval) = InitializeParameter[#this] : &:r1541_5 +# 1541| r1541_7(glval) = Load[#this] : &:r1541_5, m1541_6 +# 1541| m1541_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_7 +# 1541| v1541_9(void) = NoOp : +# 1541| v1541_10(void) = ReturnIndirection[#this] : &:r1541_7, m1541_8 +# 1541| v1541_11(void) = ReturnVoid : +# 1541| v1541_12(void) = AliasedUse : m1541_3 +# 1541| v1541_13(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| m1539_2(unknown) = AliasedDefinition : -# 1539| m1539_3(unknown) = InitializeNonLocal : -# 1539| m1539_4(unknown) = Chi : total:m1539_2, partial:m1539_3 -# 1539| r1539_5(glval) = VariableAddress[#this] : -# 1539| m1539_6(glval) = InitializeParameter[#this] : &:r1539_5 -# 1539| r1539_7(glval) = Load[#this] : &:r1539_5, m1539_6 -# 1539| m1539_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_7 +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| m1541_2(unknown) = AliasedDefinition : +# 1541| m1541_3(unknown) = InitializeNonLocal : +# 1541| m1541_4(unknown) = Chi : total:m1541_2, partial:m1541_3 +# 1541| r1541_5(glval) = VariableAddress[#this] : +# 1541| m1541_6(glval) = InitializeParameter[#this] : &:r1541_5 +# 1541| r1541_7(glval) = Load[#this] : &:r1541_5, m1541_6 +# 1541| m1541_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1539| r1539_9(glval) = FieldAddress[i] : m1539_6 -# 1539| r1539_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_10, m0_2 -# 1539| r1539_12(glval) = CopyValue : r1539_11 -# 1539| r1539_13(glval) = FieldAddress[i] : r1539_12 -# 1539| r1539_14(int) = Load[?] : &:r1539_13, ~m0_4 -# 1539| m1539_15(int) = Store[?] : &:r1539_9, r1539_14 -# 1539| m1539_16(unknown) = Chi : total:m1539_8, partial:m1539_15 -# 1539| r1539_17(glval) = FieldAddress[d] : m1539_6 -# 1539| r1539_18(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_18, m0_2 -# 1539| r1539_20(glval) = CopyValue : r1539_19 -# 1539| r1539_21(glval) = FieldAddress[d] : r1539_20 -# 1539| r1539_22(double) = Load[?] : &:r1539_21, ~m0_4 -# 1539| m1539_23(double) = Store[?] : &:r1539_17, r1539_22 -# 1539| m1539_24(unknown) = Chi : total:m1539_16, partial:m1539_23 -# 1539| r1539_25(glval) = FieldAddress[r] : m1539_6 -# 1539| r1539_26(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_26, m0_2 -# 1539| r1539_28(glval) = CopyValue : r1539_27 -# 1539| r1539_29(glval) = FieldAddress[r] : r1539_28 -# 1539| r1539_30(int &) = Load[?] : &:r1539_29, ~m0_4 -# 1539| m1539_31(int &) = Store[?] : &:r1539_25, r1539_30 -# 1539| m1539_32(unknown) = Chi : total:m1539_24, partial:m1539_31 -# 1539| v1539_33(void) = NoOp : -# 1539| v1539_34(void) = ReturnIndirection[#this] : &:r1539_7, m1539_32 +# 1541| r1541_9(glval) = FieldAddress[i] : m1541_6 +# 1541| r1541_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_11(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_10, m0_2 +# 1541| r1541_12(glval) = CopyValue : r1541_11 +# 1541| r1541_13(glval) = FieldAddress[i] : r1541_12 +# 1541| r1541_14(int) = Load[?] : &:r1541_13, ~m0_4 +# 1541| m1541_15(int) = Store[?] : &:r1541_9, r1541_14 +# 1541| m1541_16(unknown) = Chi : total:m1541_8, partial:m1541_15 +# 1541| r1541_17(glval) = FieldAddress[d] : m1541_6 +# 1541| r1541_18(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_19(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_18, m0_2 +# 1541| r1541_20(glval) = CopyValue : r1541_19 +# 1541| r1541_21(glval) = FieldAddress[d] : r1541_20 +# 1541| r1541_22(double) = Load[?] : &:r1541_21, ~m0_4 +# 1541| m1541_23(double) = Store[?] : &:r1541_17, r1541_22 +# 1541| m1541_24(unknown) = Chi : total:m1541_16, partial:m1541_23 +# 1541| r1541_25(glval) = FieldAddress[r] : m1541_6 +# 1541| r1541_26(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_27(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_26, m0_2 +# 1541| r1541_28(glval) = CopyValue : r1541_27 +# 1541| r1541_29(glval) = FieldAddress[r] : r1541_28 +# 1541| r1541_30(int &) = Load[?] : &:r1541_29, ~m0_4 +# 1541| m1541_31(int &) = Store[?] : &:r1541_25, r1541_30 +# 1541| m1541_32(unknown) = Chi : total:m1541_24, partial:m1541_31 +# 1541| v1541_33(void) = NoOp : +# 1541| v1541_34(void) = ReturnIndirection[#this] : &:r1541_7, m1541_32 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1539| v1539_35(void) = ReturnVoid : -# 1539| v1539_36(void) = AliasedUse : m1539_3 -# 1539| v1539_37(void) = ExitFunction : +# 1541| v1541_35(void) = ReturnVoid : +# 1541| v1541_36(void) = AliasedUse : m1541_3 +# 1541| v1541_37(void) = ExitFunction : -# 1567| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1567| Block 0 -# 1567| v1567_1(void) = EnterFunction : -# 1567| m1567_2(unknown) = AliasedDefinition : -# 1567| m1567_3(unknown) = InitializeNonLocal : -# 1567| m1567_4(unknown) = Chi : total:m1567_2, partial:m1567_3 -# 1567| r1567_5(glval) = VariableAddress[#this] : -# 1567| m1567_6(glval) = InitializeParameter[#this] : &:r1567_5 -# 1567| r1567_7(glval) = Load[#this] : &:r1567_5, m1567_6 -# 1567| m1567_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1567_7 -# 1568| r1568_1(glval) = VariableAddress[#return] : -# 1568| r1568_2(glval) = VariableAddress[#this] : -# 1568| r1568_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1568_2, m1567_6 -# 1568| r1568_4(glval) = FieldAddress[i] : r1568_3 -#-----| r0_1(int &) = CopyValue : r1568_4 -#-----| m0_2(int &) = Store[#return] : &:r1568_1, r0_1 -# 1567| v1567_9(void) = ReturnIndirection[#this] : &:r1567_7, m1567_8 -# 1567| r1567_10(glval) = VariableAddress[#return] : -# 1567| v1567_11(void) = ReturnValue : &:r1567_10, m0_2 -# 1567| v1567_12(void) = AliasedUse : m1567_3 -# 1567| v1567_13(void) = ExitFunction : +# 1569| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1569| Block 0 +# 1569| v1569_1(void) = EnterFunction : +# 1569| m1569_2(unknown) = AliasedDefinition : +# 1569| m1569_3(unknown) = InitializeNonLocal : +# 1569| m1569_4(unknown) = Chi : total:m1569_2, partial:m1569_3 +# 1569| r1569_5(glval) = VariableAddress[#this] : +# 1569| m1569_6(glval) = InitializeParameter[#this] : &:r1569_5 +# 1569| r1569_7(glval) = Load[#this] : &:r1569_5, m1569_6 +# 1569| m1569_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_7 +# 1570| r1570_1(glval) = VariableAddress[#return] : +# 1570| r1570_2(glval) = VariableAddress[#this] : +# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, m1569_6 +# 1570| r1570_4(glval) = FieldAddress[i] : r1570_3 +#-----| r0_1(int &) = CopyValue : r1570_4 +#-----| m0_2(int &) = Store[#return] : &:r1570_1, r0_1 +# 1569| v1569_9(void) = ReturnIndirection[#this] : &:r1569_7, m1569_8 +# 1569| r1569_10(glval) = VariableAddress[#return] : +# 1569| v1569_11(void) = ReturnValue : &:r1569_10, m0_2 +# 1569| v1569_12(void) = AliasedUse : m1569_3 +# 1569| v1569_13(void) = ExitFunction : -# 1571| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1571| Block 0 -# 1571| v1571_1(void) = EnterFunction : -# 1571| m1571_2(unknown) = AliasedDefinition : -# 1571| m1571_3(unknown) = InitializeNonLocal : -# 1571| m1571_4(unknown) = Chi : total:m1571_2, partial:m1571_3 -# 1571| r1571_5(glval) = VariableAddress[#this] : -# 1571| m1571_6(glval) = InitializeParameter[#this] : &:r1571_5 -# 1571| r1571_7(glval) = Load[#this] : &:r1571_5, m1571_6 -# 1571| m1571_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1571_7 -# 1572| r1572_1(glval) = VariableAddress[#return] : -# 1572| r1572_2(glval) = VariableAddress[#this] : -# 1572| r1572_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1572_2, m1571_6 -# 1572| r1572_4(glval) = FieldAddress[d] : r1572_3 -#-----| r0_1(double &) = CopyValue : r1572_4 -#-----| m0_2(double &) = Store[#return] : &:r1572_1, r0_1 -# 1571| v1571_9(void) = ReturnIndirection[#this] : &:r1571_7, m1571_8 -# 1571| r1571_10(glval) = VariableAddress[#return] : -# 1571| v1571_11(void) = ReturnValue : &:r1571_10, m0_2 -# 1571| v1571_12(void) = AliasedUse : m1571_3 -# 1571| v1571_13(void) = ExitFunction : +# 1573| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1573| Block 0 +# 1573| v1573_1(void) = EnterFunction : +# 1573| m1573_2(unknown) = AliasedDefinition : +# 1573| m1573_3(unknown) = InitializeNonLocal : +# 1573| m1573_4(unknown) = Chi : total:m1573_2, partial:m1573_3 +# 1573| r1573_5(glval) = VariableAddress[#this] : +# 1573| m1573_6(glval) = InitializeParameter[#this] : &:r1573_5 +# 1573| r1573_7(glval) = Load[#this] : &:r1573_5, m1573_6 +# 1573| m1573_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_7 +# 1574| r1574_1(glval) = VariableAddress[#return] : +# 1574| r1574_2(glval) = VariableAddress[#this] : +# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, m1573_6 +# 1574| r1574_4(glval) = FieldAddress[d] : r1574_3 +#-----| r0_1(double &) = CopyValue : r1574_4 +#-----| m0_2(double &) = Store[#return] : &:r1574_1, r0_1 +# 1573| v1573_9(void) = ReturnIndirection[#this] : &:r1573_7, m1573_8 +# 1573| r1573_10(glval) = VariableAddress[#return] : +# 1573| v1573_11(void) = ReturnValue : &:r1573_10, m0_2 +# 1573| v1573_12(void) = AliasedUse : m1573_3 +# 1573| v1573_13(void) = ExitFunction : -# 1575| std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1575| Block 0 -# 1575| v1575_1(void) = EnterFunction : -# 1575| m1575_2(unknown) = AliasedDefinition : -# 1575| m1575_3(unknown) = InitializeNonLocal : -# 1575| m1575_4(unknown) = Chi : total:m1575_2, partial:m1575_3 -# 1575| r1575_5(glval) = VariableAddress[#this] : -# 1575| m1575_6(glval) = InitializeParameter[#this] : &:r1575_5 -# 1575| r1575_7(glval) = Load[#this] : &:r1575_5, m1575_6 -# 1575| m1575_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1575_7 -# 1576| r1576_1(glval) = VariableAddress[#return] : -# 1576| r1576_2(glval) = VariableAddress[#this] : -# 1576| r1576_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1576_2, m1575_6 -# 1576| r1576_4(glval) = FieldAddress[r] : r1576_3 -# 1576| r1576_5(int &) = Load[?] : &:r1576_4, ~m1575_8 -# 1576| r1576_6(glval) = CopyValue : r1576_5 -# 1576| r1576_7(int &) = CopyValue : r1576_6 -# 1576| m1576_8(int &) = Store[#return] : &:r1576_1, r1576_7 -# 1575| v1575_9(void) = ReturnIndirection[#this] : &:r1575_7, m1575_8 -# 1575| r1575_10(glval) = VariableAddress[#return] : -# 1575| v1575_11(void) = ReturnValue : &:r1575_10, m1576_8 -# 1575| v1575_12(void) = AliasedUse : m1575_3 -# 1575| v1575_13(void) = ExitFunction : +# 1577| std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1577| Block 0 +# 1577| v1577_1(void) = EnterFunction : +# 1577| m1577_2(unknown) = AliasedDefinition : +# 1577| m1577_3(unknown) = InitializeNonLocal : +# 1577| m1577_4(unknown) = Chi : total:m1577_2, partial:m1577_3 +# 1577| r1577_5(glval) = VariableAddress[#this] : +# 1577| m1577_6(glval) = InitializeParameter[#this] : &:r1577_5 +# 1577| r1577_7(glval) = Load[#this] : &:r1577_5, m1577_6 +# 1577| m1577_8(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_7 +# 1578| r1578_1(glval) = VariableAddress[#return] : +# 1578| r1578_2(glval) = VariableAddress[#this] : +# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, m1577_6 +# 1578| r1578_4(glval) = FieldAddress[r] : r1578_3 +# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m1577_8 +# 1578| r1578_6(glval) = CopyValue : r1578_5 +# 1578| r1578_7(int &) = CopyValue : r1578_6 +# 1578| m1578_8(int &) = Store[#return] : &:r1578_1, r1578_7 +# 1577| v1577_9(void) = ReturnIndirection[#this] : &:r1577_7, m1577_8 +# 1577| r1577_10(glval) = VariableAddress[#return] : +# 1577| v1577_11(void) = ReturnValue : &:r1577_10, m1578_8 +# 1577| v1577_12(void) = AliasedUse : m1577_3 +# 1577| v1577_13(void) = ExitFunction : -# 1579| void tuple_structured_binding_ref_get() -# 1579| Block 0 -# 1579| v1579_1(void) = EnterFunction : -# 1579| m1579_2(unknown) = AliasedDefinition : -# 1579| m1579_3(unknown) = InitializeNonLocal : -# 1579| m1579_4(unknown) = Chi : total:m1579_2, partial:m1579_3 -# 1580| r1580_1(glval) = VariableAddress[t] : -# 1580| m1580_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1580_1 -# 1580| r1580_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : -# 1580| v1580_4(void) = Call[StructuredBindingTupleRefGet] : func:r1580_3, this:r1580_1 -# 1580| m1580_5(unknown) = ^CallSideEffect : ~m1579_4 -# 1580| m1580_6(unknown) = Chi : total:m1579_4, partial:m1580_5 -# 1580| m1580_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1580_1 -# 1580| m1580_8(StructuredBindingTupleRefGet) = Chi : total:m1580_2, partial:m1580_7 -# 1583| r1583_1(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_2(glval) = VariableAddress[t] : -# 1583| r1583_3(StructuredBindingTupleRefGet) = Load[t] : &:r1583_2, m1580_8 -# 1583| m1583_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1583_1, r1583_3 -# 1583| r1583_5(glval) = VariableAddress[i] : -# 1583| r1583_6(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_7(glval) = FunctionAddress[get] : -# 1583| r1583_8(int &) = Call[get] : func:r1583_7, this:r1583_6 -# 1583| m1583_9(unknown) = ^CallSideEffect : ~m1580_6 -# 1583| m1583_10(unknown) = Chi : total:m1580_6, partial:m1583_9 -# 1583| v1583_11(void) = ^IndirectReadSideEffect[-1] : &:r1583_6, m1583_4 -# 1583| m1583_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_6 -# 1583| m1583_13(StructuredBindingTupleRefGet) = Chi : total:m1583_4, partial:m1583_12 -# 1583| r1583_14(glval) = CopyValue : r1583_8 -# 1583| r1583_15(int &) = CopyValue : r1583_14 -# 1583| m1583_16(int &) = Store[i] : &:r1583_5, r1583_15 -# 1583| r1583_17(glval) = VariableAddress[d] : -# 1583| r1583_18(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_19(glval) = FunctionAddress[get] : -# 1583| r1583_20(double &) = Call[get] : func:r1583_19, this:r1583_18 -# 1583| m1583_21(unknown) = ^CallSideEffect : ~m1583_10 -# 1583| m1583_22(unknown) = Chi : total:m1583_10, partial:m1583_21 -# 1583| v1583_23(void) = ^IndirectReadSideEffect[-1] : &:r1583_18, m1583_13 -# 1583| m1583_24(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_18 -# 1583| m1583_25(StructuredBindingTupleRefGet) = Chi : total:m1583_13, partial:m1583_24 -# 1583| r1583_26(glval) = CopyValue : r1583_20 -# 1583| r1583_27(double &) = CopyValue : r1583_26 -# 1583| m1583_28(double &) = Store[d] : &:r1583_17, r1583_27 -# 1583| r1583_29(glval) = VariableAddress[r] : -# 1583| r1583_30(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_31(glval) = FunctionAddress[get] : -# 1583| r1583_32(int &) = Call[get] : func:r1583_31, this:r1583_30 -# 1583| m1583_33(unknown) = ^CallSideEffect : ~m1583_22 -# 1583| m1583_34(unknown) = Chi : total:m1583_22, partial:m1583_33 -# 1583| v1583_35(void) = ^IndirectReadSideEffect[-1] : &:r1583_30, m1583_25 -# 1583| m1583_36(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_30 -# 1583| m1583_37(StructuredBindingTupleRefGet) = Chi : total:m1583_25, partial:m1583_36 -# 1583| r1583_38(glval) = CopyValue : r1583_32 -# 1583| r1583_39(int &) = CopyValue : r1583_38 -# 1583| m1583_40(int &) = Store[r] : &:r1583_29, r1583_39 -# 1584| r1584_1(double) = Constant[4.0] : -# 1584| r1584_2(glval) = VariableAddress[d] : -# 1584| r1584_3(double &) = Load[d] : &:r1584_2, m1583_28 -# 1584| r1584_4(glval) = CopyValue : r1584_3 -# 1584| m1584_5(double) = Store[?] : &:r1584_4, r1584_1 -# 1584| m1584_6(StructuredBindingTupleRefGet) = Chi : total:m1583_37, partial:m1584_5 -# 1585| r1585_1(glval) = VariableAddress[rd] : -# 1585| r1585_2(glval) = VariableAddress[d] : -# 1585| r1585_3(double &) = Load[d] : &:r1585_2, m1583_28 -# 1585| r1585_4(glval) = CopyValue : r1585_3 -# 1585| r1585_5(double &) = CopyValue : r1585_4 -# 1585| m1585_6(double &) = Store[rd] : &:r1585_1, r1585_5 -# 1586| r1586_1(glval) = VariableAddress[v] : -# 1586| r1586_2(glval) = VariableAddress[i] : -# 1586| r1586_3(int &) = Load[i] : &:r1586_2, m1583_16 -# 1586| r1586_4(int) = Load[?] : &:r1586_3, ~m1583_37 -# 1586| m1586_5(int) = Store[v] : &:r1586_1, r1586_4 -# 1587| r1587_1(int) = Constant[5] : -# 1587| r1587_2(glval) = VariableAddress[r] : -# 1587| r1587_3(int &) = Load[r] : &:r1587_2, m1583_40 -# 1587| r1587_4(glval) = CopyValue : r1587_3 -# 1587| m1587_5(int) = Store[?] : &:r1587_4, r1587_1 -# 1587| m1587_6(unknown) = Chi : total:m1583_34, partial:m1587_5 -# 1588| r1588_1(glval) = VariableAddress[rr] : -# 1588| r1588_2(glval) = VariableAddress[r] : -# 1588| r1588_3(int &) = Load[r] : &:r1588_2, m1583_40 -# 1588| r1588_4(glval) = CopyValue : r1588_3 -# 1588| r1588_5(int &) = CopyValue : r1588_4 -# 1588| m1588_6(int &) = Store[rr] : &:r1588_1, r1588_5 -# 1589| r1589_1(glval) = VariableAddress[w] : +# 1581| void tuple_structured_binding_ref_get() +# 1581| Block 0 +# 1581| v1581_1(void) = EnterFunction : +# 1581| m1581_2(unknown) = AliasedDefinition : +# 1581| m1581_3(unknown) = InitializeNonLocal : +# 1581| m1581_4(unknown) = Chi : total:m1581_2, partial:m1581_3 +# 1582| r1582_1(glval) = VariableAddress[t] : +# 1582| m1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 +# 1582| r1582_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : +# 1582| v1582_4(void) = Call[StructuredBindingTupleRefGet] : func:r1582_3, this:r1582_1 +# 1582| m1582_5(unknown) = ^CallSideEffect : ~m1581_4 +# 1582| m1582_6(unknown) = Chi : total:m1581_4, partial:m1582_5 +# 1582| m1582_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 +# 1582| m1582_8(StructuredBindingTupleRefGet) = Chi : total:m1582_2, partial:m1582_7 +# 1585| r1585_1(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_2(glval) = VariableAddress[t] : +# 1585| r1585_3(StructuredBindingTupleRefGet) = Load[t] : &:r1585_2, m1582_8 +# 1585| m1585_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1585_1, r1585_3 +# 1585| r1585_5(glval) = VariableAddress[i] : +# 1585| r1585_6(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_7(glval) = FunctionAddress[get] : +# 1585| r1585_8(int &) = Call[get] : func:r1585_7, this:r1585_6 +# 1585| m1585_9(unknown) = ^CallSideEffect : ~m1582_6 +# 1585| m1585_10(unknown) = Chi : total:m1582_6, partial:m1585_9 +# 1585| v1585_11(void) = ^IndirectReadSideEffect[-1] : &:r1585_6, m1585_4 +# 1585| m1585_12(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_6 +# 1585| m1585_13(StructuredBindingTupleRefGet) = Chi : total:m1585_4, partial:m1585_12 +# 1585| r1585_14(glval) = CopyValue : r1585_8 +# 1585| r1585_15(int &) = CopyValue : r1585_14 +# 1585| m1585_16(int &) = Store[i] : &:r1585_5, r1585_15 +# 1585| r1585_17(glval) = VariableAddress[d] : +# 1585| r1585_18(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_19(glval) = FunctionAddress[get] : +# 1585| r1585_20(double &) = Call[get] : func:r1585_19, this:r1585_18 +# 1585| m1585_21(unknown) = ^CallSideEffect : ~m1585_10 +# 1585| m1585_22(unknown) = Chi : total:m1585_10, partial:m1585_21 +# 1585| v1585_23(void) = ^IndirectReadSideEffect[-1] : &:r1585_18, m1585_13 +# 1585| m1585_24(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_18 +# 1585| m1585_25(StructuredBindingTupleRefGet) = Chi : total:m1585_13, partial:m1585_24 +# 1585| r1585_26(glval) = CopyValue : r1585_20 +# 1585| r1585_27(double &) = CopyValue : r1585_26 +# 1585| m1585_28(double &) = Store[d] : &:r1585_17, r1585_27 +# 1585| r1585_29(glval) = VariableAddress[r] : +# 1585| r1585_30(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_31(glval) = FunctionAddress[get] : +# 1585| r1585_32(int &) = Call[get] : func:r1585_31, this:r1585_30 +# 1585| m1585_33(unknown) = ^CallSideEffect : ~m1585_22 +# 1585| m1585_34(unknown) = Chi : total:m1585_22, partial:m1585_33 +# 1585| v1585_35(void) = ^IndirectReadSideEffect[-1] : &:r1585_30, m1585_25 +# 1585| m1585_36(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_30 +# 1585| m1585_37(StructuredBindingTupleRefGet) = Chi : total:m1585_25, partial:m1585_36 +# 1585| r1585_38(glval) = CopyValue : r1585_32 +# 1585| r1585_39(int &) = CopyValue : r1585_38 +# 1585| m1585_40(int &) = Store[r] : &:r1585_29, r1585_39 +# 1586| r1586_1(double) = Constant[4.0] : +# 1586| r1586_2(glval) = VariableAddress[d] : +# 1586| r1586_3(double &) = Load[d] : &:r1586_2, m1585_28 +# 1586| r1586_4(glval) = CopyValue : r1586_3 +# 1586| m1586_5(double) = Store[?] : &:r1586_4, r1586_1 +# 1586| m1586_6(StructuredBindingTupleRefGet) = Chi : total:m1585_37, partial:m1586_5 +# 1587| r1587_1(glval) = VariableAddress[rd] : +# 1587| r1587_2(glval) = VariableAddress[d] : +# 1587| r1587_3(double &) = Load[d] : &:r1587_2, m1585_28 +# 1587| r1587_4(glval) = CopyValue : r1587_3 +# 1587| r1587_5(double &) = CopyValue : r1587_4 +# 1587| m1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 +# 1588| r1588_1(glval) = VariableAddress[v] : +# 1588| r1588_2(glval) = VariableAddress[i] : +# 1588| r1588_3(int &) = Load[i] : &:r1588_2, m1585_16 +# 1588| r1588_4(int) = Load[?] : &:r1588_3, ~m1585_37 +# 1588| m1588_5(int) = Store[v] : &:r1588_1, r1588_4 +# 1589| r1589_1(int) = Constant[5] : # 1589| r1589_2(glval) = VariableAddress[r] : -# 1589| r1589_3(int &) = Load[r] : &:r1589_2, m1583_40 -# 1589| r1589_4(int) = Load[?] : &:r1589_3, ~m1587_6 -# 1589| m1589_5(int) = Store[w] : &:r1589_1, r1589_4 -# 1593| r1593_1(glval) = VariableAddress[unnamed_local_variable] : -# 1593| r1593_2(glval) = VariableAddress[t] : -# 1593| r1593_3(StructuredBindingTupleRefGet) = Load[t] : &:r1593_2, m1580_8 -# 1593| m1593_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1593_1, r1593_3 -# 1594| r1594_1(glval) = VariableAddress[i] : -# 1594| r1594_2(glval) = VariableAddress[unnamed_local_variable] : -# 1594| r1594_3(glval) = FunctionAddress[get] : -# 1594| r1594_4(int &) = Call[get] : func:r1594_3, this:r1594_2 -# 1594| m1594_5(unknown) = ^CallSideEffect : ~m1587_6 -# 1594| m1594_6(unknown) = Chi : total:m1587_6, partial:m1594_5 -# 1594| v1594_7(void) = ^IndirectReadSideEffect[-1] : &:r1594_2, m1593_4 -# 1594| m1594_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1594_2 -# 1594| m1594_9(StructuredBindingTupleRefGet) = Chi : total:m1593_4, partial:m1594_8 -# 1594| r1594_10(glval) = CopyValue : r1594_4 -# 1594| r1594_11(int &) = CopyValue : r1594_10 -# 1594| m1594_12(int &) = Store[i] : &:r1594_1, r1594_11 -# 1595| r1595_1(glval) = VariableAddress[d] : -# 1595| r1595_2(glval) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_3(glval) = FunctionAddress[get] : -# 1595| r1595_4(double &) = Call[get] : func:r1595_3, this:r1595_2 -# 1595| m1595_5(unknown) = ^CallSideEffect : ~m1594_6 -# 1595| m1595_6(unknown) = Chi : total:m1594_6, partial:m1595_5 -# 1595| v1595_7(void) = ^IndirectReadSideEffect[-1] : &:r1595_2, m1594_9 -# 1595| m1595_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1595_2 -# 1595| m1595_9(StructuredBindingTupleRefGet) = Chi : total:m1594_9, partial:m1595_8 -# 1595| r1595_10(glval) = CopyValue : r1595_4 -# 1595| r1595_11(double &) = CopyValue : r1595_10 -# 1595| m1595_12(double &) = Store[d] : &:r1595_1, r1595_11 -# 1596| r1596_1(glval) = VariableAddress[r] : +# 1589| r1589_3(int &) = Load[r] : &:r1589_2, m1585_40 +# 1589| r1589_4(glval) = CopyValue : r1589_3 +# 1589| m1589_5(int) = Store[?] : &:r1589_4, r1589_1 +# 1589| m1589_6(unknown) = Chi : total:m1585_34, partial:m1589_5 +# 1590| r1590_1(glval) = VariableAddress[rr] : +# 1590| r1590_2(glval) = VariableAddress[r] : +# 1590| r1590_3(int &) = Load[r] : &:r1590_2, m1585_40 +# 1590| r1590_4(glval) = CopyValue : r1590_3 +# 1590| r1590_5(int &) = CopyValue : r1590_4 +# 1590| m1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 +# 1591| r1591_1(glval) = VariableAddress[w] : +# 1591| r1591_2(glval) = VariableAddress[r] : +# 1591| r1591_3(int &) = Load[r] : &:r1591_2, m1585_40 +# 1591| r1591_4(int) = Load[?] : &:r1591_3, ~m1589_6 +# 1591| m1591_5(int) = Store[w] : &:r1591_1, r1591_4 +# 1595| r1595_1(glval) = VariableAddress[unnamed_local_variable] : +# 1595| r1595_2(glval) = VariableAddress[t] : +# 1595| r1595_3(StructuredBindingTupleRefGet) = Load[t] : &:r1595_2, m1582_8 +# 1595| m1595_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1595_1, r1595_3 +# 1596| r1596_1(glval) = VariableAddress[i] : # 1596| r1596_2(glval) = VariableAddress[unnamed_local_variable] : # 1596| r1596_3(glval) = FunctionAddress[get] : # 1596| r1596_4(int &) = Call[get] : func:r1596_3, this:r1596_2 -# 1596| m1596_5(unknown) = ^CallSideEffect : ~m1595_6 -# 1596| m1596_6(unknown) = Chi : total:m1595_6, partial:m1596_5 -# 1596| v1596_7(void) = ^IndirectReadSideEffect[-1] : &:r1596_2, m1595_9 +# 1596| m1596_5(unknown) = ^CallSideEffect : ~m1589_6 +# 1596| m1596_6(unknown) = Chi : total:m1589_6, partial:m1596_5 +# 1596| v1596_7(void) = ^IndirectReadSideEffect[-1] : &:r1596_2, m1595_4 # 1596| m1596_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1596_2 -# 1596| m1596_9(StructuredBindingTupleRefGet) = Chi : total:m1595_9, partial:m1596_8 +# 1596| m1596_9(StructuredBindingTupleRefGet) = Chi : total:m1595_4, partial:m1596_8 # 1596| r1596_10(glval) = CopyValue : r1596_4 # 1596| r1596_11(int &) = CopyValue : r1596_10 -# 1596| m1596_12(int &) = Store[r] : &:r1596_1, r1596_11 -# 1597| r1597_1(double) = Constant[4.0] : -# 1597| r1597_2(glval) = VariableAddress[d] : -# 1597| r1597_3(double &) = Load[d] : &:r1597_2, m1595_12 -# 1597| r1597_4(glval) = CopyValue : r1597_3 -# 1597| m1597_5(double) = Store[?] : &:r1597_4, r1597_1 -# 1597| m1597_6(StructuredBindingTupleRefGet) = Chi : total:m1596_9, partial:m1597_5 -# 1598| r1598_1(glval) = VariableAddress[rd] : -# 1598| r1598_2(glval) = VariableAddress[d] : -# 1598| r1598_3(double &) = Load[d] : &:r1598_2, m1595_12 -# 1598| r1598_4(glval) = CopyValue : r1598_3 -# 1598| r1598_5(double &) = CopyValue : r1598_4 -# 1598| m1598_6(double &) = Store[rd] : &:r1598_1, r1598_5 -# 1599| r1599_1(glval) = VariableAddress[v] : -# 1599| r1599_2(glval) = VariableAddress[i] : -# 1599| r1599_3(int &) = Load[i] : &:r1599_2, m1594_12 -# 1599| r1599_4(int) = Load[?] : &:r1599_3, ~m1596_9 -# 1599| m1599_5(int) = Store[v] : &:r1599_1, r1599_4 -# 1600| r1600_1(int) = Constant[5] : -# 1600| r1600_2(glval) = VariableAddress[r] : -# 1600| r1600_3(int &) = Load[r] : &:r1600_2, m1596_12 -# 1600| r1600_4(glval) = CopyValue : r1600_3 -# 1600| m1600_5(int) = Store[?] : &:r1600_4, r1600_1 -# 1600| m1600_6(unknown) = Chi : total:m1596_6, partial:m1600_5 -# 1601| r1601_1(glval) = VariableAddress[rr] : -# 1601| r1601_2(glval) = VariableAddress[r] : -# 1601| r1601_3(int &) = Load[r] : &:r1601_2, m1596_12 -# 1601| r1601_4(glval) = CopyValue : r1601_3 -# 1601| r1601_5(int &) = CopyValue : r1601_4 -# 1601| m1601_6(int &) = Store[rr] : &:r1601_1, r1601_5 -# 1602| r1602_1(glval) = VariableAddress[w] : +# 1596| m1596_12(int &) = Store[i] : &:r1596_1, r1596_11 +# 1597| r1597_1(glval) = VariableAddress[d] : +# 1597| r1597_2(glval) = VariableAddress[unnamed_local_variable] : +# 1597| r1597_3(glval) = FunctionAddress[get] : +# 1597| r1597_4(double &) = Call[get] : func:r1597_3, this:r1597_2 +# 1597| m1597_5(unknown) = ^CallSideEffect : ~m1596_6 +# 1597| m1597_6(unknown) = Chi : total:m1596_6, partial:m1597_5 +# 1597| v1597_7(void) = ^IndirectReadSideEffect[-1] : &:r1597_2, m1596_9 +# 1597| m1597_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1597_2 +# 1597| m1597_9(StructuredBindingTupleRefGet) = Chi : total:m1596_9, partial:m1597_8 +# 1597| r1597_10(glval) = CopyValue : r1597_4 +# 1597| r1597_11(double &) = CopyValue : r1597_10 +# 1597| m1597_12(double &) = Store[d] : &:r1597_1, r1597_11 +# 1598| r1598_1(glval) = VariableAddress[r] : +# 1598| r1598_2(glval) = VariableAddress[unnamed_local_variable] : +# 1598| r1598_3(glval) = FunctionAddress[get] : +# 1598| r1598_4(int &) = Call[get] : func:r1598_3, this:r1598_2 +# 1598| m1598_5(unknown) = ^CallSideEffect : ~m1597_6 +# 1598| m1598_6(unknown) = Chi : total:m1597_6, partial:m1598_5 +# 1598| v1598_7(void) = ^IndirectReadSideEffect[-1] : &:r1598_2, m1597_9 +# 1598| m1598_8(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1598_2 +# 1598| m1598_9(StructuredBindingTupleRefGet) = Chi : total:m1597_9, partial:m1598_8 +# 1598| r1598_10(glval) = CopyValue : r1598_4 +# 1598| r1598_11(int &) = CopyValue : r1598_10 +# 1598| m1598_12(int &) = Store[r] : &:r1598_1, r1598_11 +# 1599| r1599_1(double) = Constant[4.0] : +# 1599| r1599_2(glval) = VariableAddress[d] : +# 1599| r1599_3(double &) = Load[d] : &:r1599_2, m1597_12 +# 1599| r1599_4(glval) = CopyValue : r1599_3 +# 1599| m1599_5(double) = Store[?] : &:r1599_4, r1599_1 +# 1599| m1599_6(StructuredBindingTupleRefGet) = Chi : total:m1598_9, partial:m1599_5 +# 1600| r1600_1(glval) = VariableAddress[rd] : +# 1600| r1600_2(glval) = VariableAddress[d] : +# 1600| r1600_3(double &) = Load[d] : &:r1600_2, m1597_12 +# 1600| r1600_4(glval) = CopyValue : r1600_3 +# 1600| r1600_5(double &) = CopyValue : r1600_4 +# 1600| m1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 +# 1601| r1601_1(glval) = VariableAddress[v] : +# 1601| r1601_2(glval) = VariableAddress[i] : +# 1601| r1601_3(int &) = Load[i] : &:r1601_2, m1596_12 +# 1601| r1601_4(int) = Load[?] : &:r1601_3, ~m1598_9 +# 1601| m1601_5(int) = Store[v] : &:r1601_1, r1601_4 +# 1602| r1602_1(int) = Constant[5] : # 1602| r1602_2(glval) = VariableAddress[r] : -# 1602| r1602_3(int &) = Load[r] : &:r1602_2, m1596_12 -# 1602| r1602_4(int) = Load[?] : &:r1602_3, ~m1600_6 -# 1602| m1602_5(int) = Store[w] : &:r1602_1, r1602_4 -# 1604| v1604_1(void) = NoOp : -# 1579| v1579_5(void) = ReturnVoid : -# 1579| v1579_6(void) = AliasedUse : ~m1600_6 -# 1579| v1579_7(void) = ExitFunction : +# 1602| r1602_3(int &) = Load[r] : &:r1602_2, m1598_12 +# 1602| r1602_4(glval) = CopyValue : r1602_3 +# 1602| m1602_5(int) = Store[?] : &:r1602_4, r1602_1 +# 1602| m1602_6(unknown) = Chi : total:m1598_6, partial:m1602_5 +# 1603| r1603_1(glval) = VariableAddress[rr] : +# 1603| r1603_2(glval) = VariableAddress[r] : +# 1603| r1603_3(int &) = Load[r] : &:r1603_2, m1598_12 +# 1603| r1603_4(glval) = CopyValue : r1603_3 +# 1603| r1603_5(int &) = CopyValue : r1603_4 +# 1603| m1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 +# 1604| r1604_1(glval) = VariableAddress[w] : +# 1604| r1604_2(glval) = VariableAddress[r] : +# 1604| r1604_3(int &) = Load[r] : &:r1604_2, m1598_12 +# 1604| r1604_4(int) = Load[?] : &:r1604_3, ~m1602_6 +# 1604| m1604_5(int) = Store[w] : &:r1604_1, r1604_4 +# 1606| v1606_1(void) = NoOp : +# 1581| v1581_5(void) = ReturnVoid : +# 1581| v1581_6(void) = AliasedUse : ~m1602_6 +# 1581| v1581_7(void) = ExitFunction : -# 1606| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1606| Block 0 -# 1606| v1606_1(void) = EnterFunction : -# 1606| m1606_2(unknown) = AliasedDefinition : -# 1606| m1606_3(unknown) = InitializeNonLocal : -# 1606| m1606_4(unknown) = Chi : total:m1606_2, partial:m1606_3 -# 1606| r1606_5(glval) = VariableAddress[#this] : -# 1606| m1606_6(glval) = InitializeParameter[#this] : &:r1606_5 -# 1606| r1606_7(glval) = Load[#this] : &:r1606_5, m1606_6 -# 1606| m1606_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1606_7 -# 1606| v1606_9(void) = NoOp : -# 1606| v1606_10(void) = ReturnIndirection[#this] : &:r1606_7, m1606_8 -# 1606| v1606_11(void) = ReturnVoid : -# 1606| v1606_12(void) = AliasedUse : m1606_3 -# 1606| v1606_13(void) = ExitFunction : +# 1608| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1608| Block 0 +# 1608| v1608_1(void) = EnterFunction : +# 1608| m1608_2(unknown) = AliasedDefinition : +# 1608| m1608_3(unknown) = InitializeNonLocal : +# 1608| m1608_4(unknown) = Chi : total:m1608_2, partial:m1608_3 +# 1608| r1608_5(glval) = VariableAddress[#this] : +# 1608| m1608_6(glval) = InitializeParameter[#this] : &:r1608_5 +# 1608| r1608_7(glval) = Load[#this] : &:r1608_5, m1608_6 +# 1608| m1608_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1608_7 +# 1608| v1608_9(void) = NoOp : +# 1608| v1608_10(void) = ReturnIndirection[#this] : &:r1608_7, m1608_8 +# 1608| v1608_11(void) = ReturnVoid : +# 1608| v1608_12(void) = AliasedUse : m1608_3 +# 1608| v1608_13(void) = ExitFunction : -# 1633| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1633| Block 0 -# 1633| v1633_1(void) = EnterFunction : -# 1633| m1633_2(unknown) = AliasedDefinition : -# 1633| m1633_3(unknown) = InitializeNonLocal : -# 1633| m1633_4(unknown) = Chi : total:m1633_2, partial:m1633_3 -# 1633| r1633_5(glval) = VariableAddress[#this] : -# 1633| m1633_6(glval) = InitializeParameter[#this] : &:r1633_5 -# 1633| r1633_7(glval) = Load[#this] : &:r1633_5, m1633_6 -# 1633| m1633_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1633_7 -# 1634| r1634_1(glval) = VariableAddress[#return] : -# 1634| r1634_2(glval) = VariableAddress[#this] : -# 1634| r1634_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1634_2, m1633_6 -# 1634| r1634_4(glval) = FieldAddress[i] : r1634_3 -# 1634| r1634_5(int) = Load[?] : &:r1634_4, ~m1633_8 -# 1634| m1634_6(int) = Store[#return] : &:r1634_1, r1634_5 -# 1633| v1633_9(void) = ReturnIndirection[#this] : &:r1633_7, m1633_8 -# 1633| r1633_10(glval) = VariableAddress[#return] : -# 1633| v1633_11(void) = ReturnValue : &:r1633_10, m1634_6 -# 1633| v1633_12(void) = AliasedUse : m1633_3 -# 1633| v1633_13(void) = ExitFunction : +# 1635| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1635| Block 0 +# 1635| v1635_1(void) = EnterFunction : +# 1635| m1635_2(unknown) = AliasedDefinition : +# 1635| m1635_3(unknown) = InitializeNonLocal : +# 1635| m1635_4(unknown) = Chi : total:m1635_2, partial:m1635_3 +# 1635| r1635_5(glval) = VariableAddress[#this] : +# 1635| m1635_6(glval) = InitializeParameter[#this] : &:r1635_5 +# 1635| r1635_7(glval) = Load[#this] : &:r1635_5, m1635_6 +# 1635| m1635_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_7 +# 1636| r1636_1(glval) = VariableAddress[#return] : +# 1636| r1636_2(glval) = VariableAddress[#this] : +# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, m1635_6 +# 1636| r1636_4(glval) = FieldAddress[i] : r1636_3 +# 1636| r1636_5(int) = Load[?] : &:r1636_4, ~m1635_8 +# 1636| m1636_6(int) = Store[#return] : &:r1636_1, r1636_5 +# 1635| v1635_9(void) = ReturnIndirection[#this] : &:r1635_7, m1635_8 +# 1635| r1635_10(glval) = VariableAddress[#return] : +# 1635| v1635_11(void) = ReturnValue : &:r1635_10, m1636_6 +# 1635| v1635_12(void) = AliasedUse : m1635_3 +# 1635| v1635_13(void) = ExitFunction : -# 1637| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1637| Block 0 -# 1637| v1637_1(void) = EnterFunction : -# 1637| m1637_2(unknown) = AliasedDefinition : -# 1637| m1637_3(unknown) = InitializeNonLocal : -# 1637| m1637_4(unknown) = Chi : total:m1637_2, partial:m1637_3 -# 1637| r1637_5(glval) = VariableAddress[#this] : -# 1637| m1637_6(glval) = InitializeParameter[#this] : &:r1637_5 -# 1637| r1637_7(glval) = Load[#this] : &:r1637_5, m1637_6 -# 1637| m1637_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1637_7 -# 1638| r1638_1(glval) = VariableAddress[#return] : -# 1638| r1638_2(glval) = VariableAddress[#this] : -# 1638| r1638_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1638_2, m1637_6 -# 1638| r1638_4(glval) = FieldAddress[r] : r1638_3 -# 1638| r1638_5(int &) = Load[?] : &:r1638_4, ~m1637_8 -# 1638| r1638_6(glval) = CopyValue : r1638_5 -# 1638| r1638_7(int &) = CopyValue : r1638_6 -# 1638| m1638_8(int &) = Store[#return] : &:r1638_1, r1638_7 -# 1637| v1637_9(void) = ReturnIndirection[#this] : &:r1637_7, m1637_8 -# 1637| r1637_10(glval) = VariableAddress[#return] : -# 1637| v1637_11(void) = ReturnValue : &:r1637_10, m1638_8 -# 1637| v1637_12(void) = AliasedUse : m1637_3 -# 1637| v1637_13(void) = ExitFunction : +# 1639| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1639| Block 0 +# 1639| v1639_1(void) = EnterFunction : +# 1639| m1639_2(unknown) = AliasedDefinition : +# 1639| m1639_3(unknown) = InitializeNonLocal : +# 1639| m1639_4(unknown) = Chi : total:m1639_2, partial:m1639_3 +# 1639| r1639_5(glval) = VariableAddress[#this] : +# 1639| m1639_6(glval) = InitializeParameter[#this] : &:r1639_5 +# 1639| r1639_7(glval) = Load[#this] : &:r1639_5, m1639_6 +# 1639| m1639_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_7 +# 1640| r1640_1(glval) = VariableAddress[#return] : +# 1640| r1640_2(glval) = VariableAddress[#this] : +# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, m1639_6 +# 1640| r1640_4(glval) = FieldAddress[r] : r1640_3 +# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m1639_8 +# 1640| r1640_6(glval) = CopyValue : r1640_5 +# 1640| r1640_7(int &) = CopyValue : r1640_6 +# 1640| m1640_8(int &) = Store[#return] : &:r1640_1, r1640_7 +# 1639| v1639_9(void) = ReturnIndirection[#this] : &:r1639_7, m1639_8 +# 1639| r1639_10(glval) = VariableAddress[#return] : +# 1639| v1639_11(void) = ReturnValue : &:r1639_10, m1640_8 +# 1639| v1639_12(void) = AliasedUse : m1639_3 +# 1639| v1639_13(void) = ExitFunction : -# 1641| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1641| Block 0 -# 1641| v1641_1(void) = EnterFunction : -# 1641| m1641_2(unknown) = AliasedDefinition : -# 1641| m1641_3(unknown) = InitializeNonLocal : -# 1641| m1641_4(unknown) = Chi : total:m1641_2, partial:m1641_3 -# 1641| r1641_5(glval) = VariableAddress[#this] : -# 1641| m1641_6(glval) = InitializeParameter[#this] : &:r1641_5 -# 1641| r1641_7(glval) = Load[#this] : &:r1641_5, m1641_6 -# 1641| m1641_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1641_7 -# 1642| r1642_1(glval) = VariableAddress[#return] : -# 1642| r1642_2(glval) = VariableAddress[#temp1642:12] : -# 1642| r1642_3(int) = Constant[5] : -# 1642| m1642_4(int) = Store[#temp1642:12] : &:r1642_2, r1642_3 -# 1642| r1642_5(int &) = CopyValue : r1642_2 -# 1642| m1642_6(int &&) = Store[#return] : &:r1642_1, r1642_5 -# 1641| v1641_9(void) = ReturnIndirection[#this] : &:r1641_7, m1641_8 -# 1641| r1641_10(glval) = VariableAddress[#return] : -# 1641| v1641_11(void) = ReturnValue : &:r1641_10, m1642_6 -# 1641| v1641_12(void) = AliasedUse : m1641_3 -# 1641| v1641_13(void) = ExitFunction : +# 1643| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1643| Block 0 +# 1643| v1643_1(void) = EnterFunction : +# 1643| m1643_2(unknown) = AliasedDefinition : +# 1643| m1643_3(unknown) = InitializeNonLocal : +# 1643| m1643_4(unknown) = Chi : total:m1643_2, partial:m1643_3 +# 1643| r1643_5(glval) = VariableAddress[#this] : +# 1643| m1643_6(glval) = InitializeParameter[#this] : &:r1643_5 +# 1643| r1643_7(glval) = Load[#this] : &:r1643_5, m1643_6 +# 1643| m1643_8(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_7 +# 1644| r1644_1(glval) = VariableAddress[#return] : +# 1644| r1644_2(glval) = VariableAddress[#temp1644:12] : +# 1644| r1644_3(int) = Constant[5] : +# 1644| m1644_4(int) = Store[#temp1644:12] : &:r1644_2, r1644_3 +# 1644| r1644_5(int &) = CopyValue : r1644_2 +# 1644| m1644_6(int &&) = Store[#return] : &:r1644_1, r1644_5 +# 1643| v1643_9(void) = ReturnIndirection[#this] : &:r1643_7, m1643_8 +# 1643| r1643_10(glval) = VariableAddress[#return] : +# 1643| v1643_11(void) = ReturnValue : &:r1643_10, m1644_6 +# 1643| v1643_12(void) = AliasedUse : m1643_3 +# 1643| v1643_13(void) = ExitFunction : -# 1645| void tuple_structured_binding_no_ref_get() -# 1645| Block 0 -# 1645| v1645_1(void) = EnterFunction : -# 1645| m1645_2(unknown) = AliasedDefinition : -# 1645| m1645_3(unknown) = InitializeNonLocal : -# 1645| m1645_4(unknown) = Chi : total:m1645_2, partial:m1645_3 -# 1646| r1646_1(glval) = VariableAddress[t] : -# 1646| m1646_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1646_1 -# 1646| r1646_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : -# 1646| v1646_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1646_3, this:r1646_1 -# 1646| m1646_5(unknown) = ^CallSideEffect : ~m1645_4 -# 1646| m1646_6(unknown) = Chi : total:m1645_4, partial:m1646_5 -# 1646| m1646_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1646_1 -# 1646| m1646_8(StructuredBindingTupleNoRefGet) = Chi : total:m1646_2, partial:m1646_7 -# 1649| r1649_1(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_2(glval) = VariableAddress[t] : -# 1649| r1649_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1649_2 -# 1649| m1649_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1649_1, r1649_3 -# 1649| r1649_5(glval) = VariableAddress[i] : -# 1649| r1649_6(glval) = VariableAddress[#temp1649:16] : -# 1649| r1649_7(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_7, m1649_4 -# 1649| r1649_9(glval) = CopyValue : r1649_8 -# 1649| r1649_10(glval) = FunctionAddress[get] : -# 1649| r1649_11(int) = Call[get] : func:r1649_10, this:r1649_9 -# 1649| m1649_12(unknown) = ^CallSideEffect : ~m1646_6 -# 1649| m1649_13(unknown) = Chi : total:m1646_6, partial:m1649_12 -# 1649| v1649_14(void) = ^IndirectReadSideEffect[-1] : &:r1649_9, m1646_8 -# 1649| m1649_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_9 -# 1649| m1649_16(StructuredBindingTupleNoRefGet) = Chi : total:m1646_8, partial:m1649_15 -# 1649| m1649_17(int) = Store[#temp1649:16] : &:r1649_6, r1649_11 -# 1649| r1649_18(int &) = CopyValue : r1649_6 -# 1649| m1649_19(int &&) = Store[i] : &:r1649_5, r1649_18 -# 1649| r1649_20(glval) = VariableAddress[r] : -# 1649| r1649_21(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_21, m1649_4 -# 1649| r1649_23(glval) = CopyValue : r1649_22 -# 1649| r1649_24(glval) = FunctionAddress[get] : -# 1649| r1649_25(int &) = Call[get] : func:r1649_24, this:r1649_23 -# 1649| m1649_26(unknown) = ^CallSideEffect : ~m1649_13 -# 1649| m1649_27(unknown) = Chi : total:m1649_13, partial:m1649_26 -# 1649| v1649_28(void) = ^IndirectReadSideEffect[-1] : &:r1649_23, m1649_16 -# 1649| m1649_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_23 -# 1649| m1649_30(StructuredBindingTupleNoRefGet) = Chi : total:m1649_16, partial:m1649_29 -# 1649| r1649_31(glval) = CopyValue : r1649_25 -# 1649| r1649_32(int &) = CopyValue : r1649_31 -# 1649| m1649_33(int &) = Store[r] : &:r1649_20, r1649_32 -# 1649| r1649_34(glval) = VariableAddress[rv] : -# 1649| r1649_35(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_35, m1649_4 -# 1649| r1649_37(glval) = CopyValue : r1649_36 -# 1649| r1649_38(glval) = FunctionAddress[get] : -# 1649| r1649_39(int &&) = Call[get] : func:r1649_38, this:r1649_37 -# 1649| m1649_40(unknown) = ^CallSideEffect : ~m1649_27 -# 1649| m1649_41(unknown) = Chi : total:m1649_27, partial:m1649_40 -# 1649| v1649_42(void) = ^IndirectReadSideEffect[-1] : &:r1649_37, m1649_30 -# 1649| m1649_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_37 -# 1649| m1649_44(StructuredBindingTupleNoRefGet) = Chi : total:m1649_30, partial:m1649_43 -# 1649| r1649_45(glval) = CopyValue : r1649_39 -# 1649| r1649_46(int &) = CopyValue : r1649_45 -# 1649| m1649_47(int &&) = Store[rv] : &:r1649_34, r1649_46 -# 1650| r1650_1(int) = Constant[4] : -# 1650| r1650_2(glval) = VariableAddress[i] : -# 1650| r1650_3(int &&) = Load[i] : &:r1650_2, m1649_19 -# 1650| r1650_4(glval) = CopyValue : r1650_3 -# 1650| m1650_5(int) = Store[?] : &:r1650_4, r1650_1 -# 1651| r1651_1(glval) = VariableAddress[ri] : -# 1651| r1651_2(glval) = VariableAddress[i] : -# 1651| r1651_3(int &&) = Load[i] : &:r1651_2, m1649_19 -# 1651| r1651_4(glval) = CopyValue : r1651_3 -# 1651| r1651_5(int &) = CopyValue : r1651_4 -# 1651| m1651_6(int &) = Store[ri] : &:r1651_1, r1651_5 -# 1652| r1652_1(glval) = VariableAddress[v] : +# 1647| void tuple_structured_binding_no_ref_get() +# 1647| Block 0 +# 1647| v1647_1(void) = EnterFunction : +# 1647| m1647_2(unknown) = AliasedDefinition : +# 1647| m1647_3(unknown) = InitializeNonLocal : +# 1647| m1647_4(unknown) = Chi : total:m1647_2, partial:m1647_3 +# 1648| r1648_1(glval) = VariableAddress[t] : +# 1648| m1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 +# 1648| r1648_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : +# 1648| v1648_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1648_3, this:r1648_1 +# 1648| m1648_5(unknown) = ^CallSideEffect : ~m1647_4 +# 1648| m1648_6(unknown) = Chi : total:m1647_4, partial:m1648_5 +# 1648| m1648_7(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 +# 1648| m1648_8(StructuredBindingTupleNoRefGet) = Chi : total:m1648_2, partial:m1648_7 +# 1651| r1651_1(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_2(glval) = VariableAddress[t] : +# 1651| r1651_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1651_2 +# 1651| m1651_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1651_1, r1651_3 +# 1651| r1651_5(glval) = VariableAddress[i] : +# 1651| r1651_6(glval) = VariableAddress[#temp1651:16] : +# 1651| r1651_7(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, m1651_4 +# 1651| r1651_9(glval) = CopyValue : r1651_8 +# 1651| r1651_10(glval) = FunctionAddress[get] : +# 1651| r1651_11(int) = Call[get] : func:r1651_10, this:r1651_9 +# 1651| m1651_12(unknown) = ^CallSideEffect : ~m1648_6 +# 1651| m1651_13(unknown) = Chi : total:m1648_6, partial:m1651_12 +# 1651| v1651_14(void) = ^IndirectReadSideEffect[-1] : &:r1651_9, m1648_8 +# 1651| m1651_15(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_9 +# 1651| m1651_16(StructuredBindingTupleNoRefGet) = Chi : total:m1648_8, partial:m1651_15 +# 1651| m1651_17(int) = Store[#temp1651:16] : &:r1651_6, r1651_11 +# 1651| r1651_18(int &) = CopyValue : r1651_6 +# 1651| m1651_19(int &&) = Store[i] : &:r1651_5, r1651_18 +# 1651| r1651_20(glval) = VariableAddress[r] : +# 1651| r1651_21(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_22(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_21, m1651_4 +# 1651| r1651_23(glval) = CopyValue : r1651_22 +# 1651| r1651_24(glval) = FunctionAddress[get] : +# 1651| r1651_25(int &) = Call[get] : func:r1651_24, this:r1651_23 +# 1651| m1651_26(unknown) = ^CallSideEffect : ~m1651_13 +# 1651| m1651_27(unknown) = Chi : total:m1651_13, partial:m1651_26 +# 1651| v1651_28(void) = ^IndirectReadSideEffect[-1] : &:r1651_23, m1651_16 +# 1651| m1651_29(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_23 +# 1651| m1651_30(StructuredBindingTupleNoRefGet) = Chi : total:m1651_16, partial:m1651_29 +# 1651| r1651_31(glval) = CopyValue : r1651_25 +# 1651| r1651_32(int &) = CopyValue : r1651_31 +# 1651| m1651_33(int &) = Store[r] : &:r1651_20, r1651_32 +# 1651| r1651_34(glval) = VariableAddress[rv] : +# 1651| r1651_35(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_36(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_35, m1651_4 +# 1651| r1651_37(glval) = CopyValue : r1651_36 +# 1651| r1651_38(glval) = FunctionAddress[get] : +# 1651| r1651_39(int &&) = Call[get] : func:r1651_38, this:r1651_37 +# 1651| m1651_40(unknown) = ^CallSideEffect : ~m1651_27 +# 1651| m1651_41(unknown) = Chi : total:m1651_27, partial:m1651_40 +# 1651| v1651_42(void) = ^IndirectReadSideEffect[-1] : &:r1651_37, m1651_30 +# 1651| m1651_43(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_37 +# 1651| m1651_44(StructuredBindingTupleNoRefGet) = Chi : total:m1651_30, partial:m1651_43 +# 1651| r1651_45(glval) = CopyValue : r1651_39 +# 1651| r1651_46(int &) = CopyValue : r1651_45 +# 1651| m1651_47(int &&) = Store[rv] : &:r1651_34, r1651_46 +# 1652| r1652_1(int) = Constant[4] : # 1652| r1652_2(glval) = VariableAddress[i] : -# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, m1649_19 -# 1652| r1652_4(int) = Load[?] : &:r1652_3, m1650_5 -# 1652| m1652_5(int) = Store[v] : &:r1652_1, r1652_4 -# 1653| r1653_1(int) = Constant[5] : -# 1653| r1653_2(glval) = VariableAddress[r] : -# 1653| r1653_3(int &) = Load[r] : &:r1653_2, m1649_33 +# 1652| r1652_3(int &&) = Load[i] : &:r1652_2, m1651_19 +# 1652| r1652_4(glval) = CopyValue : r1652_3 +# 1652| m1652_5(int) = Store[?] : &:r1652_4, r1652_1 +# 1653| r1653_1(glval) = VariableAddress[ri] : +# 1653| r1653_2(glval) = VariableAddress[i] : +# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, m1651_19 # 1653| r1653_4(glval) = CopyValue : r1653_3 -# 1653| m1653_5(int) = Store[?] : &:r1653_4, r1653_1 -# 1653| m1653_6(unknown) = Chi : total:m1649_41, partial:m1653_5 -# 1654| r1654_1(glval) = VariableAddress[rr] : -# 1654| r1654_2(glval) = VariableAddress[r] : -# 1654| r1654_3(int &) = Load[r] : &:r1654_2, m1649_33 -# 1654| r1654_4(glval) = CopyValue : r1654_3 -# 1654| r1654_5(int &) = CopyValue : r1654_4 -# 1654| m1654_6(int &) = Store[rr] : &:r1654_1, r1654_5 -# 1655| r1655_1(glval) = VariableAddress[w] : +# 1653| r1653_5(int &) = CopyValue : r1653_4 +# 1653| m1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 +# 1654| r1654_1(glval) = VariableAddress[v] : +# 1654| r1654_2(glval) = VariableAddress[i] : +# 1654| r1654_3(int &&) = Load[i] : &:r1654_2, m1651_19 +# 1654| r1654_4(int) = Load[?] : &:r1654_3, m1652_5 +# 1654| m1654_5(int) = Store[v] : &:r1654_1, r1654_4 +# 1655| r1655_1(int) = Constant[5] : # 1655| r1655_2(glval) = VariableAddress[r] : -# 1655| r1655_3(int &) = Load[r] : &:r1655_2, m1649_33 -# 1655| r1655_4(int) = Load[?] : &:r1655_3, ~m1653_6 -# 1655| m1655_5(int) = Store[w] : &:r1655_1, r1655_4 -# 1659| r1659_1(glval) = VariableAddress[unnamed_local_variable] : -# 1659| r1659_2(glval) = VariableAddress[t] : -# 1659| r1659_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1659_2 -# 1659| m1659_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1659_1, r1659_3 -# 1660| r1660_1(glval) = VariableAddress[i] : -# 1660| r1660_2(glval) = VariableAddress[#temp1660:20] : -# 1660| r1660_3(glval) = VariableAddress[unnamed_local_variable] : -# 1660| r1660_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1660_3, m1659_4 -# 1660| r1660_5(glval) = CopyValue : r1660_4 -# 1660| r1660_6(glval) = FunctionAddress[get] : -# 1660| r1660_7(int) = Call[get] : func:r1660_6, this:r1660_5 -# 1660| m1660_8(unknown) = ^CallSideEffect : ~m1653_6 -# 1660| m1660_9(unknown) = Chi : total:m1653_6, partial:m1660_8 -# 1660| v1660_10(void) = ^IndirectReadSideEffect[-1] : &:r1660_5, m1649_44 -# 1660| m1660_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1660_5 -# 1660| m1660_12(StructuredBindingTupleNoRefGet) = Chi : total:m1649_44, partial:m1660_11 -# 1660| m1660_13(int) = Store[#temp1660:20] : &:r1660_2, r1660_7 -# 1660| r1660_14(int &) = CopyValue : r1660_2 -# 1660| m1660_15(int &&) = Store[i] : &:r1660_1, r1660_14 -# 1661| r1661_1(glval) = VariableAddress[r] : -# 1661| r1661_2(glval) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1661_2, m1659_4 -# 1661| r1661_4(glval) = CopyValue : r1661_3 -# 1661| r1661_5(glval) = FunctionAddress[get] : -# 1661| r1661_6(int &) = Call[get] : func:r1661_5, this:r1661_4 -# 1661| m1661_7(unknown) = ^CallSideEffect : ~m1660_9 -# 1661| m1661_8(unknown) = Chi : total:m1660_9, partial:m1661_7 -# 1661| v1661_9(void) = ^IndirectReadSideEffect[-1] : &:r1661_4, m1660_12 -# 1661| m1661_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1661_4 -# 1661| m1661_11(StructuredBindingTupleNoRefGet) = Chi : total:m1660_12, partial:m1661_10 -# 1661| r1661_12(glval) = CopyValue : r1661_6 -# 1661| r1661_13(int &) = CopyValue : r1661_12 -# 1661| m1661_14(int &) = Store[r] : &:r1661_1, r1661_13 -# 1662| r1662_1(glval) = VariableAddress[rv] : -# 1662| r1662_2(glval) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_2, m1659_4 -# 1662| r1662_4(glval) = CopyValue : r1662_3 -# 1662| r1662_5(glval) = FunctionAddress[get] : -# 1662| r1662_6(int &&) = Call[get] : func:r1662_5, this:r1662_4 -# 1662| m1662_7(unknown) = ^CallSideEffect : ~m1661_8 -# 1662| m1662_8(unknown) = Chi : total:m1661_8, partial:m1662_7 -# 1662| v1662_9(void) = ^IndirectReadSideEffect[-1] : &:r1662_4, m1661_11 -# 1662| m1662_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_4 -# 1662| m1662_11(StructuredBindingTupleNoRefGet) = Chi : total:m1661_11, partial:m1662_10 -# 1662| r1662_12(glval) = CopyValue : r1662_6 -# 1662| r1662_13(int &) = CopyValue : r1662_12 -# 1662| m1662_14(int &&) = Store[rv] : &:r1662_1, r1662_13 -# 1663| r1663_1(int) = Constant[4] : -# 1663| r1663_2(glval) = VariableAddress[i] : -# 1663| r1663_3(int &&) = Load[i] : &:r1663_2, m1660_15 -# 1663| r1663_4(glval) = CopyValue : r1663_3 -# 1663| m1663_5(int) = Store[?] : &:r1663_4, r1663_1 -# 1664| r1664_1(glval) = VariableAddress[ri] : -# 1664| r1664_2(glval) = VariableAddress[i] : -# 1664| r1664_3(int &&) = Load[i] : &:r1664_2, m1660_15 -# 1664| r1664_4(glval) = CopyValue : r1664_3 -# 1664| r1664_5(int &) = CopyValue : r1664_4 -# 1664| m1664_6(int &) = Store[ri] : &:r1664_1, r1664_5 -# 1665| r1665_1(glval) = VariableAddress[v] : +# 1655| r1655_3(int &) = Load[r] : &:r1655_2, m1651_33 +# 1655| r1655_4(glval) = CopyValue : r1655_3 +# 1655| m1655_5(int) = Store[?] : &:r1655_4, r1655_1 +# 1655| m1655_6(unknown) = Chi : total:m1651_41, partial:m1655_5 +# 1656| r1656_1(glval) = VariableAddress[rr] : +# 1656| r1656_2(glval) = VariableAddress[r] : +# 1656| r1656_3(int &) = Load[r] : &:r1656_2, m1651_33 +# 1656| r1656_4(glval) = CopyValue : r1656_3 +# 1656| r1656_5(int &) = CopyValue : r1656_4 +# 1656| m1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 +# 1657| r1657_1(glval) = VariableAddress[w] : +# 1657| r1657_2(glval) = VariableAddress[r] : +# 1657| r1657_3(int &) = Load[r] : &:r1657_2, m1651_33 +# 1657| r1657_4(int) = Load[?] : &:r1657_3, ~m1655_6 +# 1657| m1657_5(int) = Store[w] : &:r1657_1, r1657_4 +# 1661| r1661_1(glval) = VariableAddress[unnamed_local_variable] : +# 1661| r1661_2(glval) = VariableAddress[t] : +# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1661_2 +# 1661| m1661_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1661_1, r1661_3 +# 1662| r1662_1(glval) = VariableAddress[i] : +# 1662| r1662_2(glval) = VariableAddress[#temp1662:20] : +# 1662| r1662_3(glval) = VariableAddress[unnamed_local_variable] : +# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, m1661_4 +# 1662| r1662_5(glval) = CopyValue : r1662_4 +# 1662| r1662_6(glval) = FunctionAddress[get] : +# 1662| r1662_7(int) = Call[get] : func:r1662_6, this:r1662_5 +# 1662| m1662_8(unknown) = ^CallSideEffect : ~m1655_6 +# 1662| m1662_9(unknown) = Chi : total:m1655_6, partial:m1662_8 +# 1662| v1662_10(void) = ^IndirectReadSideEffect[-1] : &:r1662_5, m1651_44 +# 1662| m1662_11(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_5 +# 1662| m1662_12(StructuredBindingTupleNoRefGet) = Chi : total:m1651_44, partial:m1662_11 +# 1662| m1662_13(int) = Store[#temp1662:20] : &:r1662_2, r1662_7 +# 1662| r1662_14(int &) = CopyValue : r1662_2 +# 1662| m1662_15(int &&) = Store[i] : &:r1662_1, r1662_14 +# 1663| r1663_1(glval) = VariableAddress[r] : +# 1663| r1663_2(glval) = VariableAddress[unnamed_local_variable] : +# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, m1661_4 +# 1663| r1663_4(glval) = CopyValue : r1663_3 +# 1663| r1663_5(glval) = FunctionAddress[get] : +# 1663| r1663_6(int &) = Call[get] : func:r1663_5, this:r1663_4 +# 1663| m1663_7(unknown) = ^CallSideEffect : ~m1662_9 +# 1663| m1663_8(unknown) = Chi : total:m1662_9, partial:m1663_7 +# 1663| v1663_9(void) = ^IndirectReadSideEffect[-1] : &:r1663_4, m1662_12 +# 1663| m1663_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1663_4 +# 1663| m1663_11(StructuredBindingTupleNoRefGet) = Chi : total:m1662_12, partial:m1663_10 +# 1663| r1663_12(glval) = CopyValue : r1663_6 +# 1663| r1663_13(int &) = CopyValue : r1663_12 +# 1663| m1663_14(int &) = Store[r] : &:r1663_1, r1663_13 +# 1664| r1664_1(glval) = VariableAddress[rv] : +# 1664| r1664_2(glval) = VariableAddress[unnamed_local_variable] : +# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, m1661_4 +# 1664| r1664_4(glval) = CopyValue : r1664_3 +# 1664| r1664_5(glval) = FunctionAddress[get] : +# 1664| r1664_6(int &&) = Call[get] : func:r1664_5, this:r1664_4 +# 1664| m1664_7(unknown) = ^CallSideEffect : ~m1663_8 +# 1664| m1664_8(unknown) = Chi : total:m1663_8, partial:m1664_7 +# 1664| v1664_9(void) = ^IndirectReadSideEffect[-1] : &:r1664_4, m1663_11 +# 1664| m1664_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1664_4 +# 1664| m1664_11(StructuredBindingTupleNoRefGet) = Chi : total:m1663_11, partial:m1664_10 +# 1664| r1664_12(glval) = CopyValue : r1664_6 +# 1664| r1664_13(int &) = CopyValue : r1664_12 +# 1664| m1664_14(int &&) = Store[rv] : &:r1664_1, r1664_13 +# 1665| r1665_1(int) = Constant[4] : # 1665| r1665_2(glval) = VariableAddress[i] : -# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, m1660_15 -# 1665| r1665_4(int) = Load[?] : &:r1665_3, m1663_5 -# 1665| m1665_5(int) = Store[v] : &:r1665_1, r1665_4 -# 1666| r1666_1(int) = Constant[5] : -# 1666| r1666_2(glval) = VariableAddress[r] : -# 1666| r1666_3(int &) = Load[r] : &:r1666_2, m1661_14 +# 1665| r1665_3(int &&) = Load[i] : &:r1665_2, m1662_15 +# 1665| r1665_4(glval) = CopyValue : r1665_3 +# 1665| m1665_5(int) = Store[?] : &:r1665_4, r1665_1 +# 1666| r1666_1(glval) = VariableAddress[ri] : +# 1666| r1666_2(glval) = VariableAddress[i] : +# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, m1662_15 # 1666| r1666_4(glval) = CopyValue : r1666_3 -# 1666| m1666_5(int) = Store[?] : &:r1666_4, r1666_1 -# 1666| m1666_6(unknown) = Chi : total:m1662_8, partial:m1666_5 -# 1667| r1667_1(glval) = VariableAddress[rr] : -# 1667| r1667_2(glval) = VariableAddress[r] : -# 1667| r1667_3(int &) = Load[r] : &:r1667_2, m1661_14 -# 1667| r1667_4(glval) = CopyValue : r1667_3 -# 1667| r1667_5(int &) = CopyValue : r1667_4 -# 1667| m1667_6(int &) = Store[rr] : &:r1667_1, r1667_5 -# 1668| r1668_1(glval) = VariableAddress[w] : +# 1666| r1666_5(int &) = CopyValue : r1666_4 +# 1666| m1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 +# 1667| r1667_1(glval) = VariableAddress[v] : +# 1667| r1667_2(glval) = VariableAddress[i] : +# 1667| r1667_3(int &&) = Load[i] : &:r1667_2, m1662_15 +# 1667| r1667_4(int) = Load[?] : &:r1667_3, m1665_5 +# 1667| m1667_5(int) = Store[v] : &:r1667_1, r1667_4 +# 1668| r1668_1(int) = Constant[5] : # 1668| r1668_2(glval) = VariableAddress[r] : -# 1668| r1668_3(int &) = Load[r] : &:r1668_2, m1661_14 -# 1668| r1668_4(int) = Load[?] : &:r1668_3, ~m1666_6 -# 1668| m1668_5(int) = Store[w] : &:r1668_1, r1668_4 -# 1670| v1670_1(void) = NoOp : -# 1645| v1645_5(void) = ReturnVoid : -# 1645| v1645_6(void) = AliasedUse : ~m1666_6 -# 1645| v1645_7(void) = ExitFunction : +# 1668| r1668_3(int &) = Load[r] : &:r1668_2, m1663_14 +# 1668| r1668_4(glval) = CopyValue : r1668_3 +# 1668| m1668_5(int) = Store[?] : &:r1668_4, r1668_1 +# 1668| m1668_6(unknown) = Chi : total:m1664_8, partial:m1668_5 +# 1669| r1669_1(glval) = VariableAddress[rr] : +# 1669| r1669_2(glval) = VariableAddress[r] : +# 1669| r1669_3(int &) = Load[r] : &:r1669_2, m1663_14 +# 1669| r1669_4(glval) = CopyValue : r1669_3 +# 1669| r1669_5(int &) = CopyValue : r1669_4 +# 1669| m1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 +# 1670| r1670_1(glval) = VariableAddress[w] : +# 1670| r1670_2(glval) = VariableAddress[r] : +# 1670| r1670_3(int &) = Load[r] : &:r1670_2, m1663_14 +# 1670| r1670_4(int) = Load[?] : &:r1670_3, ~m1668_6 +# 1670| m1670_5(int) = Store[w] : &:r1670_1, r1670_4 +# 1672| v1672_1(void) = NoOp : +# 1647| v1647_5(void) = ReturnVoid : +# 1647| v1647_6(void) = AliasedUse : ~m1668_6 +# 1647| v1647_7(void) = ExitFunction : -# 1672| void array_structured_binding_non_ref_init() -# 1672| Block 0 -# 1672| v1672_1(void) = EnterFunction : -# 1672| m1672_2(unknown) = AliasedDefinition : -# 1672| m1672_3(unknown) = InitializeNonLocal : -# 1672| m1672_4(unknown) = Chi : total:m1672_2, partial:m1672_3 -# 1673| r1673_1(glval) = VariableAddress[xs] : -# 1673| m1673_2(int[2]) = Uninitialized[xs] : &:r1673_1 -# 1673| r1673_3(int) = Constant[0] : -# 1673| r1673_4(glval) = PointerAdd[4] : r1673_1, r1673_3 -# 1673| r1673_5(int) = Constant[1] : -# 1673| m1673_6(int) = Store[?] : &:r1673_4, r1673_5 -# 1673| m1673_7(int[2]) = Chi : total:m1673_2, partial:m1673_6 -# 1673| r1673_8(int) = Constant[1] : -# 1673| r1673_9(glval) = PointerAdd[4] : r1673_1, r1673_8 -# 1673| r1673_10(int) = Constant[2] : -# 1673| m1673_11(int) = Store[?] : &:r1673_9, r1673_10 -# 1673| m1673_12(int[2]) = Chi : total:m1673_7, partial:m1673_11 -# 1674| r1674_1(glval) = VariableAddress[(unnamed local variable)] : -# 1674| r1674_2(glval) = VariableAddress[xs] : -# 1674| r1674_3(int[2]) = Load[xs] : &:r1674_2, m1673_12 -# 1674| m1674_4(int[2]) = Store[(unnamed local variable)] : &:r1674_1, r1674_3 -# 1674| r1674_5(glval) = VariableAddress[x0] : +# 1674| void array_structured_binding_non_ref_init() +# 1674| Block 0 +# 1674| v1674_1(void) = EnterFunction : +# 1674| m1674_2(unknown) = AliasedDefinition : +# 1674| m1674_3(unknown) = InitializeNonLocal : +# 1674| m1674_4(unknown) = Chi : total:m1674_2, partial:m1674_3 +# 1675| r1675_1(glval) = VariableAddress[xs] : +# 1675| m1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 +# 1675| r1675_3(int) = Constant[0] : +# 1675| r1675_4(glval) = PointerAdd[4] : r1675_1, r1675_3 +# 1675| r1675_5(int) = Constant[1] : +# 1675| m1675_6(int) = Store[?] : &:r1675_4, r1675_5 +# 1675| m1675_7(int[2]) = Chi : total:m1675_2, partial:m1675_6 +# 1675| r1675_8(int) = Constant[1] : +# 1675| r1675_9(glval) = PointerAdd[4] : r1675_1, r1675_8 +# 1675| r1675_10(int) = Constant[2] : +# 1675| m1675_11(int) = Store[?] : &:r1675_9, r1675_10 +# 1675| m1675_12(int[2]) = Chi : total:m1675_7, partial:m1675_11 +# 1676| r1676_1(glval) = VariableAddress[(unnamed local variable)] : +# 1676| r1676_2(glval) = VariableAddress[xs] : +# 1676| r1676_3(int[2]) = Load[xs] : &:r1676_2, m1675_12 +# 1676| m1676_4(int[2]) = Store[(unnamed local variable)] : &:r1676_1, r1676_3 +# 1676| r1676_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval) = PointerAdd[4] : r0_2, r0_3 -#-----| m0_5(int &) = Store[x0] : &:r1674_5, r0_4 -# 1674| r1674_6(glval) = VariableAddress[x1] : +#-----| m0_5(int &) = Store[x0] : &:r1676_5, r0_4 +# 1676| r1676_6(glval) = VariableAddress[x1] : #-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval) = PointerAdd[4] : r0_7, r0_8 -#-----| m0_10(int &) = Store[x1] : &:r1674_6, r0_9 -# 1675| v1675_1(void) = NoOp : -# 1672| v1672_5(void) = ReturnVoid : -# 1672| v1672_6(void) = AliasedUse : m1672_3 -# 1672| v1672_7(void) = ExitFunction : +#-----| m0_10(int &) = Store[x1] : &:r1676_6, r0_9 +# 1677| v1677_1(void) = NoOp : +# 1674| v1674_5(void) = ReturnVoid : +# 1674| v1674_6(void) = AliasedUse : m1674_3 +# 1674| v1674_7(void) = ExitFunction : -# 1680| void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1680| Block 0 -# 1680| v1680_1(void) = EnterFunction : -# 1680| m1680_2(unknown) = AliasedDefinition : -# 1680| m1680_3(unknown) = InitializeNonLocal : -# 1680| m1680_4(unknown) = Chi : total:m1680_2, partial:m1680_3 -# 1680| r1680_5(glval) = VariableAddress[#this] : -# 1680| m1680_6(glval) = InitializeParameter[#this] : &:r1680_5 -# 1680| r1680_7(glval) = Load[#this] : &:r1680_5, m1680_6 -# 1680| m1680_8(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1680_7 -# 1680| v1680_9(void) = NoOp : -# 1680| v1680_10(void) = ReturnIndirection[#this] : &:r1680_7, m1680_8 -# 1680| v1680_11(void) = ReturnVoid : -# 1680| v1680_12(void) = AliasedUse : m1680_3 -# 1680| v1680_13(void) = ExitFunction : +# 1682| void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1682| Block 0 +# 1682| v1682_1(void) = EnterFunction : +# 1682| m1682_2(unknown) = AliasedDefinition : +# 1682| m1682_3(unknown) = InitializeNonLocal : +# 1682| m1682_4(unknown) = Chi : total:m1682_2, partial:m1682_3 +# 1682| r1682_5(glval) = VariableAddress[#this] : +# 1682| m1682_6(glval) = InitializeParameter[#this] : &:r1682_5 +# 1682| r1682_7(glval) = Load[#this] : &:r1682_5, m1682_6 +# 1682| m1682_8(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1682_7 +# 1682| v1682_9(void) = NoOp : +# 1682| v1682_10(void) = ReturnIndirection[#this] : &:r1682_7, m1682_8 +# 1682| v1682_11(void) = ReturnVoid : +# 1682| v1682_12(void) = AliasedUse : m1682_3 +# 1682| v1682_13(void) = ExitFunction : -# 1683| void captured_lambda(int, int&, int&&) -# 1683| Block 0 -# 1683| v1683_1(void) = EnterFunction : -# 1683| m1683_2(unknown) = AliasedDefinition : -# 1683| m1683_3(unknown) = InitializeNonLocal : -# 1683| m1683_4(unknown) = Chi : total:m1683_2, partial:m1683_3 -# 1683| r1683_5(glval) = VariableAddress[x] : -# 1683| m1683_6(int) = InitializeParameter[x] : &:r1683_5 -# 1683| r1683_7(glval) = VariableAddress[y] : -# 1683| m1683_8(int &) = InitializeParameter[y] : &:r1683_7 -# 1683| r1683_9(int &) = Load[y] : &:r1683_7, m1683_8 -# 1683| m1683_10(unknown) = InitializeIndirection[y] : &:r1683_9 -# 1683| r1683_11(glval) = VariableAddress[z] : -# 1683| m1683_12(int &&) = InitializeParameter[z] : &:r1683_11 -# 1683| r1683_13(int &&) = Load[z] : &:r1683_11, m1683_12 -# 1683| m1683_14(unknown) = InitializeIndirection[z] : &:r1683_13 -# 1685| r1685_1(glval) = VariableAddress[obj1] : -# 1685| r1685_2(glval) = VariableAddress[#temp1685:24] : -# 1685| m1685_3(CapturedLambdaMyObj) = Uninitialized[#temp1685:24] : &:r1685_2 -# 1685| r1685_4(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1685| v1685_5(void) = Call[CapturedLambdaMyObj] : func:r1685_4, this:r1685_2 -# 1685| m1685_6(unknown) = ^CallSideEffect : ~m1683_4 -# 1685| m1685_7(unknown) = Chi : total:m1683_4, partial:m1685_6 -# 1685| m1685_8(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1685_2 -# 1685| m1685_9(CapturedLambdaMyObj) = Chi : total:m1685_3, partial:m1685_8 -# 1685| r1685_10(glval) = Convert : r1685_2 -# 1685| r1685_11(CapturedLambdaMyObj &) = CopyValue : r1685_10 -# 1685| m1685_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1685_1, r1685_11 -# 1686| r1686_1(glval) = VariableAddress[obj2] : -# 1686| m1686_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1686_1 -# 1686| r1686_3(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1686| v1686_4(void) = Call[CapturedLambdaMyObj] : func:r1686_3, this:r1686_1 -# 1686| m1686_5(unknown) = ^CallSideEffect : ~m1685_7 -# 1686| m1686_6(unknown) = Chi : total:m1685_7, partial:m1686_5 -# 1686| m1686_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1686_1 -# 1686| m1686_8(CapturedLambdaMyObj) = Chi : total:m1686_2, partial:m1686_7 -# 1688| r1688_1(glval) = VariableAddress[lambda_outer] : -# 1688| r1688_2(glval) = VariableAddress[#temp1688:24] : -# 1688| m1688_3(decltype([...](...){...})) = Uninitialized[#temp1688:24] : &:r1688_2 -# 1688| r1688_4(glval) = FieldAddress[obj1] : r1688_2 -# 1688| r1688_5(glval) = VariableAddress[obj1] : -# 1688| r1688_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1688_5, m1685_12 -#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1688_6, m1685_9 -#-----| m0_2(CapturedLambdaMyObj) = Store[?] : &:r1688_4, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1688_3, partial:m0_2 -# 1688| r1688_7(glval) = FieldAddress[obj2] : r1688_2 -# 1688| r1688_8(glval) = VariableAddress[obj2] : -# 1688| r1688_9(CapturedLambdaMyObj) = Load[obj2] : &:r1688_8, m1686_8 -# 1688| m1688_10(CapturedLambdaMyObj) = Store[?] : &:r1688_7, r1688_9 -# 1688| m1688_11(decltype([...](...){...})) = Chi : total:m0_3, partial:m1688_10 -# 1688| r1688_12(glval) = FieldAddress[x] : r1688_2 -# 1688| r1688_13(glval) = VariableAddress[x] : -# 1688| r1688_14(int) = Load[x] : &:r1688_13, m1683_6 -# 1688| m1688_15(int) = Store[?] : &:r1688_12, r1688_14 -# 1688| m1688_16(decltype([...](...){...})) = Chi : total:m1688_11, partial:m1688_15 -# 1688| r1688_17(glval) = FieldAddress[y] : r1688_2 -# 1688| r1688_18(glval) = VariableAddress[y] : -# 1688| r1688_19(int &) = Load[y] : &:r1688_18, m1683_8 -# 1690| r1690_1(int) = Load[?] : &:r1688_19, ~m1683_10 -# 1690| m1690_2(int) = Store[?] : &:r1688_17, r1690_1 -# 1690| m1690_3(decltype([...](...){...})) = Chi : total:m1688_16, partial:m1690_2 -# 1688| r1688_20(glval) = FieldAddress[z] : r1688_2 -# 1688| r1688_21(glval) = VariableAddress[z] : -# 1688| r1688_22(int &&) = Load[z] : &:r1688_21, m1683_12 -# 1690| r1690_4(int) = Load[?] : &:r1688_22, ~m1683_14 -# 1690| m1690_5(int) = Store[?] : &:r1688_20, r1690_4 -# 1690| m1690_6(decltype([...](...){...})) = Chi : total:m1690_3, partial:m1690_5 -# 1688| r1688_23(decltype([...](...){...})) = Load[#temp1688:24] : &:r1688_2, m1690_6 -# 1688| m1688_24(decltype([...](...){...})) = Store[lambda_outer] : &:r1688_1, r1688_23 -# 1691| v1691_1(void) = NoOp : -# 1683| v1683_15(void) = ReturnIndirection[y] : &:r1683_9, m1683_10 -# 1683| v1683_16(void) = ReturnIndirection[z] : &:r1683_13, m1683_14 -# 1683| v1683_17(void) = ReturnVoid : -# 1683| v1683_18(void) = AliasedUse : ~m1686_6 -# 1683| v1683_19(void) = ExitFunction : +# 1685| void captured_lambda(int, int&, int&&) +# 1685| Block 0 +# 1685| v1685_1(void) = EnterFunction : +# 1685| m1685_2(unknown) = AliasedDefinition : +# 1685| m1685_3(unknown) = InitializeNonLocal : +# 1685| m1685_4(unknown) = Chi : total:m1685_2, partial:m1685_3 +# 1685| r1685_5(glval) = VariableAddress[x] : +# 1685| m1685_6(int) = InitializeParameter[x] : &:r1685_5 +# 1685| r1685_7(glval) = VariableAddress[y] : +# 1685| m1685_8(int &) = InitializeParameter[y] : &:r1685_7 +# 1685| r1685_9(int &) = Load[y] : &:r1685_7, m1685_8 +# 1685| m1685_10(unknown) = InitializeIndirection[y] : &:r1685_9 +# 1685| r1685_11(glval) = VariableAddress[z] : +# 1685| m1685_12(int &&) = InitializeParameter[z] : &:r1685_11 +# 1685| r1685_13(int &&) = Load[z] : &:r1685_11, m1685_12 +# 1685| m1685_14(unknown) = InitializeIndirection[z] : &:r1685_13 +# 1687| r1687_1(glval) = VariableAddress[obj1] : +# 1687| r1687_2(glval) = VariableAddress[#temp1687:24] : +# 1687| m1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 +# 1687| r1687_4(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1687| v1687_5(void) = Call[CapturedLambdaMyObj] : func:r1687_4, this:r1687_2 +# 1687| m1687_6(unknown) = ^CallSideEffect : ~m1685_4 +# 1687| m1687_7(unknown) = Chi : total:m1685_4, partial:m1687_6 +# 1687| m1687_8(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1687_2 +# 1687| m1687_9(CapturedLambdaMyObj) = Chi : total:m1687_3, partial:m1687_8 +# 1687| r1687_10(glval) = Convert : r1687_2 +# 1687| r1687_11(CapturedLambdaMyObj &) = CopyValue : r1687_10 +# 1687| m1687_12(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_11 +# 1688| r1688_1(glval) = VariableAddress[obj2] : +# 1688| m1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 +# 1688| r1688_3(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1688| v1688_4(void) = Call[CapturedLambdaMyObj] : func:r1688_3, this:r1688_1 +# 1688| m1688_5(unknown) = ^CallSideEffect : ~m1687_7 +# 1688| m1688_6(unknown) = Chi : total:m1687_7, partial:m1688_5 +# 1688| m1688_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 +# 1688| m1688_8(CapturedLambdaMyObj) = Chi : total:m1688_2, partial:m1688_7 +# 1690| r1690_1(glval) = VariableAddress[lambda_outer] : +# 1690| r1690_2(glval) = VariableAddress[#temp1690:24] : +# 1690| m1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 +# 1690| r1690_4(glval) = FieldAddress[obj1] : r1690_2 +# 1690| r1690_5(glval) = VariableAddress[obj1] : +# 1690| r1690_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1690_5, m1687_12 +#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1690_6, m1687_9 +#-----| m0_2(CapturedLambdaMyObj) = Store[?] : &:r1690_4, r0_1 +#-----| m0_3(decltype([...](...){...})) = Chi : total:m1690_3, partial:m0_2 +# 1690| r1690_7(glval) = FieldAddress[obj2] : r1690_2 +# 1690| r1690_8(glval) = VariableAddress[obj2] : +# 1690| r1690_9(CapturedLambdaMyObj) = Load[obj2] : &:r1690_8, m1688_8 +# 1690| m1690_10(CapturedLambdaMyObj) = Store[?] : &:r1690_7, r1690_9 +# 1690| m1690_11(decltype([...](...){...})) = Chi : total:m0_3, partial:m1690_10 +# 1690| r1690_12(glval) = FieldAddress[x] : r1690_2 +# 1690| r1690_13(glval) = VariableAddress[x] : +# 1690| r1690_14(int) = Load[x] : &:r1690_13, m1685_6 +# 1690| m1690_15(int) = Store[?] : &:r1690_12, r1690_14 +# 1690| m1690_16(decltype([...](...){...})) = Chi : total:m1690_11, partial:m1690_15 +# 1690| r1690_17(glval) = FieldAddress[y] : r1690_2 +# 1690| r1690_18(glval) = VariableAddress[y] : +# 1690| r1690_19(int &) = Load[y] : &:r1690_18, m1685_8 +# 1692| r1692_1(int) = Load[?] : &:r1690_19, ~m1685_10 +# 1692| m1692_2(int) = Store[?] : &:r1690_17, r1692_1 +# 1692| m1692_3(decltype([...](...){...})) = Chi : total:m1690_16, partial:m1692_2 +# 1690| r1690_20(glval) = FieldAddress[z] : r1690_2 +# 1690| r1690_21(glval) = VariableAddress[z] : +# 1690| r1690_22(int &&) = Load[z] : &:r1690_21, m1685_12 +# 1692| r1692_4(int) = Load[?] : &:r1690_22, ~m1685_14 +# 1692| m1692_5(int) = Store[?] : &:r1690_20, r1692_4 +# 1692| m1692_6(decltype([...](...){...})) = Chi : total:m1692_3, partial:m1692_5 +# 1690| r1690_23(decltype([...](...){...})) = Load[#temp1690:24] : &:r1690_2, m1692_6 +# 1690| m1690_24(decltype([...](...){...})) = Store[lambda_outer] : &:r1690_1, r1690_23 +# 1693| v1693_1(void) = NoOp : +# 1685| v1685_15(void) = ReturnIndirection[y] : &:r1685_9, m1685_10 +# 1685| v1685_16(void) = ReturnIndirection[z] : &:r1685_13, m1685_14 +# 1685| v1685_17(void) = ReturnVoid : +# 1685| v1685_18(void) = AliasedUse : ~m1688_6 +# 1685| v1685_19(void) = ExitFunction : -# 1688| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const -# 1688| Block 0 -# 1688| v1688_1(void) = EnterFunction : -# 1688| m1688_2(unknown) = AliasedDefinition : -# 1688| m1688_3(unknown) = InitializeNonLocal : -# 1688| m1688_4(unknown) = Chi : total:m1688_2, partial:m1688_3 -# 1688| r1688_5(glval) = VariableAddress[#this] : -# 1688| m1688_6(glval) = InitializeParameter[#this] : &:r1688_5 -# 1688| r1688_7(glval) = Load[#this] : &:r1688_5, m1688_6 -# 1688| m1688_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1688_7 -# 1689| r1689_1(glval) = VariableAddress[lambda_inner] : -# 1689| r1689_2(glval) = VariableAddress[#temp1689:28] : -# 1689| m1689_3(decltype([...](...){...})) = Uninitialized[#temp1689:28] : &:r1689_2 -# 1689| r1689_4(glval) = FieldAddress[obj1] : r1689_2 -# 1689| r1689_5(glval) = VariableAddress[#this] : -# 1689| r1689_6(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_5, m1688_6 -# 1689| r1689_7(glval) = FieldAddress[obj1] : r1689_6 -# 1689| r1689_8(CapturedLambdaMyObj) = Load[?] : &:r1689_7, ~m1688_8 -# 1689| m1689_9(CapturedLambdaMyObj) = Store[?] : &:r1689_4, r1689_8 -# 1689| m1689_10(decltype([...](...){...})) = Chi : total:m1689_3, partial:m1689_9 -# 1689| r1689_11(glval) = FieldAddress[obj2] : r1689_2 -# 1689| r1689_12(glval) = VariableAddress[#this] : -# 1689| r1689_13(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_12, m1688_6 -# 1689| r1689_14(glval) = FieldAddress[obj2] : r1689_13 -# 1689| r1689_15(CapturedLambdaMyObj) = Load[?] : &:r1689_14, ~m1688_8 -# 1689| m1689_16(CapturedLambdaMyObj) = Store[?] : &:r1689_11, r1689_15 -# 1689| m1689_17(decltype([...](...){...})) = Chi : total:m1689_10, partial:m1689_16 -# 1689| r1689_18(glval) = FieldAddress[x] : r1689_2 -# 1689| r1689_19(glval) = VariableAddress[#this] : -# 1689| r1689_20(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_19, m1688_6 -# 1689| r1689_21(glval) = FieldAddress[x] : r1689_20 -# 1689| r1689_22(int) = Load[?] : &:r1689_21, ~m1688_8 -# 1689| m1689_23(int) = Store[?] : &:r1689_18, r1689_22 -# 1689| m1689_24(decltype([...](...){...})) = Chi : total:m1689_17, partial:m1689_23 -# 1689| r1689_25(glval) = FieldAddress[y] : r1689_2 -# 1689| r1689_26(glval) = VariableAddress[#this] : -# 1689| r1689_27(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_26, m1688_6 -# 1689| r1689_28(glval) = FieldAddress[y] : r1689_27 -# 1689| r1689_29(int) = Load[?] : &:r1689_28, ~m1688_8 -# 1689| m1689_30(int) = Store[?] : &:r1689_25, r1689_29 -# 1689| m1689_31(decltype([...](...){...})) = Chi : total:m1689_24, partial:m1689_30 -# 1689| r1689_32(glval) = FieldAddress[z] : r1689_2 -# 1689| r1689_33(glval) = VariableAddress[#this] : -# 1689| r1689_34(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_33, m1688_6 -# 1689| r1689_35(glval) = FieldAddress[z] : r1689_34 -# 1689| r1689_36(int) = Load[?] : &:r1689_35, ~m1688_8 -# 1689| m1689_37(int) = Store[?] : &:r1689_32, r1689_36 -# 1689| m1689_38(decltype([...](...){...})) = Chi : total:m1689_31, partial:m1689_37 -# 1689| r1689_39(decltype([...](...){...})) = Load[#temp1689:28] : &:r1689_2, m1689_38 -# 1689| m1689_40(decltype([...](...){...})) = Store[lambda_inner] : &:r1689_1, r1689_39 -# 1690| v1690_1(void) = NoOp : -# 1688| v1688_9(void) = ReturnIndirection[#this] : &:r1688_7, m1688_8 -# 1688| v1688_10(void) = ReturnVoid : -# 1688| v1688_11(void) = AliasedUse : m1688_3 -# 1688| v1688_12(void) = ExitFunction : +# 1690| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const +# 1690| Block 0 +# 1690| v1690_1(void) = EnterFunction : +# 1690| m1690_2(unknown) = AliasedDefinition : +# 1690| m1690_3(unknown) = InitializeNonLocal : +# 1690| m1690_4(unknown) = Chi : total:m1690_2, partial:m1690_3 +# 1690| r1690_5(glval) = VariableAddress[#this] : +# 1690| m1690_6(glval) = InitializeParameter[#this] : &:r1690_5 +# 1690| r1690_7(glval) = Load[#this] : &:r1690_5, m1690_6 +# 1690| m1690_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_7 +# 1691| r1691_1(glval) = VariableAddress[lambda_inner] : +# 1691| r1691_2(glval) = VariableAddress[#temp1691:28] : +# 1691| m1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 +# 1691| r1691_4(glval) = FieldAddress[obj1] : r1691_2 +# 1691| r1691_5(glval) = VariableAddress[#this] : +# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, m1690_6 +# 1691| r1691_7(glval) = FieldAddress[obj1] : r1691_6 +# 1691| r1691_8(CapturedLambdaMyObj) = Load[?] : &:r1691_7, ~m1690_8 +# 1691| m1691_9(CapturedLambdaMyObj) = Store[?] : &:r1691_4, r1691_8 +# 1691| m1691_10(decltype([...](...){...})) = Chi : total:m1691_3, partial:m1691_9 +# 1691| r1691_11(glval) = FieldAddress[obj2] : r1691_2 +# 1691| r1691_12(glval) = VariableAddress[#this] : +# 1691| r1691_13(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_12, m1690_6 +# 1691| r1691_14(glval) = FieldAddress[obj2] : r1691_13 +# 1691| r1691_15(CapturedLambdaMyObj) = Load[?] : &:r1691_14, ~m1690_8 +# 1691| m1691_16(CapturedLambdaMyObj) = Store[?] : &:r1691_11, r1691_15 +# 1691| m1691_17(decltype([...](...){...})) = Chi : total:m1691_10, partial:m1691_16 +# 1691| r1691_18(glval) = FieldAddress[x] : r1691_2 +# 1691| r1691_19(glval) = VariableAddress[#this] : +# 1691| r1691_20(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_19, m1690_6 +# 1691| r1691_21(glval) = FieldAddress[x] : r1691_20 +# 1691| r1691_22(int) = Load[?] : &:r1691_21, ~m1690_8 +# 1691| m1691_23(int) = Store[?] : &:r1691_18, r1691_22 +# 1691| m1691_24(decltype([...](...){...})) = Chi : total:m1691_17, partial:m1691_23 +# 1691| r1691_25(glval) = FieldAddress[y] : r1691_2 +# 1691| r1691_26(glval) = VariableAddress[#this] : +# 1691| r1691_27(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_26, m1690_6 +# 1691| r1691_28(glval) = FieldAddress[y] : r1691_27 +# 1691| r1691_29(int) = Load[?] : &:r1691_28, ~m1690_8 +# 1691| m1691_30(int) = Store[?] : &:r1691_25, r1691_29 +# 1691| m1691_31(decltype([...](...){...})) = Chi : total:m1691_24, partial:m1691_30 +# 1691| r1691_32(glval) = FieldAddress[z] : r1691_2 +# 1691| r1691_33(glval) = VariableAddress[#this] : +# 1691| r1691_34(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_33, m1690_6 +# 1691| r1691_35(glval) = FieldAddress[z] : r1691_34 +# 1691| r1691_36(int) = Load[?] : &:r1691_35, ~m1690_8 +# 1691| m1691_37(int) = Store[?] : &:r1691_32, r1691_36 +# 1691| m1691_38(decltype([...](...){...})) = Chi : total:m1691_31, partial:m1691_37 +# 1691| r1691_39(decltype([...](...){...})) = Load[#temp1691:28] : &:r1691_2, m1691_38 +# 1691| m1691_40(decltype([...](...){...})) = Store[lambda_inner] : &:r1691_1, r1691_39 +# 1692| v1692_1(void) = NoOp : +# 1690| v1690_9(void) = ReturnIndirection[#this] : &:r1690_7, m1690_8 +# 1690| v1690_10(void) = ReturnVoid : +# 1690| v1690_11(void) = AliasedUse : m1690_3 +# 1690| v1690_12(void) = ExitFunction : -# 1689| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator()() const -# 1689| Block 0 -# 1689| v1689_1(void) = EnterFunction : -# 1689| m1689_2(unknown) = AliasedDefinition : -# 1689| m1689_3(unknown) = InitializeNonLocal : -# 1689| m1689_4(unknown) = Chi : total:m1689_2, partial:m1689_3 -# 1689| r1689_5(glval) = VariableAddress[#this] : -# 1689| m1689_6(glval) = InitializeParameter[#this] : &:r1689_5 -# 1689| r1689_7(glval) = Load[#this] : &:r1689_5, m1689_6 -# 1689| m1689_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1689_7 -# 1689| v1689_9(void) = NoOp : -# 1689| v1689_10(void) = NoOp : -# 1689| v1689_11(void) = ReturnIndirection[#this] : &:r1689_7, m1689_8 -# 1689| v1689_12(void) = ReturnVoid : -# 1689| v1689_13(void) = AliasedUse : m1689_3 -# 1689| v1689_14(void) = ExitFunction : +# 1691| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const +# 1691| Block 0 +# 1691| v1691_1(void) = EnterFunction : +# 1691| m1691_2(unknown) = AliasedDefinition : +# 1691| m1691_3(unknown) = InitializeNonLocal : +# 1691| m1691_4(unknown) = Chi : total:m1691_2, partial:m1691_3 +# 1691| r1691_5(glval) = VariableAddress[#this] : +# 1691| m1691_6(glval) = InitializeParameter[#this] : &:r1691_5 +# 1691| r1691_7(glval) = Load[#this] : &:r1691_5, m1691_6 +# 1691| m1691_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1691_7 +# 1691| v1691_9(void) = NoOp : +# 1691| v1691_10(void) = NoOp : +# 1691| v1691_11(void) = ReturnIndirection[#this] : &:r1691_7, m1691_8 +# 1691| v1691_12(void) = ReturnVoid : +# 1691| v1691_13(void) = AliasedUse : m1691_3 +# 1691| v1691_14(void) = ExitFunction : -# 1693| int goto_on_same_line() -# 1693| Block 0 -# 1693| v1693_1(void) = EnterFunction : -# 1693| m1693_2(unknown) = AliasedDefinition : -# 1693| m1693_3(unknown) = InitializeNonLocal : -# 1693| m1693_4(unknown) = Chi : total:m1693_2, partial:m1693_3 -# 1694| r1694_1(glval) = VariableAddress[x] : -# 1694| r1694_2(int) = Constant[42] : -# 1694| m1694_3(int) = Store[x] : &:r1694_1, r1694_2 -# 1695| v1695_1(void) = NoOp : -# 1695| v1695_2(void) = NoOp : -# 1696| r1696_1(glval) = VariableAddress[#return] : -# 1696| r1696_2(glval) = VariableAddress[x] : -# 1696| r1696_3(int) = Load[x] : &:r1696_2, m1694_3 -# 1696| m1696_4(int) = Store[#return] : &:r1696_1, r1696_3 -# 1693| r1693_5(glval) = VariableAddress[#return] : -# 1693| v1693_6(void) = ReturnValue : &:r1693_5, m1696_4 -# 1693| v1693_7(void) = AliasedUse : m1693_3 -# 1693| v1693_8(void) = ExitFunction : +# 1695| int goto_on_same_line() +# 1695| Block 0 +# 1695| v1695_1(void) = EnterFunction : +# 1695| m1695_2(unknown) = AliasedDefinition : +# 1695| m1695_3(unknown) = InitializeNonLocal : +# 1695| m1695_4(unknown) = Chi : total:m1695_2, partial:m1695_3 +# 1696| r1696_1(glval) = VariableAddress[x] : +# 1696| r1696_2(int) = Constant[42] : +# 1696| m1696_3(int) = Store[x] : &:r1696_1, r1696_2 +# 1697| v1697_1(void) = NoOp : +# 1697| v1697_2(void) = NoOp : +# 1698| r1698_1(glval) = VariableAddress[#return] : +# 1698| r1698_2(glval) = VariableAddress[x] : +# 1698| r1698_3(int) = Load[x] : &:r1698_2, m1696_3 +# 1698| m1698_4(int) = Store[#return] : &:r1698_1, r1698_3 +# 1695| r1695_5(glval) = VariableAddress[#return] : +# 1695| v1695_6(void) = ReturnValue : &:r1695_5, m1698_4 +# 1695| v1695_7(void) = AliasedUse : m1695_3 +# 1695| v1695_8(void) = ExitFunction : -# 1701| void TrivialLambdaClass::m() const -# 1701| Block 0 -# 1701| v1701_1(void) = EnterFunction : -# 1701| m1701_2(unknown) = AliasedDefinition : -# 1701| m1701_3(unknown) = InitializeNonLocal : -# 1701| m1701_4(unknown) = Chi : total:m1701_2, partial:m1701_3 -# 1701| r1701_5(glval) = VariableAddress[#this] : -# 1701| m1701_6(glval) = InitializeParameter[#this] : &:r1701_5 -# 1701| r1701_7(glval) = Load[#this] : &:r1701_5, m1701_6 -# 1701| m1701_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1701_7 -# 1702| r1702_1(glval) = VariableAddress[l_m_outer] : -# 1702| r1702_2(glval) = VariableAddress[#temp1702:25] : -# 1702| m1702_3(decltype([...](...){...})) = Uninitialized[#temp1702:25] : &:r1702_2 -# 1702| r1702_4(glval) = FieldAddress[(captured this)] : r1702_2 -# 1702| r1702_5(glval) = VariableAddress[#this] : -# 1702| r1702_6(TrivialLambdaClass *) = Load[#this] : &:r1702_5, m1701_6 -# 1702| r1702_7(TrivialLambdaClass) = Load[?] : &:r1702_6, ~m1701_8 -# 1702| m1702_8(TrivialLambdaClass) = Store[?] : &:r1702_4, r1702_7 -# 1702| r1702_9(decltype([...](...){...})) = Load[#temp1702:25] : &:r1702_2, ~m1702_8 -# 1702| m1702_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1702_1, r1702_9 -# 1709| v1709_1(void) = NoOp : -# 1701| v1701_9(void) = ReturnIndirection[#this] : &:r1701_7, m1701_8 -# 1701| v1701_10(void) = ReturnVoid : -# 1701| v1701_11(void) = AliasedUse : m1701_3 -# 1701| v1701_12(void) = ExitFunction : +# 1703| void TrivialLambdaClass::m() const +# 1703| Block 0 +# 1703| v1703_1(void) = EnterFunction : +# 1703| m1703_2(unknown) = AliasedDefinition : +# 1703| m1703_3(unknown) = InitializeNonLocal : +# 1703| m1703_4(unknown) = Chi : total:m1703_2, partial:m1703_3 +# 1703| r1703_5(glval) = VariableAddress[#this] : +# 1703| m1703_6(glval) = InitializeParameter[#this] : &:r1703_5 +# 1703| r1703_7(glval) = Load[#this] : &:r1703_5, m1703_6 +# 1703| m1703_8(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_7 +# 1704| r1704_1(glval) = VariableAddress[l_m_outer] : +# 1704| r1704_2(glval) = VariableAddress[#temp1704:25] : +# 1704| m1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 +# 1704| r1704_4(glval) = FieldAddress[(captured this)] : r1704_2 +# 1704| r1704_5(glval) = VariableAddress[#this] : +# 1704| r1704_6(TrivialLambdaClass *) = Load[#this] : &:r1704_5, m1703_6 +# 1704| r1704_7(TrivialLambdaClass) = Load[?] : &:r1704_6, ~m1703_8 +# 1704| m1704_8(TrivialLambdaClass) = Store[?] : &:r1704_4, r1704_7 +# 1704| r1704_9(decltype([...](...){...})) = Load[#temp1704:25] : &:r1704_2, ~m1704_8 +# 1704| m1704_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1704_1, r1704_9 +# 1711| v1711_1(void) = NoOp : +# 1703| v1703_9(void) = ReturnIndirection[#this] : &:r1703_7, m1703_8 +# 1703| v1703_10(void) = ReturnVoid : +# 1703| v1703_11(void) = AliasedUse : m1703_3 +# 1703| v1703_12(void) = ExitFunction : -# 1702| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const -# 1702| Block 0 -# 1702| v1702_1(void) = EnterFunction : -# 1702| m1702_2(unknown) = AliasedDefinition : -# 1702| m1702_3(unknown) = InitializeNonLocal : -# 1702| m1702_4(unknown) = Chi : total:m1702_2, partial:m1702_3 -# 1702| r1702_5(glval) = VariableAddress[#this] : -# 1702| m1702_6(glval) = InitializeParameter[#this] : &:r1702_5 -# 1702| r1702_7(glval) = Load[#this] : &:r1702_5, m1702_6 -# 1702| m1702_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1702_7 -# 1703| r1703_1(glval) = VariableAddress[#this] : -# 1703| r1703_2(lambda [] type at line 1702, col. 26 *) = Load[#this] : &:r1703_1, m1702_6 -# 1703| r1703_3(glval) = FieldAddress[(captured this)] : r1703_2 -# 1703| r1703_4(TrivialLambdaClass *) = CopyValue : r1703_3 -# 1703| r1703_5(glval) = FunctionAddress[m] : -# 1703| v1703_6(void) = Call[m] : func:r1703_5, this:r1703_4 -# 1703| m1703_7(unknown) = ^CallSideEffect : ~m1702_4 -# 1703| m1703_8(unknown) = Chi : total:m1702_4, partial:m1703_7 -# 1703| v1703_9(void) = ^IndirectReadSideEffect[-1] : &:r1703_4, ~m1702_8 -# 1705| r1705_1(glval) = VariableAddress[l_m_inner] : -# 1705| r1705_2(glval) = VariableAddress[#temp1705:29] : -# 1705| m1705_3(decltype([...](...){...})) = Uninitialized[#temp1705:29] : &:r1705_2 -# 1705| r1705_4(glval) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_5(glval) = VariableAddress[#this] : -# 1705| r1705_6(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1705_5, m1702_6 -# 1705| r1705_7(glval) = FieldAddress[(captured this)] : r1705_6 -# 1705| r1705_8(TrivialLambdaClass) = Load[?] : &:r1705_7, ~m1702_8 -# 1705| m1705_9(TrivialLambdaClass) = Store[?] : &:r1705_4, r1705_8 -# 1705| r1705_10(decltype([...](...){...})) = Load[#temp1705:29] : &:r1705_2, ~m1705_9 -# 1705| m1705_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1705_1, r1705_10 -# 1708| v1708_1(void) = NoOp : -# 1702| v1702_9(void) = ReturnIndirection[#this] : &:r1702_7, m1702_8 -# 1702| v1702_10(void) = ReturnVoid : -# 1702| v1702_11(void) = AliasedUse : ~m1703_8 -# 1702| v1702_12(void) = ExitFunction : +# 1704| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const +# 1704| Block 0 +# 1704| v1704_1(void) = EnterFunction : +# 1704| m1704_2(unknown) = AliasedDefinition : +# 1704| m1704_3(unknown) = InitializeNonLocal : +# 1704| m1704_4(unknown) = Chi : total:m1704_2, partial:m1704_3 +# 1704| r1704_5(glval) = VariableAddress[#this] : +# 1704| m1704_6(glval) = InitializeParameter[#this] : &:r1704_5 +# 1704| r1704_7(glval) = Load[#this] : &:r1704_5, m1704_6 +# 1704| m1704_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_7 +# 1705| r1705_1(glval) = VariableAddress[#this] : +# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, m1704_6 +# 1705| r1705_3(glval) = FieldAddress[(captured this)] : r1705_2 +# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 +# 1705| r1705_5(glval) = FunctionAddress[m] : +# 1705| v1705_6(void) = Call[m] : func:r1705_5, this:r1705_4 +# 1705| m1705_7(unknown) = ^CallSideEffect : ~m1704_4 +# 1705| m1705_8(unknown) = Chi : total:m1704_4, partial:m1705_7 +# 1705| v1705_9(void) = ^IndirectReadSideEffect[-1] : &:r1705_4, ~m1704_8 +# 1707| r1707_1(glval) = VariableAddress[l_m_inner] : +# 1707| r1707_2(glval) = VariableAddress[#temp1707:29] : +# 1707| m1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 +# 1707| r1707_4(glval) = FieldAddress[(captured this)] : r1707_2 +# 1707| r1707_5(glval) = VariableAddress[#this] : +# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, m1704_6 +# 1707| r1707_7(glval) = FieldAddress[(captured this)] : r1707_6 +# 1707| r1707_8(TrivialLambdaClass) = Load[?] : &:r1707_7, ~m1704_8 +# 1707| m1707_9(TrivialLambdaClass) = Store[?] : &:r1707_4, r1707_8 +# 1707| r1707_10(decltype([...](...){...})) = Load[#temp1707:29] : &:r1707_2, ~m1707_9 +# 1707| m1707_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1707_1, r1707_10 +# 1710| v1710_1(void) = NoOp : +# 1704| v1704_9(void) = ReturnIndirection[#this] : &:r1704_7, m1704_8 +# 1704| v1704_10(void) = ReturnVoid : +# 1704| v1704_11(void) = AliasedUse : ~m1705_8 +# 1704| v1704_12(void) = ExitFunction : -# 1705| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator()() const -# 1705| Block 0 -# 1705| v1705_1(void) = EnterFunction : -# 1705| m1705_2(unknown) = AliasedDefinition : -# 1705| m1705_3(unknown) = InitializeNonLocal : -# 1705| m1705_4(unknown) = Chi : total:m1705_2, partial:m1705_3 -# 1705| r1705_5(glval) = VariableAddress[#this] : -# 1705| m1705_6(glval) = InitializeParameter[#this] : &:r1705_5 -# 1705| r1705_7(glval) = Load[#this] : &:r1705_5, m1705_6 -# 1705| m1705_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1705_7 -# 1706| r1706_1(glval) = VariableAddress[#this] : -# 1706| r1706_2(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1706_1, m1705_6 -# 1706| r1706_3(glval) = FieldAddress[(captured this)] : r1706_2 -# 1706| r1706_4(TrivialLambdaClass *) = CopyValue : r1706_3 -# 1706| r1706_5(glval) = FunctionAddress[m] : -# 1706| v1706_6(void) = Call[m] : func:r1706_5, this:r1706_4 -# 1706| m1706_7(unknown) = ^CallSideEffect : ~m1705_4 -# 1706| m1706_8(unknown) = Chi : total:m1705_4, partial:m1706_7 -# 1706| v1706_9(void) = ^IndirectReadSideEffect[-1] : &:r1706_4, ~m1705_8 -# 1707| v1707_1(void) = NoOp : -# 1705| v1705_9(void) = ReturnIndirection[#this] : &:r1705_7, m1705_8 -# 1705| v1705_10(void) = ReturnVoid : -# 1705| v1705_11(void) = AliasedUse : ~m1706_8 -# 1705| v1705_12(void) = ExitFunction : +# 1707| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const +# 1707| Block 0 +# 1707| v1707_1(void) = EnterFunction : +# 1707| m1707_2(unknown) = AliasedDefinition : +# 1707| m1707_3(unknown) = InitializeNonLocal : +# 1707| m1707_4(unknown) = Chi : total:m1707_2, partial:m1707_3 +# 1707| r1707_5(glval) = VariableAddress[#this] : +# 1707| m1707_6(glval) = InitializeParameter[#this] : &:r1707_5 +# 1707| r1707_7(glval) = Load[#this] : &:r1707_5, m1707_6 +# 1707| m1707_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_7 +# 1708| r1708_1(glval) = VariableAddress[#this] : +# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, m1707_6 +# 1708| r1708_3(glval) = FieldAddress[(captured this)] : r1708_2 +# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 +# 1708| r1708_5(glval) = FunctionAddress[m] : +# 1708| v1708_6(void) = Call[m] : func:r1708_5, this:r1708_4 +# 1708| m1708_7(unknown) = ^CallSideEffect : ~m1707_4 +# 1708| m1708_8(unknown) = Chi : total:m1707_4, partial:m1708_7 +# 1708| v1708_9(void) = ^IndirectReadSideEffect[-1] : &:r1708_4, ~m1707_8 +# 1709| v1709_1(void) = NoOp : +# 1707| v1707_9(void) = ReturnIndirection[#this] : &:r1707_7, m1707_8 +# 1707| v1707_10(void) = ReturnVoid : +# 1707| v1707_11(void) = AliasedUse : ~m1708_8 +# 1707| v1707_12(void) = ExitFunction : -# 1712| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1712| Block 0 -# 1712| v1712_1(void) = EnterFunction : -# 1712| m1712_2(unknown) = AliasedDefinition : -# 1712| m1712_3(unknown) = InitializeNonLocal : -# 1712| m1712_4(unknown) = Chi : total:m1712_2, partial:m1712_3 -# 1712| r1712_5(glval) = VariableAddress[p1] : -# 1712| m1712_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1712_5 -# 1712| r1712_7(glval) = VariableAddress[p2] : -# 1712| m1712_8(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1712_7 -# 1712| r1712_9(TrivialLambdaClass &) = Load[p2] : &:r1712_7, m1712_8 -# 1712| m1712_10(unknown) = InitializeIndirection[p2] : &:r1712_9 -# 1712| r1712_11(glval) = VariableAddress[p3] : -# 1712| m1712_12(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1712_11 -# 1712| r1712_13(TrivialLambdaClass &&) = Load[p3] : &:r1712_11, m1712_12 -# 1712| m1712_14(unknown) = InitializeIndirection[p3] : &:r1712_13 -# 1713| r1713_1(glval) = VariableAddress[l1] : -# 1713| m1713_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1713_1 -# 1714| r1714_1(glval) = VariableAddress[l2] : -# 1714| r1714_2(glval) = VariableAddress[#temp1714:36] : -# 1714| r1714_3(TrivialLambdaClass) = Constant[0] : -# 1714| m1714_4(TrivialLambdaClass) = Store[#temp1714:36] : &:r1714_2, r1714_3 -# 1714| r1714_5(glval) = Convert : r1714_2 -# 1714| r1714_6(TrivialLambdaClass &) = CopyValue : r1714_5 -# 1714| m1714_7(TrivialLambdaClass &) = Store[l2] : &:r1714_1, r1714_6 -# 1716| r1716_1(glval) = VariableAddress[l_outer1] : -# 1716| r1716_2(glval) = VariableAddress[#temp1716:20] : -# 1716| m1716_3(decltype([...](...){...})) = Uninitialized[#temp1716:20] : &:r1716_2 -# 1716| r1716_4(glval) = FieldAddress[p1] : r1716_2 -# 1716| r1716_5(glval) = VariableAddress[p1] : -# 1716| r1716_6(TrivialLambdaClass) = Load[p1] : &:r1716_5, m1712_6 -# 1716| m1716_7(TrivialLambdaClass) = Store[?] : &:r1716_4, r1716_6 -# 1716| m1716_8(decltype([...](...){...})) = Chi : total:m1716_3, partial:m1716_7 -# 1716| r1716_9(glval) = FieldAddress[p2] : r1716_2 -# 1716| r1716_10(glval) = VariableAddress[p2] : -# 1716| r1716_11(TrivialLambdaClass &) = Load[p2] : &:r1716_10, m1712_8 -#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1716_11, ~m1712_10 -#-----| m0_2(TrivialLambdaClass) = Store[?] : &:r1716_9, r0_1 -#-----| m0_3(decltype([...](...){...})) = Chi : total:m1716_8, partial:m0_2 -# 1716| r1716_12(glval) = FieldAddress[p3] : r1716_2 -# 1716| r1716_13(glval) = VariableAddress[p3] : -# 1716| r1716_14(TrivialLambdaClass &&) = Load[p3] : &:r1716_13, m1712_12 -#-----| r0_4(TrivialLambdaClass) = Load[?] : &:r1716_14, ~m1712_14 -#-----| m0_5(TrivialLambdaClass) = Store[?] : &:r1716_12, r0_4 +# 1714| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1714| Block 0 +# 1714| v1714_1(void) = EnterFunction : +# 1714| m1714_2(unknown) = AliasedDefinition : +# 1714| m1714_3(unknown) = InitializeNonLocal : +# 1714| m1714_4(unknown) = Chi : total:m1714_2, partial:m1714_3 +# 1714| r1714_5(glval) = VariableAddress[p1] : +# 1714| m1714_6(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_5 +# 1714| r1714_7(glval) = VariableAddress[p2] : +# 1714| m1714_8(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1714_7 +# 1714| r1714_9(TrivialLambdaClass &) = Load[p2] : &:r1714_7, m1714_8 +# 1714| m1714_10(unknown) = InitializeIndirection[p2] : &:r1714_9 +# 1714| r1714_11(glval) = VariableAddress[p3] : +# 1714| m1714_12(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1714_11 +# 1714| r1714_13(TrivialLambdaClass &&) = Load[p3] : &:r1714_11, m1714_12 +# 1714| m1714_14(unknown) = InitializeIndirection[p3] : &:r1714_13 +# 1715| r1715_1(glval) = VariableAddress[l1] : +# 1715| m1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 +# 1716| r1716_1(glval) = VariableAddress[l2] : +# 1716| r1716_2(glval) = VariableAddress[#temp1716:36] : +# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : +# 1716| m1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 +# 1716| r1716_5(glval) = Convert : r1716_2 +# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 +# 1716| m1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 +# 1718| r1718_1(glval) = VariableAddress[l_outer1] : +# 1718| r1718_2(glval) = VariableAddress[#temp1718:20] : +# 1718| m1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 +# 1718| r1718_4(glval) = FieldAddress[p1] : r1718_2 +# 1718| r1718_5(glval) = VariableAddress[p1] : +# 1718| r1718_6(TrivialLambdaClass) = Load[p1] : &:r1718_5, m1714_6 +# 1718| m1718_7(TrivialLambdaClass) = Store[?] : &:r1718_4, r1718_6 +# 1718| m1718_8(decltype([...](...){...})) = Chi : total:m1718_3, partial:m1718_7 +# 1718| r1718_9(glval) = FieldAddress[p2] : r1718_2 +# 1718| r1718_10(glval) = VariableAddress[p2] : +# 1718| r1718_11(TrivialLambdaClass &) = Load[p2] : &:r1718_10, m1714_8 +#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1718_11, ~m1714_10 +#-----| m0_2(TrivialLambdaClass) = Store[?] : &:r1718_9, r0_1 +#-----| m0_3(decltype([...](...){...})) = Chi : total:m1718_8, partial:m0_2 +# 1718| r1718_12(glval) = FieldAddress[p3] : r1718_2 +# 1718| r1718_13(glval) = VariableAddress[p3] : +# 1718| r1718_14(TrivialLambdaClass &&) = Load[p3] : &:r1718_13, m1714_12 +#-----| r0_4(TrivialLambdaClass) = Load[?] : &:r1718_14, ~m1714_14 +#-----| m0_5(TrivialLambdaClass) = Store[?] : &:r1718_12, r0_4 #-----| m0_6(decltype([...](...){...})) = Chi : total:m0_3, partial:m0_5 -# 1716| r1716_15(glval) = FieldAddress[l1] : r1716_2 -# 1716| r1716_16(glval) = VariableAddress[l1] : -# 1716| r1716_17(TrivialLambdaClass) = Load[l1] : &:r1716_16, m1713_2 -# 1716| m1716_18(TrivialLambdaClass) = Store[?] : &:r1716_15, r1716_17 -# 1716| m1716_19(decltype([...](...){...})) = Chi : total:m0_6, partial:m1716_18 -# 1716| r1716_20(glval) = FieldAddress[l2] : r1716_2 -# 1716| r1716_21(glval) = VariableAddress[l2] : -# 1716| r1716_22(TrivialLambdaClass &) = Load[l2] : &:r1716_21, m1714_7 -#-----| r0_7(TrivialLambdaClass) = Load[?] : &:r1716_22, m1714_4 -#-----| m0_8(TrivialLambdaClass) = Store[?] : &:r1716_20, r0_7 -#-----| m0_9(decltype([...](...){...})) = Chi : total:m1716_19, partial:m0_8 -# 1716| r1716_23(decltype([...](...){...})) = Load[#temp1716:20] : &:r1716_2, m0_9 -# 1716| m1716_24(decltype([...](...){...})) = Store[l_outer1] : &:r1716_1, r1716_23 -# 1719| v1719_1(void) = NoOp : -# 1712| v1712_15(void) = ReturnIndirection[p2] : &:r1712_9, m1712_10 -# 1712| v1712_16(void) = ReturnIndirection[p3] : &:r1712_13, m1712_14 -# 1712| v1712_17(void) = ReturnVoid : -# 1712| v1712_18(void) = AliasedUse : m1712_3 -# 1712| v1712_19(void) = ExitFunction : +# 1718| r1718_15(glval) = FieldAddress[l1] : r1718_2 +# 1718| r1718_16(glval) = VariableAddress[l1] : +# 1718| r1718_17(TrivialLambdaClass) = Load[l1] : &:r1718_16, m1715_2 +# 1718| m1718_18(TrivialLambdaClass) = Store[?] : &:r1718_15, r1718_17 +# 1718| m1718_19(decltype([...](...){...})) = Chi : total:m0_6, partial:m1718_18 +# 1718| r1718_20(glval) = FieldAddress[l2] : r1718_2 +# 1718| r1718_21(glval) = VariableAddress[l2] : +# 1718| r1718_22(TrivialLambdaClass &) = Load[l2] : &:r1718_21, m1716_7 +#-----| r0_7(TrivialLambdaClass) = Load[?] : &:r1718_22, m1716_4 +#-----| m0_8(TrivialLambdaClass) = Store[?] : &:r1718_20, r0_7 +#-----| m0_9(decltype([...](...){...})) = Chi : total:m1718_19, partial:m0_8 +# 1718| r1718_23(decltype([...](...){...})) = Load[#temp1718:20] : &:r1718_2, m0_9 +# 1718| m1718_24(decltype([...](...){...})) = Store[l_outer1] : &:r1718_1, r1718_23 +# 1721| v1721_1(void) = NoOp : +# 1714| v1714_15(void) = ReturnIndirection[p2] : &:r1714_9, m1714_10 +# 1714| v1714_16(void) = ReturnIndirection[p3] : &:r1714_13, m1714_14 +# 1714| v1714_17(void) = ReturnVoid : +# 1714| v1714_18(void) = AliasedUse : m1714_3 +# 1714| v1714_19(void) = ExitFunction : -# 1716| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const -# 1716| Block 0 -# 1716| v1716_1(void) = EnterFunction : -# 1716| m1716_2(unknown) = AliasedDefinition : -# 1716| m1716_3(unknown) = InitializeNonLocal : -# 1716| m1716_4(unknown) = Chi : total:m1716_2, partial:m1716_3 -# 1716| r1716_5(glval) = VariableAddress[#this] : -# 1716| m1716_6(glval) = InitializeParameter[#this] : &:r1716_5 -# 1716| r1716_7(glval) = Load[#this] : &:r1716_5, m1716_6 -# 1716| m1716_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1716_7 -# 1717| r1717_1(glval) = VariableAddress[l_inner1] : -# 1717| r1717_2(glval) = VariableAddress[#temp1717:24] : -# 1717| m1717_3(decltype([...](...){...})) = Uninitialized[#temp1717:24] : &:r1717_2 -# 1717| r1717_4(glval) = FieldAddress[p1] : r1717_2 -# 1717| r1717_5(glval) = VariableAddress[#this] : -# 1717| r1717_6(lambda [] type at line 1717, col. 25 *) = Load[#this] : &:r1717_5, m1716_6 -# 1717| r1717_7(glval) = FieldAddress[p1] : r1717_6 -# 1717| r1717_8(TrivialLambdaClass) = Load[?] : &:r1717_7, ~m1716_8 -# 1717| m1717_9(TrivialLambdaClass) = Store[?] : &:r1717_4, r1717_8 -# 1717| r1717_10(decltype([...](...){...})) = Load[#temp1717:24] : &:r1717_2, ~m1717_9 -# 1717| m1717_11(decltype([...](...){...})) = Store[l_inner1] : &:r1717_1, r1717_10 -# 1718| v1718_1(void) = NoOp : -# 1716| v1716_9(void) = ReturnIndirection[#this] : &:r1716_7, m1716_8 -# 1716| v1716_10(void) = ReturnVoid : -# 1716| v1716_11(void) = AliasedUse : m1716_3 -# 1716| v1716_12(void) = ExitFunction : +# 1718| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const +# 1718| Block 0 +# 1718| v1718_1(void) = EnterFunction : +# 1718| m1718_2(unknown) = AliasedDefinition : +# 1718| m1718_3(unknown) = InitializeNonLocal : +# 1718| m1718_4(unknown) = Chi : total:m1718_2, partial:m1718_3 +# 1718| r1718_5(glval) = VariableAddress[#this] : +# 1718| m1718_6(glval) = InitializeParameter[#this] : &:r1718_5 +# 1718| r1718_7(glval) = Load[#this] : &:r1718_5, m1718_6 +# 1718| m1718_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_7 +# 1719| r1719_1(glval) = VariableAddress[l_inner1] : +# 1719| r1719_2(glval) = VariableAddress[#temp1719:24] : +# 1719| m1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 +# 1719| r1719_4(glval) = FieldAddress[p1] : r1719_2 +# 1719| r1719_5(glval) = VariableAddress[#this] : +# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, m1718_6 +# 1719| r1719_7(glval) = FieldAddress[p1] : r1719_6 +# 1719| r1719_8(TrivialLambdaClass) = Load[?] : &:r1719_7, ~m1718_8 +# 1719| m1719_9(TrivialLambdaClass) = Store[?] : &:r1719_4, r1719_8 +# 1719| r1719_10(decltype([...](...){...})) = Load[#temp1719:24] : &:r1719_2, ~m1719_9 +# 1719| m1719_11(decltype([...](...){...})) = Store[l_inner1] : &:r1719_1, r1719_10 +# 1720| v1720_1(void) = NoOp : +# 1718| v1718_9(void) = ReturnIndirection[#this] : &:r1718_7, m1718_8 +# 1718| v1718_10(void) = ReturnVoid : +# 1718| v1718_11(void) = AliasedUse : m1718_3 +# 1718| v1718_12(void) = ExitFunction : -# 1717| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator()() const -# 1717| Block 0 -# 1717| v1717_1(void) = EnterFunction : -# 1717| m1717_2(unknown) = AliasedDefinition : -# 1717| m1717_3(unknown) = InitializeNonLocal : -# 1717| m1717_4(unknown) = Chi : total:m1717_2, partial:m1717_3 -# 1717| r1717_5(glval) = VariableAddress[#this] : -# 1717| m1717_6(glval) = InitializeParameter[#this] : &:r1717_5 -# 1717| r1717_7(glval) = Load[#this] : &:r1717_5, m1717_6 -# 1717| m1717_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1717_7 -# 1717| v1717_9(void) = NoOp : -# 1717| v1717_10(void) = ReturnIndirection[#this] : &:r1717_7, m1717_8 -# 1717| v1717_11(void) = ReturnVoid : -# 1717| v1717_12(void) = AliasedUse : m1717_3 -# 1717| v1717_13(void) = ExitFunction : +# 1719| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const +# 1719| Block 0 +# 1719| v1719_1(void) = EnterFunction : +# 1719| m1719_2(unknown) = AliasedDefinition : +# 1719| m1719_3(unknown) = InitializeNonLocal : +# 1719| m1719_4(unknown) = Chi : total:m1719_2, partial:m1719_3 +# 1719| r1719_5(glval) = VariableAddress[#this] : +# 1719| m1719_6(glval) = InitializeParameter[#this] : &:r1719_5 +# 1719| r1719_7(glval) = Load[#this] : &:r1719_5, m1719_6 +# 1719| m1719_8(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1719_7 +# 1719| v1719_9(void) = NoOp : +# 1719| v1719_10(void) = ReturnIndirection[#this] : &:r1719_7, m1719_8 +# 1719| v1719_11(void) = ReturnVoid : +# 1719| v1719_12(void) = AliasedUse : m1719_3 +# 1719| v1719_13(void) = ExitFunction : -# 1724| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1724| Block 0 -# 1724| v1724_1(void) = EnterFunction : -# 1724| m1724_2(unknown) = AliasedDefinition : -# 1724| m1724_3(unknown) = InitializeNonLocal : -# 1724| m1724_4(unknown) = Chi : total:m1724_2, partial:m1724_3 -# 1724| r1724_5(glval) = VariableAddress[#this] : -# 1724| m1724_6(glval) = InitializeParameter[#this] : &:r1724_5 -# 1724| r1724_7(glval) = Load[#this] : &:r1724_5, m1724_6 -# 1724| m1724_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1724_7 -# 1724| v1724_9(void) = NoOp : -# 1724| v1724_10(void) = ReturnIndirection[#this] : &:r1724_7, m1724_8 -# 1724| v1724_11(void) = ReturnVoid : -# 1724| v1724_12(void) = AliasedUse : m1724_3 -# 1724| v1724_13(void) = ExitFunction : +# 1726| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1726| Block 0 +# 1726| v1726_1(void) = EnterFunction : +# 1726| m1726_2(unknown) = AliasedDefinition : +# 1726| m1726_3(unknown) = InitializeNonLocal : +# 1726| m1726_4(unknown) = Chi : total:m1726_2, partial:m1726_3 +# 1726| r1726_5(glval) = VariableAddress[#this] : +# 1726| m1726_6(glval) = InitializeParameter[#this] : &:r1726_5 +# 1726| r1726_7(glval) = Load[#this] : &:r1726_5, m1726_6 +# 1726| m1726_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1726_7 +# 1726| v1726_9(void) = NoOp : +# 1726| v1726_10(void) = ReturnIndirection[#this] : &:r1726_7, m1726_8 +# 1726| v1726_11(void) = ReturnVoid : +# 1726| v1726_12(void) = AliasedUse : m1726_3 +# 1726| v1726_13(void) = ExitFunction : -# 1725| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1725| Block 0 -# 1725| v1725_1(void) = EnterFunction : -# 1725| m1725_2(unknown) = AliasedDefinition : -# 1725| m1725_3(unknown) = InitializeNonLocal : -# 1725| m1725_4(unknown) = Chi : total:m1725_2, partial:m1725_3 -# 1725| r1725_5(glval) = VariableAddress[#this] : -# 1725| m1725_6(glval) = InitializeParameter[#this] : &:r1725_5 -# 1725| r1725_7(glval) = Load[#this] : &:r1725_5, m1725_6 -# 1725| m1725_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1725_7 -# 1725| r1725_9(glval) = VariableAddress[c] : -# 1725| m1725_10(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1725_9 -# 1725| r1725_11(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1725_9, m1725_10 -# 1725| m1725_12(unknown) = InitializeIndirection[c] : &:r1725_11 -# 1726| r1726_1(glval) = VariableAddress[c] : -# 1726| r1726_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1726_1, m1725_10 -# 1726| r1726_3(glval) = CopyValue : r1726_2 -# 1726| r1726_4(glval) = FieldAddress[x] : r1726_3 -# 1726| r1726_5(int) = Load[?] : &:r1726_4, ~m1725_12 -# 1726| r1726_6(glval) = VariableAddress[#this] : -# 1726| r1726_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1726_6, m1725_6 -# 1726| r1726_8(glval) = FieldAddress[x] : r1726_7 -# 1726| m1726_9(int) = Store[?] : &:r1726_8, r1726_5 -# 1726| m1726_10(unknown) = Chi : total:m1725_8, partial:m1726_9 -# 1727| v1727_1(void) = NoOp : -# 1725| v1725_13(void) = ReturnIndirection[#this] : &:r1725_7, m1726_10 -# 1725| v1725_14(void) = ReturnIndirection[c] : &:r1725_11, m1725_12 -# 1725| v1725_15(void) = ReturnVoid : -# 1725| v1725_16(void) = AliasedUse : m1725_3 -# 1725| v1725_17(void) = ExitFunction : +# 1727| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1727| Block 0 +# 1727| v1727_1(void) = EnterFunction : +# 1727| m1727_2(unknown) = AliasedDefinition : +# 1727| m1727_3(unknown) = InitializeNonLocal : +# 1727| m1727_4(unknown) = Chi : total:m1727_2, partial:m1727_3 +# 1727| r1727_5(glval) = VariableAddress[#this] : +# 1727| m1727_6(glval) = InitializeParameter[#this] : &:r1727_5 +# 1727| r1727_7(glval) = Load[#this] : &:r1727_5, m1727_6 +# 1727| m1727_8(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_7 +# 1727| r1727_9(glval) = VariableAddress[c] : +# 1727| m1727_10(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1727_9 +# 1727| r1727_11(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1727_9, m1727_10 +# 1727| m1727_12(unknown) = InitializeIndirection[c] : &:r1727_11 +# 1728| r1728_1(glval) = VariableAddress[c] : +# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, m1727_10 +# 1728| r1728_3(glval) = CopyValue : r1728_2 +# 1728| r1728_4(glval) = FieldAddress[x] : r1728_3 +# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m1727_12 +# 1728| r1728_6(glval) = VariableAddress[#this] : +# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, m1727_6 +# 1728| r1728_8(glval) = FieldAddress[x] : r1728_7 +# 1728| m1728_9(int) = Store[?] : &:r1728_8, r1728_5 +# 1728| m1728_10(unknown) = Chi : total:m1727_8, partial:m1728_9 +# 1729| v1729_1(void) = NoOp : +# 1727| v1727_13(void) = ReturnIndirection[#this] : &:r1727_7, m1728_10 +# 1727| v1727_14(void) = ReturnIndirection[c] : &:r1727_11, m1727_12 +# 1727| v1727_15(void) = ReturnVoid : +# 1727| v1727_16(void) = AliasedUse : m1727_3 +# 1727| v1727_17(void) = ExitFunction : -# 1733| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1733| Block 0 -# 1733| v1733_1(void) = EnterFunction : -# 1733| m1733_2(unknown) = AliasedDefinition : -# 1733| m1733_3(unknown) = InitializeNonLocal : -# 1733| m1733_4(unknown) = Chi : total:m1733_2, partial:m1733_3 -# 1733| r1733_5(glval) = VariableAddress[#this] : -# 1733| m1733_6(glval) = InitializeParameter[#this] : &:r1733_5 -# 1733| r1733_7(glval) = Load[#this] : &:r1733_5, m1733_6 -# 1733| m1733_8(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1733_7 -# 1733| v1733_9(void) = NoOp : -# 1733| v1733_10(void) = ReturnIndirection[#this] : &:r1733_7, m1733_8 -# 1733| v1733_11(void) = ReturnVoid : -# 1733| v1733_12(void) = AliasedUse : m1733_3 -# 1733| v1733_13(void) = ExitFunction : +# 1735| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1735| Block 0 +# 1735| v1735_1(void) = EnterFunction : +# 1735| m1735_2(unknown) = AliasedDefinition : +# 1735| m1735_3(unknown) = InitializeNonLocal : +# 1735| m1735_4(unknown) = Chi : total:m1735_2, partial:m1735_3 +# 1735| r1735_5(glval) = VariableAddress[#this] : +# 1735| m1735_6(glval) = InitializeParameter[#this] : &:r1735_5 +# 1735| r1735_7(glval) = Load[#this] : &:r1735_5, m1735_6 +# 1735| m1735_8(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1735_7 +# 1735| v1735_9(void) = NoOp : +# 1735| v1735_10(void) = ReturnIndirection[#this] : &:r1735_7, m1735_8 +# 1735| v1735_11(void) = ReturnVoid : +# 1735| v1735_12(void) = AliasedUse : m1735_3 +# 1735| v1735_13(void) = ExitFunction : -# 1736| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1736| Block 0 -# 1736| v1736_1(void) = EnterFunction : -# 1736| m1736_2(unknown) = AliasedDefinition : -# 1736| m1736_3(unknown) = InitializeNonLocal : -# 1736| m1736_4(unknown) = Chi : total:m1736_2, partial:m1736_3 -# 1736| r1736_5(glval) = VariableAddress[#this] : -# 1736| m1736_6(glval) = InitializeParameter[#this] : &:r1736_5 -# 1736| r1736_7(glval) = Load[#this] : &:r1736_5, m1736_6 -# 1736| m1736_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1736_7 +# 1738| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| Block 0 +# 1738| v1738_1(void) = EnterFunction : +# 1738| m1738_2(unknown) = AliasedDefinition : +# 1738| m1738_3(unknown) = InitializeNonLocal : +# 1738| m1738_4(unknown) = Chi : total:m1738_2, partial:m1738_3 +# 1738| r1738_5(glval) = VariableAddress[#this] : +# 1738| m1738_6(glval) = InitializeParameter[#this] : &:r1738_5 +# 1738| r1738_7(glval) = Load[#this] : &:r1738_5, m1738_6 +# 1738| m1738_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1738_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1736| r1736_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1736_6 -# 1736| r1736_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1736| r1736_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1736| r1736_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1736_11, m0_2 -# 1736| r1736_13(glval) = CopyValue : r1736_12 -# 1736| r1736_14(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1736_13 -# 1736| r1736_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1736_14 -# 1736| v1736_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1736_10, this:r1736_9, 0:r1736_15 -# 1736| m1736_17(unknown) = ^CallSideEffect : ~m1736_4 -# 1736| m1736_18(unknown) = Chi : total:m1736_4, partial:m1736_17 -# 1736| v1736_19(void) = ^BufferReadSideEffect[0] : &:r1736_15, ~m0_4 -# 1736| m1736_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1736_9 -# 1736| m1736_21(unknown) = Chi : total:m1736_8, partial:m1736_20 -# 1736| v1736_22(void) = NoOp : -# 1736| v1736_23(void) = ReturnIndirection[#this] : &:r1736_7, m1736_21 +# 1738| r1738_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1738_6 +# 1738| r1738_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1738| r1738_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1738| r1738_12(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_11, m0_2 +# 1738| r1738_13(glval) = CopyValue : r1738_12 +# 1738| r1738_14(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1738_13 +# 1738| r1738_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1738_14 +# 1738| v1738_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1738_10, this:r1738_9, 0:r1738_15 +# 1738| m1738_17(unknown) = ^CallSideEffect : ~m1738_4 +# 1738| m1738_18(unknown) = Chi : total:m1738_4, partial:m1738_17 +# 1738| v1738_19(void) = ^BufferReadSideEffect[0] : &:r1738_15, ~m0_4 +# 1738| m1738_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1738_9 +# 1738| m1738_21(unknown) = Chi : total:m1738_8, partial:m1738_20 +# 1738| v1738_22(void) = NoOp : +# 1738| v1738_23(void) = ReturnIndirection[#this] : &:r1738_7, m1738_21 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1736| v1736_24(void) = ReturnVoid : -# 1736| v1736_25(void) = AliasedUse : ~m1736_18 -# 1736| v1736_26(void) = ExitFunction : +# 1738| v1738_24(void) = ReturnVoid : +# 1738| v1738_25(void) = AliasedUse : ~m1738_18 +# 1738| v1738_26(void) = ExitFunction : -# 1740| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1740| Block 0 -# 1740| v1740_1(void) = EnterFunction : -# 1740| m1740_2(unknown) = AliasedDefinition : -# 1740| m1740_3(unknown) = InitializeNonLocal : -# 1740| m1740_4(unknown) = Chi : total:m1740_2, partial:m1740_3 -# 1740| r1740_5(glval) = VariableAddress[#this] : -# 1740| m1740_6(glval) = InitializeParameter[#this] : &:r1740_5 -# 1740| r1740_7(glval) = Load[#this] : &:r1740_5, m1740_6 -# 1740| m1740_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1740_7 -# 1740| r1740_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1740_6 -# 1740| r1740_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1740| v1740_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1740_10, this:r1740_9 -# 1740| m1740_12(unknown) = ^CallSideEffect : ~m1740_4 -# 1740| m1740_13(unknown) = Chi : total:m1740_4, partial:m1740_12 -# 1740| m1740_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_9 -# 1740| m1740_15(unknown) = Chi : total:m1740_8, partial:m1740_14 -# 1740| r1740_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1740_6 -# 1740| r1740_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1740| v1740_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1740_17, this:r1740_16 -# 1740| m1740_19(unknown) = ^CallSideEffect : ~m1740_13 -# 1740| m1740_20(unknown) = Chi : total:m1740_13, partial:m1740_19 -# 1740| m1740_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_16 -# 1740| m1740_22(unknown) = Chi : total:m1740_15, partial:m1740_21 -# 1740| v1740_23(void) = NoOp : -# 1740| v1740_24(void) = ReturnIndirection[#this] : &:r1740_7, m1740_22 -# 1740| v1740_25(void) = ReturnVoid : -# 1740| v1740_26(void) = AliasedUse : ~m1740_20 -# 1740| v1740_27(void) = ExitFunction : +# 1742| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1742| Block 0 +# 1742| v1742_1(void) = EnterFunction : +# 1742| m1742_2(unknown) = AliasedDefinition : +# 1742| m1742_3(unknown) = InitializeNonLocal : +# 1742| m1742_4(unknown) = Chi : total:m1742_2, partial:m1742_3 +# 1742| r1742_5(glval) = VariableAddress[#this] : +# 1742| m1742_6(glval) = InitializeParameter[#this] : &:r1742_5 +# 1742| r1742_7(glval) = Load[#this] : &:r1742_5, m1742_6 +# 1742| m1742_8(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_7 +# 1742| r1742_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1742_6 +# 1742| r1742_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1742| v1742_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1742_10, this:r1742_9 +# 1742| m1742_12(unknown) = ^CallSideEffect : ~m1742_4 +# 1742| m1742_13(unknown) = Chi : total:m1742_4, partial:m1742_12 +# 1742| m1742_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_9 +# 1742| m1742_15(unknown) = Chi : total:m1742_8, partial:m1742_14 +# 1742| r1742_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1742_6 +# 1742| r1742_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1742| v1742_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1742_17, this:r1742_16 +# 1742| m1742_19(unknown) = ^CallSideEffect : ~m1742_13 +# 1742| m1742_20(unknown) = Chi : total:m1742_13, partial:m1742_19 +# 1742| m1742_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_16 +# 1742| m1742_22(unknown) = Chi : total:m1742_15, partial:m1742_21 +# 1742| v1742_23(void) = NoOp : +# 1742| v1742_24(void) = ReturnIndirection[#this] : &:r1742_7, m1742_22 +# 1742| v1742_25(void) = ReturnVoid : +# 1742| v1742_26(void) = AliasedUse : ~m1742_20 +# 1742| v1742_27(void) = ExitFunction : -# 1743| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1743| Block 0 -# 1743| v1743_1(void) = EnterFunction : -# 1743| m1743_2(unknown) = AliasedDefinition : -# 1743| m1743_3(unknown) = InitializeNonLocal : -# 1743| m1743_4(unknown) = Chi : total:m1743_2, partial:m1743_3 -# 1743| r1743_5(glval) = VariableAddress[#this] : -# 1743| m1743_6(glval) = InitializeParameter[#this] : &:r1743_5 -# 1743| r1743_7(glval) = Load[#this] : &:r1743_5, m1743_6 -# 1743| m1743_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1743_7 +# 1745| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1745| Block 0 +# 1745| v1745_1(void) = EnterFunction : +# 1745| m1745_2(unknown) = AliasedDefinition : +# 1745| m1745_3(unknown) = InitializeNonLocal : +# 1745| m1745_4(unknown) = Chi : total:m1745_2, partial:m1745_3 +# 1745| r1745_5(glval) = VariableAddress[#this] : +# 1745| m1745_6(glval) = InitializeParameter[#this] : &:r1745_5 +# 1745| r1745_7(glval) = Load[#this] : &:r1745_5, m1745_6 +# 1745| m1745_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1745_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1743| r1743_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1743_6 -# 1743| r1743_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1743| r1743_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1743| r1743_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1743_11, m0_2 -# 1743| r1743_13(glval) = CopyValue : r1743_12 -# 1743| r1743_14(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1743_13 -# 1743| r1743_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1743_14 -# 1743| v1743_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1743_10, this:r1743_9, 0:r1743_15 -# 1743| m1743_17(unknown) = ^CallSideEffect : ~m1743_4 -# 1743| m1743_18(unknown) = Chi : total:m1743_4, partial:m1743_17 -# 1743| v1743_19(void) = ^BufferReadSideEffect[0] : &:r1743_15, ~m0_4 -# 1743| m1743_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1743_9 -# 1743| m1743_21(unknown) = Chi : total:m1743_18, partial:m1743_20 -# 1743| v1743_22(void) = NoOp : -# 1743| v1743_23(void) = ReturnIndirection[#this] : &:r1743_7, m1743_8 +# 1745| r1745_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1745_6 +# 1745| r1745_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1745| r1745_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1745| r1745_12(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_11, m0_2 +# 1745| r1745_13(glval) = CopyValue : r1745_12 +# 1745| r1745_14(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1745_13 +# 1745| r1745_15(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1745_14 +# 1745| v1745_16(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1745_10, this:r1745_9, 0:r1745_15 +# 1745| m1745_17(unknown) = ^CallSideEffect : ~m1745_4 +# 1745| m1745_18(unknown) = Chi : total:m1745_4, partial:m1745_17 +# 1745| v1745_19(void) = ^BufferReadSideEffect[0] : &:r1745_15, ~m0_4 +# 1745| m1745_20(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1745_9 +# 1745| m1745_21(unknown) = Chi : total:m1745_18, partial:m1745_20 +# 1745| v1745_22(void) = NoOp : +# 1745| v1745_23(void) = ReturnIndirection[#this] : &:r1745_7, m1745_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1743| v1743_24(void) = ReturnVoid : -# 1743| v1743_25(void) = AliasedUse : ~m1743_21 -# 1743| v1743_26(void) = ExitFunction : +# 1745| v1745_24(void) = ReturnVoid : +# 1745| v1745_25(void) = AliasedUse : ~m1745_21 +# 1745| v1745_26(void) = ExitFunction : -# 1747| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1747| Block 0 -# 1747| v1747_1(void) = EnterFunction : -# 1747| m1747_2(unknown) = AliasedDefinition : -# 1747| m1747_3(unknown) = InitializeNonLocal : -# 1747| m1747_4(unknown) = Chi : total:m1747_2, partial:m1747_3 -# 1747| r1747_5(glval) = VariableAddress[#this] : -# 1747| m1747_6(glval) = InitializeParameter[#this] : &:r1747_5 -# 1747| r1747_7(glval) = Load[#this] : &:r1747_5, m1747_6 -# 1747| m1747_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1747_7 -# 1747| r1747_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1747_6 -# 1747| r1747_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1747| v1747_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1747_10, this:r1747_9 -# 1747| m1747_12(unknown) = ^CallSideEffect : ~m1747_4 -# 1747| m1747_13(unknown) = Chi : total:m1747_4, partial:m1747_12 -# 1747| m1747_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_9 -# 1747| m1747_15(unknown) = Chi : total:m1747_13, partial:m1747_14 -# 1747| r1747_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1747_6 -# 1747| r1747_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1747| v1747_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1747_17, this:r1747_16 -# 1747| m1747_19(unknown) = ^CallSideEffect : ~m1747_15 -# 1747| m1747_20(unknown) = Chi : total:m1747_15, partial:m1747_19 -# 1747| m1747_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_16 -# 1747| m1747_22(unknown) = Chi : total:m1747_20, partial:m1747_21 -# 1747| v1747_23(void) = NoOp : -# 1747| v1747_24(void) = ReturnIndirection[#this] : &:r1747_7, m1747_8 -# 1747| v1747_25(void) = ReturnVoid : -# 1747| v1747_26(void) = AliasedUse : ~m1747_22 -# 1747| v1747_27(void) = ExitFunction : +# 1749| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1749| Block 0 +# 1749| v1749_1(void) = EnterFunction : +# 1749| m1749_2(unknown) = AliasedDefinition : +# 1749| m1749_3(unknown) = InitializeNonLocal : +# 1749| m1749_4(unknown) = Chi : total:m1749_2, partial:m1749_3 +# 1749| r1749_5(glval) = VariableAddress[#this] : +# 1749| m1749_6(glval) = InitializeParameter[#this] : &:r1749_5 +# 1749| r1749_7(glval) = Load[#this] : &:r1749_5, m1749_6 +# 1749| m1749_8(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_7 +# 1749| r1749_9(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : m1749_6 +# 1749| r1749_10(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1749| v1749_11(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1749_10, this:r1749_9 +# 1749| m1749_12(unknown) = ^CallSideEffect : ~m1749_4 +# 1749| m1749_13(unknown) = Chi : total:m1749_4, partial:m1749_12 +# 1749| m1749_14(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_9 +# 1749| m1749_15(unknown) = Chi : total:m1749_13, partial:m1749_14 +# 1749| r1749_16(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : m1749_6 +# 1749| r1749_17(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1749| v1749_18(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1749_17, this:r1749_16 +# 1749| m1749_19(unknown) = ^CallSideEffect : ~m1749_15 +# 1749| m1749_20(unknown) = Chi : total:m1749_15, partial:m1749_19 +# 1749| m1749_21(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_16 +# 1749| m1749_22(unknown) = Chi : total:m1749_20, partial:m1749_21 +# 1749| v1749_23(void) = NoOp : +# 1749| v1749_24(void) = ReturnIndirection[#this] : &:r1749_7, m1749_8 +# 1749| v1749_25(void) = ReturnVoid : +# 1749| v1749_26(void) = AliasedUse : ~m1749_22 +# 1749| v1749_27(void) = ExitFunction : -# 1750| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1750| Block 0 -# 1750| v1750_1(void) = EnterFunction : -# 1750| m1750_2(unknown) = AliasedDefinition : -# 1750| m1750_3(unknown) = InitializeNonLocal : -# 1750| m1750_4(unknown) = Chi : total:m1750_2, partial:m1750_3 -# 1751| r1751_1(glval) = VariableAddress[x] : -# 1751| m1751_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1751_1 -# 1751| r1751_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1751_1, m1751_2 -# 1751| m1751_4(unknown) = InitializeIndirection[x] : &:r1751_3 -# 1752| r1752_1(glval) = VariableAddress[y] : -# 1752| m1752_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1752_1 -# 1752| r1752_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1752_1, m1752_2 -# 1752| m1752_4(unknown) = InitializeIndirection[y] : &:r1752_3 -# 1753| r1753_1(glval) = VariableAddress[cx] : -# 1753| m1753_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1753_1 -# 1753| r1753_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1753| r1753_4(glval) = VariableAddress[x] : -# 1753| r1753_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_4, m1751_2 -# 1753| r1753_6(glval) = CopyValue : r1753_5 -# 1753| r1753_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1753_6 -# 1753| v1753_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1753_3, this:r1753_1, 0:r1753_7 -# 1753| m1753_9(unknown) = ^CallSideEffect : ~m1750_4 -# 1753| m1753_10(unknown) = Chi : total:m1750_4, partial:m1753_9 -# 1753| v1753_11(void) = ^BufferReadSideEffect[0] : &:r1753_7, ~m1751_4 -# 1753| m1753_12(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1753_1 -# 1753| m1753_13(CopyConstructorTestNonVirtualClass) = Chi : total:m1753_2, partial:m1753_12 -# 1754| r1754_1(glval) = VariableAddress[cy] : -# 1754| m1754_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1754_1 -# 1754| r1754_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1754| r1754_4(glval) = VariableAddress[y] : -# 1754| r1754_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_4, m1752_2 -# 1754| r1754_6(glval) = CopyValue : r1754_5 -# 1754| r1754_7(CopyConstructorTestVirtualClass &) = CopyValue : r1754_6 -# 1754| v1754_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1754_3, this:r1754_1, 0:r1754_7 -# 1754| m1754_9(unknown) = ^CallSideEffect : ~m1753_10 -# 1754| m1754_10(unknown) = Chi : total:m1753_10, partial:m1754_9 -# 1754| v1754_11(void) = ^BufferReadSideEffect[0] : &:r1754_7, ~m1752_4 -# 1754| m1754_12(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1754_1 -# 1754| m1754_13(CopyConstructorTestVirtualClass) = Chi : total:m1754_2, partial:m1754_12 -# 1755| r1755_1(glval) = VariableAddress[#return] : -# 1755| m1755_2(int) = Uninitialized[#return] : &:r1755_1 -# 1751| v1751_5(void) = ReturnIndirection[x] : &:r1751_3, m1751_4 -# 1752| v1752_5(void) = ReturnIndirection[y] : &:r1752_3, m1752_4 -# 1750| r1750_5(glval) = VariableAddress[#return] : -# 1750| v1750_6(void) = ReturnValue : &:r1750_5, m1755_2 -# 1750| v1750_7(void) = AliasedUse : ~m1754_10 -# 1750| v1750_8(void) = ExitFunction : +# 1752| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1752| Block 0 +# 1752| v1752_1(void) = EnterFunction : +# 1752| m1752_2(unknown) = AliasedDefinition : +# 1752| m1752_3(unknown) = InitializeNonLocal : +# 1752| m1752_4(unknown) = Chi : total:m1752_2, partial:m1752_3 +# 1753| r1753_1(glval) = VariableAddress[x] : +# 1753| m1753_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1753_1 +# 1753| r1753_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_1, m1753_2 +# 1753| m1753_4(unknown) = InitializeIndirection[x] : &:r1753_3 +# 1754| r1754_1(glval) = VariableAddress[y] : +# 1754| m1754_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1754_1 +# 1754| r1754_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_1, m1754_2 +# 1754| m1754_4(unknown) = InitializeIndirection[y] : &:r1754_3 +# 1755| r1755_1(glval) = VariableAddress[cx] : +# 1755| m1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 +# 1755| r1755_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1755| r1755_4(glval) = VariableAddress[x] : +# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, m1753_2 +# 1755| r1755_6(glval) = CopyValue : r1755_5 +# 1755| r1755_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1755_6 +# 1755| v1755_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1755_3, this:r1755_1, 0:r1755_7 +# 1755| m1755_9(unknown) = ^CallSideEffect : ~m1752_4 +# 1755| m1755_10(unknown) = Chi : total:m1752_4, partial:m1755_9 +# 1755| v1755_11(void) = ^BufferReadSideEffect[0] : &:r1755_7, ~m1753_4 +# 1755| m1755_12(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1755_1 +# 1755| m1755_13(CopyConstructorTestNonVirtualClass) = Chi : total:m1755_2, partial:m1755_12 +# 1756| r1756_1(glval) = VariableAddress[cy] : +# 1756| m1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 +# 1756| r1756_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1756| r1756_4(glval) = VariableAddress[y] : +# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, m1754_2 +# 1756| r1756_6(glval) = CopyValue : r1756_5 +# 1756| r1756_7(CopyConstructorTestVirtualClass &) = CopyValue : r1756_6 +# 1756| v1756_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1756_3, this:r1756_1, 0:r1756_7 +# 1756| m1756_9(unknown) = ^CallSideEffect : ~m1755_10 +# 1756| m1756_10(unknown) = Chi : total:m1755_10, partial:m1756_9 +# 1756| v1756_11(void) = ^BufferReadSideEffect[0] : &:r1756_7, ~m1754_4 +# 1756| m1756_12(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 +# 1756| m1756_13(CopyConstructorTestVirtualClass) = Chi : total:m1756_2, partial:m1756_12 +# 1757| r1757_1(glval) = VariableAddress[#return] : +# 1757| m1757_2(int) = Uninitialized[#return] : &:r1757_1 +# 1753| v1753_5(void) = ReturnIndirection[x] : &:r1753_3, m1753_4 +# 1754| v1754_5(void) = ReturnIndirection[y] : &:r1754_3, m1754_4 +# 1752| r1752_5(glval) = VariableAddress[#return] : +# 1752| v1752_6(void) = ReturnValue : &:r1752_5, m1757_2 +# 1752| v1752_7(void) = AliasedUse : ~m1756_10 +# 1752| v1752_8(void) = ExitFunction : -# 1757| void if_initialization(int) -# 1757| Block 0 -# 1757| v1757_1(void) = EnterFunction : -# 1757| m1757_2(unknown) = AliasedDefinition : -# 1757| m1757_3(unknown) = InitializeNonLocal : -# 1757| m1757_4(unknown) = Chi : total:m1757_2, partial:m1757_3 -# 1757| r1757_5(glval) = VariableAddress[x] : -# 1757| m1757_6(int) = InitializeParameter[x] : &:r1757_5 -# 1758| r1758_1(glval) = VariableAddress[y] : -# 1758| r1758_2(glval) = VariableAddress[x] : -# 1758| r1758_3(int) = Load[x] : &:r1758_2, m1757_6 -# 1758| m1758_4(int) = Store[y] : &:r1758_1, r1758_3 -# 1758| r1758_5(glval) = VariableAddress[x] : -# 1758| r1758_6(int) = Load[x] : &:r1758_5, m1757_6 -# 1758| r1758_7(int) = Constant[1] : -# 1758| r1758_8(int) = Add : r1758_6, r1758_7 -# 1758| r1758_9(int) = Constant[0] : -# 1758| r1758_10(bool) = CompareNE : r1758_8, r1758_9 -# 1758| v1758_11(void) = ConditionalBranch : r1758_10 +# 1759| void if_initialization(int) +# 1759| Block 0 +# 1759| v1759_1(void) = EnterFunction : +# 1759| m1759_2(unknown) = AliasedDefinition : +# 1759| m1759_3(unknown) = InitializeNonLocal : +# 1759| m1759_4(unknown) = Chi : total:m1759_2, partial:m1759_3 +# 1759| r1759_5(glval) = VariableAddress[x] : +# 1759| m1759_6(int) = InitializeParameter[x] : &:r1759_5 +# 1760| r1760_1(glval) = VariableAddress[y] : +# 1760| r1760_2(glval) = VariableAddress[x] : +# 1760| r1760_3(int) = Load[x] : &:r1760_2, m1759_6 +# 1760| m1760_4(int) = Store[y] : &:r1760_1, r1760_3 +# 1760| r1760_5(glval) = VariableAddress[x] : +# 1760| r1760_6(int) = Load[x] : &:r1760_5, m1759_6 +# 1760| r1760_7(int) = Constant[1] : +# 1760| r1760_8(int) = Add : r1760_6, r1760_7 +# 1760| r1760_9(int) = Constant[0] : +# 1760| r1760_10(bool) = CompareNE : r1760_8, r1760_9 +# 1760| v1760_11(void) = ConditionalBranch : r1760_10 #-----| False -> Block 2 #-----| True -> Block 1 -# 1759| Block 1 -# 1759| r1759_1(glval) = VariableAddress[x] : -# 1759| r1759_2(int) = Load[x] : &:r1759_1, m1757_6 -# 1759| r1759_3(glval) = VariableAddress[y] : -# 1759| r1759_4(int) = Load[y] : &:r1759_3, m1758_4 -# 1759| r1759_5(int) = Add : r1759_2, r1759_4 -# 1759| r1759_6(glval) = VariableAddress[x] : -# 1759| m1759_7(int) = Store[x] : &:r1759_6, r1759_5 +# 1761| Block 1 +# 1761| r1761_1(glval) = VariableAddress[x] : +# 1761| r1761_2(int) = Load[x] : &:r1761_1, m1759_6 +# 1761| r1761_3(glval) = VariableAddress[y] : +# 1761| r1761_4(int) = Load[y] : &:r1761_3, m1760_4 +# 1761| r1761_5(int) = Add : r1761_2, r1761_4 +# 1761| r1761_6(glval) = VariableAddress[x] : +# 1761| m1761_7(int) = Store[x] : &:r1761_6, r1761_5 #-----| Goto -> Block 2 -# 1762| Block 2 -# 1762| m1762_1(int) = Phi : from 0:m1757_6, from 1:m1759_7 -# 1762| r1762_2(glval) = VariableAddress[w] : -# 1762| m1762_3(int) = Uninitialized[w] : &:r1762_2 -# 1763| r1763_1(glval) = VariableAddress[x] : -# 1763| r1763_2(int) = Load[x] : &:r1763_1, m1762_1 -# 1763| r1763_3(glval) = VariableAddress[w] : -# 1763| m1763_4(int) = Store[w] : &:r1763_3, r1763_2 -# 1763| r1763_5(glval) = VariableAddress[x] : -# 1763| r1763_6(int) = Load[x] : &:r1763_5, m1762_1 -# 1763| r1763_7(int) = Constant[1] : -# 1763| r1763_8(int) = Add : r1763_6, r1763_7 -# 1763| r1763_9(int) = Constant[0] : -# 1763| r1763_10(bool) = CompareNE : r1763_8, r1763_9 -# 1763| v1763_11(void) = ConditionalBranch : r1763_10 +# 1764| Block 2 +# 1764| m1764_1(int) = Phi : from 0:m1759_6, from 1:m1761_7 +# 1764| r1764_2(glval) = VariableAddress[w] : +# 1764| m1764_3(int) = Uninitialized[w] : &:r1764_2 +# 1765| r1765_1(glval) = VariableAddress[x] : +# 1765| r1765_2(int) = Load[x] : &:r1765_1, m1764_1 +# 1765| r1765_3(glval) = VariableAddress[w] : +# 1765| m1765_4(int) = Store[w] : &:r1765_3, r1765_2 +# 1765| r1765_5(glval) = VariableAddress[x] : +# 1765| r1765_6(int) = Load[x] : &:r1765_5, m1764_1 +# 1765| r1765_7(int) = Constant[1] : +# 1765| r1765_8(int) = Add : r1765_6, r1765_7 +# 1765| r1765_9(int) = Constant[0] : +# 1765| r1765_10(bool) = CompareNE : r1765_8, r1765_9 +# 1765| v1765_11(void) = ConditionalBranch : r1765_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1764| Block 3 -# 1764| r1764_1(glval) = VariableAddress[x] : -# 1764| r1764_2(int) = Load[x] : &:r1764_1, m1762_1 -# 1764| r1764_3(glval) = VariableAddress[w] : -# 1764| r1764_4(int) = Load[w] : &:r1764_3, m1763_4 -# 1764| r1764_5(int) = Add : r1764_2, r1764_4 -# 1764| r1764_6(glval) = VariableAddress[x] : -# 1764| m1764_7(int) = Store[x] : &:r1764_6, r1764_5 +# 1766| Block 3 +# 1766| r1766_1(glval) = VariableAddress[x] : +# 1766| r1766_2(int) = Load[x] : &:r1766_1, m1764_1 +# 1766| r1766_3(glval) = VariableAddress[w] : +# 1766| r1766_4(int) = Load[w] : &:r1766_3, m1765_4 +# 1766| r1766_5(int) = Add : r1766_2, r1766_4 +# 1766| r1766_6(glval) = VariableAddress[x] : +# 1766| m1766_7(int) = Store[x] : &:r1766_6, r1766_5 #-----| Goto -> Block 4 -# 1767| Block 4 -# 1767| m1767_1(int) = Phi : from 2:m1762_1, from 3:m1764_7 -# 1767| r1767_2(glval) = VariableAddress[x] : -# 1767| r1767_3(int) = Load[x] : &:r1767_2, m1767_1 -# 1767| r1767_4(glval) = VariableAddress[w] : -# 1767| m1767_5(int) = Store[w] : &:r1767_4, r1767_3 -# 1767| r1767_6(glval) = VariableAddress[w2] : -# 1767| r1767_7(glval) = VariableAddress[w] : -# 1767| r1767_8(int) = Load[w] : &:r1767_7, m1767_5 -# 1767| m1767_9(int) = Store[w2] : &:r1767_6, r1767_8 -# 1767| r1767_10(glval) = VariableAddress[w2] : -# 1767| r1767_11(int) = Load[w2] : &:r1767_10, m1767_9 -# 1767| r1767_12(int) = Constant[0] : -# 1767| r1767_13(bool) = CompareNE : r1767_11, r1767_12 -# 1767| r1767_14(bool) = CopyValue : r1767_13 -# 1767| v1767_15(void) = ConditionalBranch : r1767_14 +# 1769| Block 4 +# 1769| m1769_1(int) = Phi : from 2:m1764_1, from 3:m1766_7 +# 1769| r1769_2(glval) = VariableAddress[x] : +# 1769| r1769_3(int) = Load[x] : &:r1769_2, m1769_1 +# 1769| r1769_4(glval) = VariableAddress[w] : +# 1769| m1769_5(int) = Store[w] : &:r1769_4, r1769_3 +# 1769| r1769_6(glval) = VariableAddress[w2] : +# 1769| r1769_7(glval) = VariableAddress[w] : +# 1769| r1769_8(int) = Load[w] : &:r1769_7, m1769_5 +# 1769| m1769_9(int) = Store[w2] : &:r1769_6, r1769_8 +# 1769| r1769_10(glval) = VariableAddress[w2] : +# 1769| r1769_11(int) = Load[w2] : &:r1769_10, m1769_9 +# 1769| r1769_12(int) = Constant[0] : +# 1769| r1769_13(bool) = CompareNE : r1769_11, r1769_12 +# 1769| r1769_14(bool) = CopyValue : r1769_13 +# 1769| v1769_15(void) = ConditionalBranch : r1769_14 #-----| False -> Block 6 #-----| True -> Block 5 -# 1768| Block 5 -# 1768| r1768_1(glval) = VariableAddress[x] : -# 1768| r1768_2(int) = Load[x] : &:r1768_1, m1767_1 -# 1768| r1768_3(glval) = VariableAddress[w] : -# 1768| r1768_4(int) = Load[w] : &:r1768_3, m1767_5 -# 1768| r1768_5(int) = Add : r1768_2, r1768_4 -# 1768| r1768_6(glval) = VariableAddress[x] : -# 1768| m1768_7(int) = Store[x] : &:r1768_6, r1768_5 +# 1770| Block 5 +# 1770| r1770_1(glval) = VariableAddress[x] : +# 1770| r1770_2(int) = Load[x] : &:r1770_1, m1769_1 +# 1770| r1770_3(glval) = VariableAddress[w] : +# 1770| r1770_4(int) = Load[w] : &:r1770_3, m1769_5 +# 1770| r1770_5(int) = Add : r1770_2, r1770_4 +# 1770| r1770_6(glval) = VariableAddress[x] : +# 1770| m1770_7(int) = Store[x] : &:r1770_6, r1770_5 #-----| Goto -> Block 6 -# 1771| Block 6 -# 1771| m1771_1(int) = Phi : from 4:m1767_1, from 5:m1768_7 -# 1771| r1771_2(glval) = VariableAddress[v] : -# 1771| r1771_3(glval) = VariableAddress[x] : -# 1771| r1771_4(int) = Load[x] : &:r1771_3, m1771_1 -# 1771| m1771_5(int) = Store[v] : &:r1771_2, r1771_4 -# 1771| r1771_6(glval) = VariableAddress[v2] : -# 1771| r1771_7(glval) = VariableAddress[v] : -# 1771| r1771_8(int) = Load[v] : &:r1771_7, m1771_5 -# 1771| m1771_9(int) = Store[v2] : &:r1771_6, r1771_8 -# 1771| r1771_10(glval) = VariableAddress[v2] : -# 1771| r1771_11(int) = Load[v2] : &:r1771_10, m1771_9 -# 1771| r1771_12(int) = Constant[0] : -# 1771| r1771_13(bool) = CompareNE : r1771_11, r1771_12 -# 1771| r1771_14(bool) = CopyValue : r1771_13 -# 1771| v1771_15(void) = ConditionalBranch : r1771_14 +# 1773| Block 6 +# 1773| m1773_1(int) = Phi : from 4:m1769_1, from 5:m1770_7 +# 1773| r1773_2(glval) = VariableAddress[v] : +# 1773| r1773_3(glval) = VariableAddress[x] : +# 1773| r1773_4(int) = Load[x] : &:r1773_3, m1773_1 +# 1773| m1773_5(int) = Store[v] : &:r1773_2, r1773_4 +# 1773| r1773_6(glval) = VariableAddress[v2] : +# 1773| r1773_7(glval) = VariableAddress[v] : +# 1773| r1773_8(int) = Load[v] : &:r1773_7, m1773_5 +# 1773| m1773_9(int) = Store[v2] : &:r1773_6, r1773_8 +# 1773| r1773_10(glval) = VariableAddress[v2] : +# 1773| r1773_11(int) = Load[v2] : &:r1773_10, m1773_9 +# 1773| r1773_12(int) = Constant[0] : +# 1773| r1773_13(bool) = CompareNE : r1773_11, r1773_12 +# 1773| r1773_14(bool) = CopyValue : r1773_13 +# 1773| v1773_15(void) = ConditionalBranch : r1773_14 #-----| False -> Block 8 #-----| True -> Block 7 -# 1772| Block 7 -# 1772| r1772_1(glval) = VariableAddress[x] : -# 1772| r1772_2(int) = Load[x] : &:r1772_1, m1771_1 -# 1772| r1772_3(glval) = VariableAddress[v] : -# 1772| r1772_4(int) = Load[v] : &:r1772_3, m1771_5 -# 1772| r1772_5(int) = Add : r1772_2, r1772_4 -# 1772| r1772_6(glval) = VariableAddress[x] : -# 1772| m1772_7(int) = Store[x] : &:r1772_6, r1772_5 +# 1774| Block 7 +# 1774| r1774_1(glval) = VariableAddress[x] : +# 1774| r1774_2(int) = Load[x] : &:r1774_1, m1773_1 +# 1774| r1774_3(glval) = VariableAddress[v] : +# 1774| r1774_4(int) = Load[v] : &:r1774_3, m1773_5 +# 1774| r1774_5(int) = Add : r1774_2, r1774_4 +# 1774| r1774_6(glval) = VariableAddress[x] : +# 1774| m1774_7(int) = Store[x] : &:r1774_6, r1774_5 #-----| Goto -> Block 8 -# 1775| Block 8 -# 1775| m1775_1(int) = Phi : from 6:m1771_1, from 7:m1772_7 -# 1775| r1775_2(glval) = VariableAddress[z] : -# 1775| r1775_3(glval) = VariableAddress[x] : -# 1775| r1775_4(int) = Load[x] : &:r1775_3, m1775_1 -# 1775| m1775_5(int) = Store[z] : &:r1775_2, r1775_4 -# 1776| r1776_1(glval) = VariableAddress[z] : -# 1776| r1776_2(int) = Load[z] : &:r1776_1, m1775_5 -# 1776| r1776_3(int) = Constant[0] : -# 1776| r1776_4(bool) = CompareNE : r1776_2, r1776_3 -# 1776| v1776_5(void) = ConditionalBranch : r1776_4 +# 1777| Block 8 +# 1777| m1777_1(int) = Phi : from 6:m1773_1, from 7:m1774_7 +# 1777| r1777_2(glval) = VariableAddress[z] : +# 1777| r1777_3(glval) = VariableAddress[x] : +# 1777| r1777_4(int) = Load[x] : &:r1777_3, m1777_1 +# 1777| m1777_5(int) = Store[z] : &:r1777_2, r1777_4 +# 1778| r1778_1(glval) = VariableAddress[z] : +# 1778| r1778_2(int) = Load[z] : &:r1778_1, m1777_5 +# 1778| r1778_3(int) = Constant[0] : +# 1778| r1778_4(bool) = CompareNE : r1778_2, r1778_3 +# 1778| v1778_5(void) = ConditionalBranch : r1778_4 #-----| False -> Block 10 #-----| True -> Block 9 -# 1777| Block 9 -# 1777| r1777_1(glval) = VariableAddress[x] : -# 1777| r1777_2(int) = Load[x] : &:r1777_1, m1775_1 -# 1777| r1777_3(glval) = VariableAddress[z] : -# 1777| r1777_4(int) = Load[z] : &:r1777_3, m1775_5 -# 1777| r1777_5(int) = Add : r1777_2, r1777_4 -# 1777| r1777_6(glval) = VariableAddress[x] : -# 1777| m1777_7(int) = Store[x] : &:r1777_6, r1777_5 +# 1779| Block 9 +# 1779| r1779_1(glval) = VariableAddress[x] : +# 1779| r1779_2(int) = Load[x] : &:r1779_1, m1777_1 +# 1779| r1779_3(glval) = VariableAddress[z] : +# 1779| r1779_4(int) = Load[z] : &:r1779_3, m1777_5 +# 1779| r1779_5(int) = Add : r1779_2, r1779_4 +# 1779| r1779_6(glval) = VariableAddress[x] : +# 1779| m1779_7(int) = Store[x] : &:r1779_6, r1779_5 #-----| Goto -> Block 10 -# 1780| Block 10 -# 1780| m1780_1(int) = Phi : from 8:m1775_1, from 9:m1777_7 -# 1780| r1780_2(glval) = VariableAddress[z2] : -# 1780| r1780_3(glval) = VariableAddress[z] : -# 1780| r1780_4(int) = Load[z] : &:r1780_3, m1775_5 -# 1780| m1780_5(int) = Store[z2] : &:r1780_2, r1780_4 -# 1780| r1780_6(glval) = VariableAddress[z2] : -# 1780| r1780_7(int) = Load[z2] : &:r1780_6, m1780_5 -# 1780| r1780_8(int) = Constant[0] : -# 1780| r1780_9(bool) = CompareNE : r1780_7, r1780_8 -# 1780| r1780_10(bool) = CopyValue : r1780_9 -# 1780| v1780_11(void) = ConditionalBranch : r1780_10 +# 1782| Block 10 +# 1782| m1782_1(int) = Phi : from 8:m1777_1, from 9:m1779_7 +# 1782| r1782_2(glval) = VariableAddress[z2] : +# 1782| r1782_3(glval) = VariableAddress[z] : +# 1782| r1782_4(int) = Load[z] : &:r1782_3, m1777_5 +# 1782| m1782_5(int) = Store[z2] : &:r1782_2, r1782_4 +# 1782| r1782_6(glval) = VariableAddress[z2] : +# 1782| r1782_7(int) = Load[z2] : &:r1782_6, m1782_5 +# 1782| r1782_8(int) = Constant[0] : +# 1782| r1782_9(bool) = CompareNE : r1782_7, r1782_8 +# 1782| r1782_10(bool) = CopyValue : r1782_9 +# 1782| v1782_11(void) = ConditionalBranch : r1782_10 #-----| False -> Block 12 #-----| True -> Block 11 -# 1781| Block 11 -# 1781| r1781_1(glval) = VariableAddress[z2] : -# 1781| r1781_2(int) = Load[z2] : &:r1781_1, m1780_5 -# 1781| r1781_3(glval) = VariableAddress[x] : -# 1781| r1781_4(int) = Load[x] : &:r1781_3, m1780_1 -# 1781| r1781_5(int) = Add : r1781_4, r1781_2 -# 1781| m1781_6(int) = Store[x] : &:r1781_3, r1781_5 +# 1783| Block 11 +# 1783| r1783_1(glval) = VariableAddress[z2] : +# 1783| r1783_2(int) = Load[z2] : &:r1783_1, m1782_5 +# 1783| r1783_3(glval) = VariableAddress[x] : +# 1783| r1783_4(int) = Load[x] : &:r1783_3, m1782_1 +# 1783| r1783_5(int) = Add : r1783_4, r1783_2 +# 1783| m1783_6(int) = Store[x] : &:r1783_3, r1783_5 #-----| Goto -> Block 12 -# 1783| Block 12 -# 1783| v1783_1(void) = NoOp : -# 1757| v1757_7(void) = ReturnVoid : -# 1757| v1757_8(void) = AliasedUse : m1757_3 -# 1757| v1757_9(void) = ExitFunction : +# 1785| Block 12 +# 1785| v1785_1(void) = NoOp : +# 1759| v1759_7(void) = ReturnVoid : +# 1759| v1759_8(void) = AliasedUse : m1759_3 +# 1759| v1759_9(void) = ExitFunction : -# 1785| void switch_initialization(int) -# 1785| Block 0 -# 1785| v1785_1(void) = EnterFunction : -# 1785| m1785_2(unknown) = AliasedDefinition : -# 1785| m1785_3(unknown) = InitializeNonLocal : -# 1785| m1785_4(unknown) = Chi : total:m1785_2, partial:m1785_3 -# 1785| r1785_5(glval) = VariableAddress[x] : -# 1785| m1785_6(int) = InitializeParameter[x] : &:r1785_5 -# 1786| r1786_1(glval) = VariableAddress[y] : -# 1786| r1786_2(glval) = VariableAddress[x] : -# 1786| r1786_3(int) = Load[x] : &:r1786_2, m1785_6 -# 1786| m1786_4(int) = Store[y] : &:r1786_1, r1786_3 -# 1786| r1786_5(glval) = VariableAddress[x] : -# 1786| r1786_6(int) = Load[x] : &:r1786_5, m1785_6 -# 1786| r1786_7(int) = Constant[1] : -# 1786| r1786_8(int) = Add : r1786_6, r1786_7 -# 1786| v1786_9(void) = Switch : r1786_8 +# 1787| void switch_initialization(int) +# 1787| Block 0 +# 1787| v1787_1(void) = EnterFunction : +# 1787| m1787_2(unknown) = AliasedDefinition : +# 1787| m1787_3(unknown) = InitializeNonLocal : +# 1787| m1787_4(unknown) = Chi : total:m1787_2, partial:m1787_3 +# 1787| r1787_5(glval) = VariableAddress[x] : +# 1787| m1787_6(int) = InitializeParameter[x] : &:r1787_5 +# 1788| r1788_1(glval) = VariableAddress[y] : +# 1788| r1788_2(glval) = VariableAddress[x] : +# 1788| r1788_3(int) = Load[x] : &:r1788_2, m1787_6 +# 1788| m1788_4(int) = Store[y] : &:r1788_1, r1788_3 +# 1788| r1788_5(glval) = VariableAddress[x] : +# 1788| r1788_6(int) = Load[x] : &:r1788_5, m1787_6 +# 1788| r1788_7(int) = Constant[1] : +# 1788| r1788_8(int) = Add : r1788_6, r1788_7 +# 1788| v1788_9(void) = Switch : r1788_8 #-----| Default -> Block 1 -# 1787| Block 1 -# 1787| v1787_1(void) = NoOp : -# 1788| r1788_1(glval) = VariableAddress[x] : -# 1788| r1788_2(int) = Load[x] : &:r1788_1, m1785_6 -# 1788| r1788_3(glval) = VariableAddress[y] : -# 1788| r1788_4(int) = Load[y] : &:r1788_3, m1786_4 -# 1788| r1788_5(int) = Add : r1788_2, r1788_4 -# 1788| r1788_6(glval) = VariableAddress[x] : -# 1788| m1788_7(int) = Store[x] : &:r1788_6, r1788_5 -# 1791| r1791_1(glval) = VariableAddress[w] : -# 1791| m1791_2(int) = Uninitialized[w] : &:r1791_1 -# 1792| r1792_1(glval) = VariableAddress[x] : -# 1792| r1792_2(int) = Load[x] : &:r1792_1, m1788_7 -# 1792| r1792_3(glval) = VariableAddress[w] : -# 1792| m1792_4(int) = Store[w] : &:r1792_3, r1792_2 -# 1792| r1792_5(glval) = VariableAddress[x] : -# 1792| r1792_6(int) = Load[x] : &:r1792_5, m1788_7 -# 1792| r1792_7(int) = Constant[1] : -# 1792| r1792_8(int) = Add : r1792_6, r1792_7 -# 1792| v1792_9(void) = Switch : r1792_8 +# 1789| Block 1 +# 1789| v1789_1(void) = NoOp : +# 1790| r1790_1(glval) = VariableAddress[x] : +# 1790| r1790_2(int) = Load[x] : &:r1790_1, m1787_6 +# 1790| r1790_3(glval) = VariableAddress[y] : +# 1790| r1790_4(int) = Load[y] : &:r1790_3, m1788_4 +# 1790| r1790_5(int) = Add : r1790_2, r1790_4 +# 1790| r1790_6(glval) = VariableAddress[x] : +# 1790| m1790_7(int) = Store[x] : &:r1790_6, r1790_5 +# 1793| r1793_1(glval) = VariableAddress[w] : +# 1793| m1793_2(int) = Uninitialized[w] : &:r1793_1 +# 1794| r1794_1(glval) = VariableAddress[x] : +# 1794| r1794_2(int) = Load[x] : &:r1794_1, m1790_7 +# 1794| r1794_3(glval) = VariableAddress[w] : +# 1794| m1794_4(int) = Store[w] : &:r1794_3, r1794_2 +# 1794| r1794_5(glval) = VariableAddress[x] : +# 1794| r1794_6(int) = Load[x] : &:r1794_5, m1790_7 +# 1794| r1794_7(int) = Constant[1] : +# 1794| r1794_8(int) = Add : r1794_6, r1794_7 +# 1794| v1794_9(void) = Switch : r1794_8 #-----| Default -> Block 2 -# 1793| Block 2 -# 1793| v1793_1(void) = NoOp : -# 1794| r1794_1(glval) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, m1788_7 -# 1794| r1794_3(glval) = VariableAddress[w] : -# 1794| r1794_4(int) = Load[w] : &:r1794_3, m1792_4 -# 1794| r1794_5(int) = Add : r1794_2, r1794_4 -# 1794| r1794_6(glval) = VariableAddress[x] : -# 1794| m1794_7(int) = Store[x] : &:r1794_6, r1794_5 -# 1797| r1797_1(glval) = VariableAddress[x] : -# 1797| r1797_2(int) = Load[x] : &:r1797_1, m1794_7 -# 1797| r1797_3(glval) = VariableAddress[w] : -# 1797| m1797_4(int) = Store[w] : &:r1797_3, r1797_2 -# 1797| r1797_5(glval) = VariableAddress[w2] : -# 1797| r1797_6(glval) = VariableAddress[w] : -# 1797| r1797_7(int) = Load[w] : &:r1797_6, m1797_4 -# 1797| m1797_8(int) = Store[w2] : &:r1797_5, r1797_7 -# 1797| r1797_9(glval) = VariableAddress[w2] : -# 1797| r1797_10(int) = Load[w2] : &:r1797_9, m1797_8 -# 1797| r1797_11(int) = CopyValue : r1797_10 -# 1797| v1797_12(void) = Switch : r1797_11 +# 1795| Block 2 +# 1795| v1795_1(void) = NoOp : +# 1796| r1796_1(glval) = VariableAddress[x] : +# 1796| r1796_2(int) = Load[x] : &:r1796_1, m1790_7 +# 1796| r1796_3(glval) = VariableAddress[w] : +# 1796| r1796_4(int) = Load[w] : &:r1796_3, m1794_4 +# 1796| r1796_5(int) = Add : r1796_2, r1796_4 +# 1796| r1796_6(glval) = VariableAddress[x] : +# 1796| m1796_7(int) = Store[x] : &:r1796_6, r1796_5 +# 1799| r1799_1(glval) = VariableAddress[x] : +# 1799| r1799_2(int) = Load[x] : &:r1799_1, m1796_7 +# 1799| r1799_3(glval) = VariableAddress[w] : +# 1799| m1799_4(int) = Store[w] : &:r1799_3, r1799_2 +# 1799| r1799_5(glval) = VariableAddress[w2] : +# 1799| r1799_6(glval) = VariableAddress[w] : +# 1799| r1799_7(int) = Load[w] : &:r1799_6, m1799_4 +# 1799| m1799_8(int) = Store[w2] : &:r1799_5, r1799_7 +# 1799| r1799_9(glval) = VariableAddress[w2] : +# 1799| r1799_10(int) = Load[w2] : &:r1799_9, m1799_8 +# 1799| r1799_11(int) = CopyValue : r1799_10 +# 1799| v1799_12(void) = Switch : r1799_11 #-----| Default -> Block 3 -# 1798| Block 3 -# 1798| v1798_1(void) = NoOp : -# 1799| r1799_1(glval) = VariableAddress[x] : -# 1799| r1799_2(int) = Load[x] : &:r1799_1, m1794_7 -# 1799| r1799_3(glval) = VariableAddress[w] : -# 1799| r1799_4(int) = Load[w] : &:r1799_3, m1797_4 -# 1799| r1799_5(int) = Add : r1799_2, r1799_4 -# 1799| r1799_6(glval) = VariableAddress[x] : -# 1799| m1799_7(int) = Store[x] : &:r1799_6, r1799_5 -# 1802| r1802_1(glval) = VariableAddress[v] : -# 1802| r1802_2(glval) = VariableAddress[x] : -# 1802| r1802_3(int) = Load[x] : &:r1802_2, m1799_7 -# 1802| m1802_4(int) = Store[v] : &:r1802_1, r1802_3 -# 1802| r1802_5(glval) = VariableAddress[v2] : -# 1802| r1802_6(glval) = VariableAddress[v] : -# 1802| r1802_7(int) = Load[v] : &:r1802_6, m1802_4 -# 1802| m1802_8(int) = Store[v2] : &:r1802_5, r1802_7 -# 1802| r1802_9(glval) = VariableAddress[v2] : -# 1802| r1802_10(int) = Load[v2] : &:r1802_9, m1802_8 -# 1802| r1802_11(int) = CopyValue : r1802_10 -# 1802| v1802_12(void) = Switch : r1802_11 +# 1800| Block 3 +# 1800| v1800_1(void) = NoOp : +# 1801| r1801_1(glval) = VariableAddress[x] : +# 1801| r1801_2(int) = Load[x] : &:r1801_1, m1796_7 +# 1801| r1801_3(glval) = VariableAddress[w] : +# 1801| r1801_4(int) = Load[w] : &:r1801_3, m1799_4 +# 1801| r1801_5(int) = Add : r1801_2, r1801_4 +# 1801| r1801_6(glval) = VariableAddress[x] : +# 1801| m1801_7(int) = Store[x] : &:r1801_6, r1801_5 +# 1804| r1804_1(glval) = VariableAddress[v] : +# 1804| r1804_2(glval) = VariableAddress[x] : +# 1804| r1804_3(int) = Load[x] : &:r1804_2, m1801_7 +# 1804| m1804_4(int) = Store[v] : &:r1804_1, r1804_3 +# 1804| r1804_5(glval) = VariableAddress[v2] : +# 1804| r1804_6(glval) = VariableAddress[v] : +# 1804| r1804_7(int) = Load[v] : &:r1804_6, m1804_4 +# 1804| m1804_8(int) = Store[v2] : &:r1804_5, r1804_7 +# 1804| r1804_9(glval) = VariableAddress[v2] : +# 1804| r1804_10(int) = Load[v2] : &:r1804_9, m1804_8 +# 1804| r1804_11(int) = CopyValue : r1804_10 +# 1804| v1804_12(void) = Switch : r1804_11 #-----| Default -> Block 4 -# 1803| Block 4 -# 1803| v1803_1(void) = NoOp : -# 1804| r1804_1(glval) = VariableAddress[x] : -# 1804| r1804_2(int) = Load[x] : &:r1804_1, m1799_7 -# 1804| r1804_3(glval) = VariableAddress[v] : -# 1804| r1804_4(int) = Load[v] : &:r1804_3, m1802_4 -# 1804| r1804_5(int) = Add : r1804_2, r1804_4 -# 1804| r1804_6(glval) = VariableAddress[x] : -# 1804| m1804_7(int) = Store[x] : &:r1804_6, r1804_5 -# 1807| r1807_1(glval) = VariableAddress[z] : -# 1807| r1807_2(glval) = VariableAddress[x] : -# 1807| r1807_3(int) = Load[x] : &:r1807_2, m1804_7 -# 1807| m1807_4(int) = Store[z] : &:r1807_1, r1807_3 -# 1808| r1808_1(glval) = VariableAddress[z] : -# 1808| r1808_2(int) = Load[z] : &:r1808_1, m1807_4 -# 1808| v1808_3(void) = Switch : r1808_2 +# 1805| Block 4 +# 1805| v1805_1(void) = NoOp : +# 1806| r1806_1(glval) = VariableAddress[x] : +# 1806| r1806_2(int) = Load[x] : &:r1806_1, m1801_7 +# 1806| r1806_3(glval) = VariableAddress[v] : +# 1806| r1806_4(int) = Load[v] : &:r1806_3, m1804_4 +# 1806| r1806_5(int) = Add : r1806_2, r1806_4 +# 1806| r1806_6(glval) = VariableAddress[x] : +# 1806| m1806_7(int) = Store[x] : &:r1806_6, r1806_5 +# 1809| r1809_1(glval) = VariableAddress[z] : +# 1809| r1809_2(glval) = VariableAddress[x] : +# 1809| r1809_3(int) = Load[x] : &:r1809_2, m1806_7 +# 1809| m1809_4(int) = Store[z] : &:r1809_1, r1809_3 +# 1810| r1810_1(glval) = VariableAddress[z] : +# 1810| r1810_2(int) = Load[z] : &:r1810_1, m1809_4 +# 1810| v1810_3(void) = Switch : r1810_2 #-----| Default -> Block 5 -# 1809| Block 5 -# 1809| v1809_1(void) = NoOp : -# 1810| r1810_1(glval) = VariableAddress[x] : -# 1810| r1810_2(int) = Load[x] : &:r1810_1, m1804_7 -# 1810| r1810_3(glval) = VariableAddress[z] : -# 1810| r1810_4(int) = Load[z] : &:r1810_3, m1807_4 -# 1810| r1810_5(int) = Add : r1810_2, r1810_4 -# 1810| r1810_6(glval) = VariableAddress[x] : -# 1810| m1810_7(int) = Store[x] : &:r1810_6, r1810_5 -# 1813| r1813_1(glval) = VariableAddress[z2] : -# 1813| r1813_2(glval) = VariableAddress[z] : -# 1813| r1813_3(int) = Load[z] : &:r1813_2, m1807_4 -# 1813| m1813_4(int) = Store[z2] : &:r1813_1, r1813_3 -# 1813| r1813_5(glval) = VariableAddress[z2] : -# 1813| r1813_6(int) = Load[z2] : &:r1813_5, m1813_4 -# 1813| r1813_7(int) = CopyValue : r1813_6 -# 1813| v1813_8(void) = Switch : r1813_7 +# 1811| Block 5 +# 1811| v1811_1(void) = NoOp : +# 1812| r1812_1(glval) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, m1806_7 +# 1812| r1812_3(glval) = VariableAddress[z] : +# 1812| r1812_4(int) = Load[z] : &:r1812_3, m1809_4 +# 1812| r1812_5(int) = Add : r1812_2, r1812_4 +# 1812| r1812_6(glval) = VariableAddress[x] : +# 1812| m1812_7(int) = Store[x] : &:r1812_6, r1812_5 +# 1815| r1815_1(glval) = VariableAddress[z2] : +# 1815| r1815_2(glval) = VariableAddress[z] : +# 1815| r1815_3(int) = Load[z] : &:r1815_2, m1809_4 +# 1815| m1815_4(int) = Store[z2] : &:r1815_1, r1815_3 +# 1815| r1815_5(glval) = VariableAddress[z2] : +# 1815| r1815_6(int) = Load[z2] : &:r1815_5, m1815_4 +# 1815| r1815_7(int) = CopyValue : r1815_6 +# 1815| v1815_8(void) = Switch : r1815_7 #-----| Default -> Block 6 -# 1814| Block 6 -# 1814| v1814_1(void) = NoOp : -# 1815| r1815_1(glval) = VariableAddress[z2] : -# 1815| r1815_2(int) = Load[z2] : &:r1815_1, m1813_4 -# 1815| r1815_3(glval) = VariableAddress[x] : -# 1815| r1815_4(int) = Load[x] : &:r1815_3, m1810_7 -# 1815| r1815_5(int) = Add : r1815_4, r1815_2 -# 1815| m1815_6(int) = Store[x] : &:r1815_3, r1815_5 -# 1817| v1817_1(void) = NoOp : -# 1785| v1785_7(void) = ReturnVoid : -# 1785| v1785_8(void) = AliasedUse : m1785_3 -# 1785| v1785_9(void) = ExitFunction : +# 1816| Block 6 +# 1816| v1816_1(void) = NoOp : +# 1817| r1817_1(glval) = VariableAddress[z2] : +# 1817| r1817_2(int) = Load[z2] : &:r1817_1, m1815_4 +# 1817| r1817_3(glval) = VariableAddress[x] : +# 1817| r1817_4(int) = Load[x] : &:r1817_3, m1812_7 +# 1817| r1817_5(int) = Add : r1817_4, r1817_2 +# 1817| m1817_6(int) = Store[x] : &:r1817_3, r1817_5 +# 1819| v1819_1(void) = NoOp : +# 1787| v1787_7(void) = ReturnVoid : +# 1787| v1787_8(void) = AliasedUse : m1787_3 +# 1787| v1787_9(void) = ExitFunction : -# 1821| int global_2 -# 1821| Block 0 -# 1821| v1821_1(void) = EnterFunction : -# 1821| m1821_2(unknown) = AliasedDefinition : -# 1821| r1821_3(glval) = VariableAddress[global_2] : -# 1821| r1821_4(int) = Constant[1] : -# 1821| m1821_5(int) = Store[global_2] : &:r1821_3, r1821_4 -# 1821| m1821_6(unknown) = Chi : total:m1821_2, partial:m1821_5 -# 1821| v1821_7(void) = ReturnVoid : -# 1821| v1821_8(void) = AliasedUse : ~m1821_6 -# 1821| v1821_9(void) = ExitFunction : +# 1823| int global_2 +# 1823| Block 0 +# 1823| v1823_1(void) = EnterFunction : +# 1823| m1823_2(unknown) = AliasedDefinition : +# 1823| r1823_3(glval) = VariableAddress[global_2] : +# 1823| r1823_4(int) = Constant[1] : +# 1823| m1823_5(int) = Store[global_2] : &:r1823_3, r1823_4 +# 1823| m1823_6(unknown) = Chi : total:m1823_2, partial:m1823_5 +# 1823| v1823_7(void) = ReturnVoid : +# 1823| v1823_8(void) = AliasedUse : ~m1823_6 +# 1823| v1823_9(void) = ExitFunction : -# 1825| constructor_only global_4 -# 1825| Block 0 -# 1825| v1825_1(void) = EnterFunction : -# 1825| m1825_2(unknown) = AliasedDefinition : -# 1825| r1825_3(glval) = VariableAddress[global_4] : -# 1825| r1825_4(glval) = FunctionAddress[constructor_only] : -# 1825| r1825_5(int) = Constant[1] : -# 1825| v1825_6(void) = Call[constructor_only] : func:r1825_4, this:r1825_3, 0:r1825_5 -# 1825| m1825_7(unknown) = ^CallSideEffect : ~m1825_2 -# 1825| m1825_8(unknown) = Chi : total:m1825_2, partial:m1825_7 -# 1825| m1825_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1825_3 -# 1825| m1825_10(unknown) = Chi : total:m1825_8, partial:m1825_9 -# 1825| v1825_11(void) = ReturnVoid : -# 1825| v1825_12(void) = AliasedUse : ~m1825_10 -# 1825| v1825_13(void) = ExitFunction : - -# 1827| constructor_only global_5 +# 1827| constructor_only global_4 # 1827| Block 0 # 1827| v1827_1(void) = EnterFunction : # 1827| m1827_2(unknown) = AliasedDefinition : -# 1827| r1827_3(glval) = VariableAddress[global_5] : +# 1827| r1827_3(glval) = VariableAddress[global_4] : # 1827| r1827_4(glval) = FunctionAddress[constructor_only] : -# 1827| r1827_5(int) = Constant[2] : +# 1827| r1827_5(int) = Constant[1] : # 1827| v1827_6(void) = Call[constructor_only] : func:r1827_4, this:r1827_3, 0:r1827_5 # 1827| m1827_7(unknown) = ^CallSideEffect : ~m1827_2 # 1827| m1827_8(unknown) = Chi : total:m1827_2, partial:m1827_7 @@ -10641,49 +10625,65 @@ ir.cpp: # 1827| v1827_12(void) = AliasedUse : ~m1827_10 # 1827| v1827_13(void) = ExitFunction : -# 1829| char* global_string +# 1829| constructor_only global_5 # 1829| Block 0 -# 1829| v1829_1(void) = EnterFunction : -# 1829| m1829_2(unknown) = AliasedDefinition : -# 1829| r1829_3(glval) = VariableAddress[global_string] : -# 1829| r1829_4(glval) = StringConstant["global string"] : -# 1829| r1829_5(char *) = Convert : r1829_4 -# 1829| r1829_6(char *) = Convert : r1829_5 -# 1829| m1829_7(char *) = Store[global_string] : &:r1829_3, r1829_6 -# 1829| m1829_8(unknown) = Chi : total:m1829_2, partial:m1829_7 -# 1829| v1829_9(void) = ReturnVoid : -# 1829| v1829_10(void) = AliasedUse : ~m1829_8 -# 1829| v1829_11(void) = ExitFunction : +# 1829| v1829_1(void) = EnterFunction : +# 1829| m1829_2(unknown) = AliasedDefinition : +# 1829| r1829_3(glval) = VariableAddress[global_5] : +# 1829| r1829_4(glval) = FunctionAddress[constructor_only] : +# 1829| r1829_5(int) = Constant[2] : +# 1829| v1829_6(void) = Call[constructor_only] : func:r1829_4, this:r1829_3, 0:r1829_5 +# 1829| m1829_7(unknown) = ^CallSideEffect : ~m1829_2 +# 1829| m1829_8(unknown) = Chi : total:m1829_2, partial:m1829_7 +# 1829| m1829_9(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1829_3 +# 1829| m1829_10(unknown) = Chi : total:m1829_8, partial:m1829_9 +# 1829| v1829_11(void) = ReturnVoid : +# 1829| v1829_12(void) = AliasedUse : ~m1829_10 +# 1829| v1829_13(void) = ExitFunction : -# 1831| int global_6 +# 1831| char* global_string # 1831| Block 0 -# 1831| v1831_1(void) = EnterFunction : -# 1831| m1831_2(unknown) = AliasedDefinition : -# 1831| r1831_3(glval) = VariableAddress[global_6] : -# 1831| r1831_4(glval) = VariableAddress[global_2] : -# 1831| r1831_5(int) = Load[global_2] : &:r1831_4, ~m1831_2 -# 1831| m1831_6(int) = Store[global_6] : &:r1831_3, r1831_5 -# 1831| m1831_7(unknown) = Chi : total:m1831_2, partial:m1831_6 -# 1831| v1831_8(void) = ReturnVoid : -# 1831| v1831_9(void) = AliasedUse : ~m1831_7 -# 1831| v1831_10(void) = ExitFunction : +# 1831| v1831_1(void) = EnterFunction : +# 1831| m1831_2(unknown) = AliasedDefinition : +# 1831| r1831_3(glval) = VariableAddress[global_string] : +# 1831| r1831_4(glval) = StringConstant["global string"] : +# 1831| r1831_5(char *) = Convert : r1831_4 +# 1831| r1831_6(char *) = Convert : r1831_5 +# 1831| m1831_7(char *) = Store[global_string] : &:r1831_3, r1831_6 +# 1831| m1831_8(unknown) = Chi : total:m1831_2, partial:m1831_7 +# 1831| v1831_9(void) = ReturnVoid : +# 1831| v1831_10(void) = AliasedUse : ~m1831_8 +# 1831| v1831_11(void) = ExitFunction : -# 1834| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1834| Block 0 -# 1834| v1834_1(void) = EnterFunction : -# 1834| m1834_2(unknown) = AliasedDefinition : -# 1834| m1834_3(unknown) = InitializeNonLocal : -# 1834| m1834_4(unknown) = Chi : total:m1834_2, partial:m1834_3 -# 1834| r1834_5(glval) = VariableAddress[#this] : -# 1834| m1834_6(glval) = InitializeParameter[#this] : &:r1834_5 -# 1834| r1834_7(glval) = Load[#this] : &:r1834_5, m1834_6 -# 1834| m1834_8(A) = InitializeIndirection[#this] : &:r1834_7 +# 1833| int global_6 +# 1833| Block 0 +# 1833| v1833_1(void) = EnterFunction : +# 1833| m1833_2(unknown) = AliasedDefinition : +# 1833| r1833_3(glval) = VariableAddress[global_6] : +# 1833| r1833_4(glval) = VariableAddress[global_2] : +# 1833| r1833_5(int) = Load[global_2] : &:r1833_4, ~m1833_2 +# 1833| m1833_6(int) = Store[global_6] : &:r1833_3, r1833_5 +# 1833| m1833_7(unknown) = Chi : total:m1833_2, partial:m1833_6 +# 1833| v1833_8(void) = ReturnVoid : +# 1833| v1833_9(void) = AliasedUse : ~m1833_7 +# 1833| v1833_10(void) = ExitFunction : + +# 1836| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1836| Block 0 +# 1836| v1836_1(void) = EnterFunction : +# 1836| m1836_2(unknown) = AliasedDefinition : +# 1836| m1836_3(unknown) = InitializeNonLocal : +# 1836| m1836_4(unknown) = Chi : total:m1836_2, partial:m1836_3 +# 1836| r1836_5(glval) = VariableAddress[#this] : +# 1836| m1836_6(glval) = InitializeParameter[#this] : &:r1836_5 +# 1836| r1836_7(glval) = Load[#this] : &:r1836_5, m1836_6 +# 1836| m1836_8(A) = InitializeIndirection[#this] : &:r1836_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#this] : -#-----| r0_6(A *) = Load[#this] : &:r0_5, m1834_6 +#-----| r0_6(A *) = Load[#this] : &:r0_5, m1836_6 #-----| r0_7(glval[1]>) = FieldAddress[e] : r0_6 #-----| r0_8(glval) = VariableAddress[(unnamed parameter 0)] : #-----| r0_9(A &&) = Load[(unnamed parameter 0)] : &:r0_8, m0_2 @@ -10691,1755 +10691,2344 @@ ir.cpp: #-----| r0_11(glval[1]>) = FieldAddress[e] : r0_10 #-----| r0_12(enum [1]) = Load[?] : &:r0_11, ~m0_4 #-----| m0_13(enum [1]) = Store[?] : &:r0_7, r0_12 -#-----| m0_14(unknown) = Chi : total:m1834_8, partial:m0_13 +#-----| m0_14(unknown) = Chi : total:m1836_8, partial:m0_13 #-----| r0_15(glval) = VariableAddress[#return] : #-----| r0_16(glval) = VariableAddress[#this] : -#-----| r0_17(A *) = Load[#this] : &:r0_16, m1834_6 +#-----| r0_17(A *) = Load[#this] : &:r0_16, m1836_6 #-----| r0_18(glval) = CopyValue : r0_17 #-----| r0_19(A &) = CopyValue : r0_18 #-----| m0_20(A &) = Store[#return] : &:r0_15, r0_19 -# 1834| v1834_9(void) = ReturnIndirection[#this] : &:r1834_7, m0_14 +# 1836| v1836_9(void) = ReturnIndirection[#this] : &:r1836_7, m0_14 #-----| v0_21(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 1834| r1834_10(glval) = VariableAddress[#return] : -# 1834| v1834_11(void) = ReturnValue : &:r1834_10, m0_20 -# 1834| v1834_12(void) = AliasedUse : m1834_3 -# 1834| v1834_13(void) = ExitFunction : +# 1836| r1836_10(glval) = VariableAddress[#return] : +# 1836| v1836_11(void) = ReturnValue : &:r1836_10, m0_20 +# 1836| v1836_12(void) = AliasedUse : m1836_3 +# 1836| v1836_13(void) = ExitFunction : -# 1839| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1839| Block 0 -# 1839| v1839_1(void) = EnterFunction : -# 1839| m1839_2(unknown) = AliasedDefinition : -# 1839| m1839_3(unknown) = InitializeNonLocal : -# 1839| m1839_4(unknown) = Chi : total:m1839_2, partial:m1839_3 -# 1839| r1839_5(glval) = VariableAddress[#this] : -# 1839| m1839_6(glval) = InitializeParameter[#this] : &:r1839_5 -# 1839| r1839_7(glval) = Load[#this] : &:r1839_5, m1839_6 -# 1839| m1839_8(B) = InitializeIndirection[#this] : &:r1839_7 +# 1841| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1841| Block 0 +# 1841| v1841_1(void) = EnterFunction : +# 1841| m1841_2(unknown) = AliasedDefinition : +# 1841| m1841_3(unknown) = InitializeNonLocal : +# 1841| m1841_4(unknown) = Chi : total:m1841_2, partial:m1841_3 +# 1841| r1841_5(glval) = VariableAddress[#this] : +# 1841| m1841_6(glval) = InitializeParameter[#this] : &:r1841_5 +# 1841| r1841_7(glval) = Load[#this] : &:r1841_5, m1841_6 +# 1841| m1841_8(B) = InitializeIndirection[#this] : &:r1841_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1839| r1839_9(glval) = VariableAddress[#this] : -# 1839| r1839_10(B *) = Load[#this] : &:r1839_9, m1839_6 -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1839_10 -# 1839| r1839_11(glval) = FunctionAddress[operator=] : -# 1839| r1839_12(glval) = VariableAddress[(unnamed parameter 0)] : -# 1839| r1839_13(B &&) = Load[(unnamed parameter 0)] : &:r1839_12, m0_2 -#-----| r0_6(glval) = CopyValue : r1839_13 -# 1839| r1839_14(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1839_14 -# 1839| r1839_15(glval) = CopyValue : r0_7 -#-----| r0_8(A &) = CopyValue : r1839_15 -# 1839| r1839_16(A &) = Call[operator=] : func:r1839_11, this:r0_5, 0:r0_8 -# 1839| m1839_17(unknown) = ^CallSideEffect : ~m1839_4 -# 1839| m1839_18(unknown) = Chi : total:m1839_4, partial:m1839_17 -#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m1839_8 +# 1841| r1841_9(glval) = VariableAddress[#this] : +# 1841| r1841_10(B *) = Load[#this] : &:r1841_9, m1841_6 +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_10 +# 1841| r1841_11(glval) = FunctionAddress[operator=] : +# 1841| r1841_12(glval) = VariableAddress[(unnamed parameter 0)] : +# 1841| r1841_13(B &&) = Load[(unnamed parameter 0)] : &:r1841_12, m0_2 +#-----| r0_6(glval) = CopyValue : r1841_13 +# 1841| r1841_14(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_14 +# 1841| r1841_15(glval) = CopyValue : r0_7 +#-----| r0_8(A &) = CopyValue : r1841_15 +# 1841| r1841_16(A &) = Call[operator=] : func:r1841_11, this:r0_5, 0:r0_8 +# 1841| m1841_17(unknown) = ^CallSideEffect : ~m1841_4 +# 1841| m1841_18(unknown) = Chi : total:m1841_4, partial:m1841_17 +#-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m1841_8 #-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m0_4 #-----| m0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 -#-----| m0_12(unknown) = Chi : total:m1839_8, partial:m0_11 +#-----| m0_12(unknown) = Chi : total:m1841_8, partial:m0_11 #-----| m0_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8 #-----| m0_14(unknown) = Chi : total:m0_4, partial:m0_13 -#-----| r0_15(glval) = CopyValue : r1839_16 +#-----| r0_15(glval) = CopyValue : r1841_16 #-----| r0_16(glval) = VariableAddress[#return] : #-----| r0_17(glval) = VariableAddress[#this] : -#-----| r0_18(B *) = Load[#this] : &:r0_17, m1839_6 +#-----| r0_18(B *) = Load[#this] : &:r0_17, m1841_6 #-----| r0_19(glval) = CopyValue : r0_18 #-----| r0_20(B &) = CopyValue : r0_19 #-----| m0_21(B &) = Store[#return] : &:r0_16, r0_20 -# 1839| v1839_19(void) = ReturnIndirection[#this] : &:r1839_7, m0_12 +# 1841| v1841_19(void) = ReturnIndirection[#this] : &:r1841_7, m0_12 #-----| v0_22(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_14 -# 1839| r1839_20(glval) = VariableAddress[#return] : -# 1839| v1839_21(void) = ReturnValue : &:r1839_20, m0_21 -# 1839| v1839_22(void) = AliasedUse : ~m1839_18 -# 1839| v1839_23(void) = ExitFunction : +# 1841| r1841_20(glval) = VariableAddress[#return] : +# 1841| v1841_21(void) = ReturnValue : &:r1841_20, m0_21 +# 1841| v1841_22(void) = AliasedUse : ~m1841_18 +# 1841| v1841_23(void) = ExitFunction : -# 1843| void block_assignment::foo() -# 1843| Block 0 -# 1843| v1843_1(void) = EnterFunction : -# 1843| m1843_2(unknown) = AliasedDefinition : -# 1843| m1843_3(unknown) = InitializeNonLocal : -# 1843| m1843_4(unknown) = Chi : total:m1843_2, partial:m1843_3 -# 1844| r1844_1(glval) = VariableAddress[v] : -# 1844| m1844_2(B) = Uninitialized[v] : &:r1844_1 -# 1844| r1844_3(glval) = FunctionAddress[B] : -# 1844| r1844_4(A *) = Constant[0] : -# 1844| v1844_5(void) = Call[B] : func:r1844_3, this:r1844_1, 0:r1844_4 -# 1844| m1844_6(unknown) = ^CallSideEffect : ~m1843_4 -# 1844| m1844_7(unknown) = Chi : total:m1843_4, partial:m1844_6 -# 1844| v1844_8(void) = ^BufferReadSideEffect[0] : &:r1844_4, ~m1844_7 -# 1844| m1844_9(B) = ^IndirectMayWriteSideEffect[-1] : &:r1844_1 -# 1844| m1844_10(B) = Chi : total:m1844_2, partial:m1844_9 -# 1844| m1844_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1844_4 -# 1844| m1844_12(unknown) = Chi : total:m1844_7, partial:m1844_11 -# 1845| r1845_1(glval) = VariableAddress[v] : -# 1845| r1845_2(glval) = FunctionAddress[operator=] : -# 1845| r1845_3(glval) = VariableAddress[#temp1845:13] : -# 1845| m1845_4(B) = Uninitialized[#temp1845:13] : &:r1845_3 -# 1845| r1845_5(glval) = FunctionAddress[B] : -# 1845| r1845_6(A *) = Constant[0] : -# 1845| v1845_7(void) = Call[B] : func:r1845_5, this:r1845_3, 0:r1845_6 -# 1845| m1845_8(unknown) = ^CallSideEffect : ~m1844_12 -# 1845| m1845_9(unknown) = Chi : total:m1844_12, partial:m1845_8 -# 1845| v1845_10(void) = ^BufferReadSideEffect[0] : &:r1845_6, ~m1845_9 -# 1845| m1845_11(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_3 -# 1845| m1845_12(B) = Chi : total:m1845_4, partial:m1845_11 -# 1845| m1845_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_6 -# 1845| m1845_14(unknown) = Chi : total:m1845_9, partial:m1845_13 -# 1845| r1845_15(B &) = CopyValue : r1845_3 -# 1845| r1845_16(B &) = Call[operator=] : func:r1845_2, this:r1845_1, 0:r1845_15 -# 1845| m1845_17(unknown) = ^CallSideEffect : ~m1845_14 -# 1845| m1845_18(unknown) = Chi : total:m1845_14, partial:m1845_17 -# 1845| v1845_19(void) = ^IndirectReadSideEffect[-1] : &:r1845_1, m1844_10 -# 1845| v1845_20(void) = ^BufferReadSideEffect[0] : &:r1845_15, ~m1845_12 -# 1845| m1845_21(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_1 -# 1845| m1845_22(B) = Chi : total:m1844_10, partial:m1845_21 -# 1845| m1845_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_15 -# 1845| m1845_24(B) = Chi : total:m1845_12, partial:m1845_23 -# 1845| r1845_25(glval) = CopyValue : r1845_16 -# 1846| v1846_1(void) = NoOp : -# 1843| v1843_5(void) = ReturnVoid : -# 1843| v1843_6(void) = AliasedUse : ~m1845_18 -# 1843| v1843_7(void) = ExitFunction : +# 1845| void block_assignment::foo() +# 1845| Block 0 +# 1845| v1845_1(void) = EnterFunction : +# 1845| m1845_2(unknown) = AliasedDefinition : +# 1845| m1845_3(unknown) = InitializeNonLocal : +# 1845| m1845_4(unknown) = Chi : total:m1845_2, partial:m1845_3 +# 1846| r1846_1(glval) = VariableAddress[v] : +# 1846| m1846_2(B) = Uninitialized[v] : &:r1846_1 +# 1846| r1846_3(glval) = FunctionAddress[B] : +# 1846| r1846_4(A *) = Constant[0] : +# 1846| v1846_5(void) = Call[B] : func:r1846_3, this:r1846_1, 0:r1846_4 +# 1846| m1846_6(unknown) = ^CallSideEffect : ~m1845_4 +# 1846| m1846_7(unknown) = Chi : total:m1845_4, partial:m1846_6 +# 1846| v1846_8(void) = ^BufferReadSideEffect[0] : &:r1846_4, ~m1846_7 +# 1846| m1846_9(B) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 +# 1846| m1846_10(B) = Chi : total:m1846_2, partial:m1846_9 +# 1846| m1846_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1846_4 +# 1846| m1846_12(unknown) = Chi : total:m1846_7, partial:m1846_11 +# 1847| r1847_1(glval) = VariableAddress[v] : +# 1847| r1847_2(glval) = FunctionAddress[operator=] : +# 1847| r1847_3(glval) = VariableAddress[#temp1847:13] : +# 1847| m1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 +# 1847| r1847_5(glval) = FunctionAddress[B] : +# 1847| r1847_6(A *) = Constant[0] : +# 1847| v1847_7(void) = Call[B] : func:r1847_5, this:r1847_3, 0:r1847_6 +# 1847| m1847_8(unknown) = ^CallSideEffect : ~m1846_12 +# 1847| m1847_9(unknown) = Chi : total:m1846_12, partial:m1847_8 +# 1847| v1847_10(void) = ^BufferReadSideEffect[0] : &:r1847_6, ~m1847_9 +# 1847| m1847_11(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_3 +# 1847| m1847_12(B) = Chi : total:m1847_4, partial:m1847_11 +# 1847| m1847_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_6 +# 1847| m1847_14(unknown) = Chi : total:m1847_9, partial:m1847_13 +# 1847| r1847_15(B &) = CopyValue : r1847_3 +# 1847| r1847_16(B &) = Call[operator=] : func:r1847_2, this:r1847_1, 0:r1847_15 +# 1847| m1847_17(unknown) = ^CallSideEffect : ~m1847_14 +# 1847| m1847_18(unknown) = Chi : total:m1847_14, partial:m1847_17 +# 1847| v1847_19(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, m1846_10 +# 1847| v1847_20(void) = ^BufferReadSideEffect[0] : &:r1847_15, ~m1847_12 +# 1847| m1847_21(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 +# 1847| m1847_22(B) = Chi : total:m1846_10, partial:m1847_21 +# 1847| m1847_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_15 +# 1847| m1847_24(B) = Chi : total:m1847_12, partial:m1847_23 +# 1847| r1847_25(glval) = CopyValue : r1847_16 +# 1848| v1848_1(void) = NoOp : +# 1845| v1845_5(void) = ReturnVoid : +# 1845| v1845_6(void) = AliasedUse : ~m1847_18 +# 1845| v1845_7(void) = ExitFunction : -# 1849| void magicvars() -# 1849| Block 0 -# 1849| v1849_1(void) = EnterFunction : -# 1849| m1849_2(unknown) = AliasedDefinition : -# 1849| m1849_3(unknown) = InitializeNonLocal : -# 1849| m1849_4(unknown) = Chi : total:m1849_2, partial:m1849_3 -# 1850| r1850_1(glval) = VariableAddress[pf] : -# 1850| r1850_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : -# 1850| r1850_3(char *) = Convert : r1850_2 -# 1850| m1850_4(char *) = Store[pf] : &:r1850_1, r1850_3 -# 1851| r1851_1(glval) = VariableAddress[strfunc] : -# 1851| r1851_2(glval) = VariableAddress[__func__] : -# 1851| r1851_3(char *) = Convert : r1851_2 -# 1851| m1851_4(char *) = Store[strfunc] : &:r1851_1, r1851_3 -# 1852| v1852_1(void) = NoOp : -# 1849| v1849_5(void) = ReturnVoid : -# 1849| v1849_6(void) = AliasedUse : m1849_3 -# 1849| v1849_7(void) = ExitFunction : +# 1851| void magicvars() +# 1851| Block 0 +# 1851| v1851_1(void) = EnterFunction : +# 1851| m1851_2(unknown) = AliasedDefinition : +# 1851| m1851_3(unknown) = InitializeNonLocal : +# 1851| m1851_4(unknown) = Chi : total:m1851_2, partial:m1851_3 +# 1852| r1852_1(glval) = VariableAddress[pf] : +# 1852| r1852_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : +# 1852| r1852_3(char *) = Convert : r1852_2 +# 1852| m1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 +# 1853| r1853_1(glval) = VariableAddress[strfunc] : +# 1853| r1853_2(glval) = VariableAddress[__func__] : +# 1853| r1853_3(char *) = Convert : r1853_2 +# 1853| m1853_4(char *) = Store[strfunc] : &:r1853_1, r1853_3 +# 1854| v1854_1(void) = NoOp : +# 1851| v1851_5(void) = ReturnVoid : +# 1851| v1851_6(void) = AliasedUse : m1851_3 +# 1851| v1851_7(void) = ExitFunction : -# 1862| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| Block 0 -# 1862| v1862_1(void) = EnterFunction : -# 1862| m1862_2(unknown) = AliasedDefinition : -# 1862| m1862_3(unknown) = InitializeNonLocal : -# 1862| m1862_4(unknown) = Chi : total:m1862_2, partial:m1862_3 -# 1862| r1862_5(glval) = VariableAddress[#this] : -# 1862| m1862_6(glval>) = InitializeParameter[#this] : &:r1862_5 -# 1862| r1862_7(glval>) = Load[#this] : &:r1862_5, m1862_6 -# 1862| m1862_8(Bar1) = InitializeIndirection[#this] : &:r1862_7 -# 1862| r1862_9(glval) = VariableAddress[p] : -# 1862| m1862_10(S *) = InitializeParameter[p] : &:r1862_9 -# 1862| r1862_11(S *) = Load[p] : &:r1862_9, m1862_10 -# 1862| m1862_12(unknown) = InitializeIndirection[p] : &:r1862_11 -# 1864| r1864_1(glval) = VariableAddress[#return] : -# 1864| r1864_2(glval) = VariableAddress[p] : -# 1864| r1864_3(S *) = Load[p] : &:r1864_2, m1862_10 -# 1864| r1864_4(void *) = Convert : r1864_3 -# 1864| m1864_5(void *) = Store[#return] : &:r1864_1, r1864_4 -# 1862| v1862_13(void) = ReturnIndirection[#this] : &:r1862_7, m1862_8 -# 1862| v1862_14(void) = ReturnIndirection[p] : &:r1862_11, m1862_12 -# 1862| r1862_15(glval) = VariableAddress[#return] : -# 1862| v1862_16(void) = ReturnValue : &:r1862_15, m1864_5 -# 1862| v1862_17(void) = AliasedUse : m1862_3 -# 1862| v1862_18(void) = ExitFunction : +# 1864| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| Block 0 +# 1864| v1864_1(void) = EnterFunction : +# 1864| m1864_2(unknown) = AliasedDefinition : +# 1864| m1864_3(unknown) = InitializeNonLocal : +# 1864| m1864_4(unknown) = Chi : total:m1864_2, partial:m1864_3 +# 1864| r1864_5(glval) = VariableAddress[#this] : +# 1864| m1864_6(glval>) = InitializeParameter[#this] : &:r1864_5 +# 1864| r1864_7(glval>) = Load[#this] : &:r1864_5, m1864_6 +# 1864| m1864_8(Bar1) = InitializeIndirection[#this] : &:r1864_7 +# 1864| r1864_9(glval) = VariableAddress[p] : +# 1864| m1864_10(S *) = InitializeParameter[p] : &:r1864_9 +# 1864| r1864_11(S *) = Load[p] : &:r1864_9, m1864_10 +# 1864| m1864_12(unknown) = InitializeIndirection[p] : &:r1864_11 +# 1866| r1866_1(glval) = VariableAddress[#return] : +# 1866| r1866_2(glval) = VariableAddress[p] : +# 1866| r1866_3(S *) = Load[p] : &:r1866_2, m1864_10 +# 1866| r1866_4(void *) = Convert : r1866_3 +# 1866| m1866_5(void *) = Store[#return] : &:r1866_1, r1866_4 +# 1864| v1864_13(void) = ReturnIndirection[#this] : &:r1864_7, m1864_8 +# 1864| v1864_14(void) = ReturnIndirection[p] : &:r1864_11, m1864_12 +# 1864| r1864_15(glval) = VariableAddress[#return] : +# 1864| v1864_16(void) = ReturnValue : &:r1864_15, m1866_5 +# 1864| v1864_17(void) = AliasedUse : m1864_3 +# 1864| v1864_18(void) = ExitFunction : -# 1868| void missing_declaration_entries::test1() -# 1868| Block 0 -# 1868| v1868_1(void) = EnterFunction : -# 1868| m1868_2(unknown) = AliasedDefinition : -# 1868| m1868_3(unknown) = InitializeNonLocal : -# 1868| m1868_4(unknown) = Chi : total:m1868_2, partial:m1868_3 -# 1869| r1869_1(glval>) = VariableAddress[b] : -# 1869| m1869_2(Bar1) = Uninitialized[b] : &:r1869_1 -# 1870| r1870_1(glval>) = VariableAddress[b] : -# 1870| r1870_2(glval) = FunctionAddress[missing_type_decl_entry] : -# 1870| r1870_3(S *) = Constant[0] : -# 1870| r1870_4(void *) = Call[missing_type_decl_entry] : func:r1870_2, this:r1870_1, 0:r1870_3 -# 1870| m1870_5(unknown) = ^CallSideEffect : ~m1868_4 -# 1870| m1870_6(unknown) = Chi : total:m1868_4, partial:m1870_5 -# 1870| v1870_7(void) = ^IndirectReadSideEffect[-1] : &:r1870_1, m1869_2 -# 1870| v1870_8(void) = ^BufferReadSideEffect[0] : &:r1870_3, ~m1870_6 -# 1870| m1870_9(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1 -# 1870| m1870_10(Bar1) = Chi : total:m1869_2, partial:m1870_9 -# 1870| m1870_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1870_3 -# 1870| m1870_12(unknown) = Chi : total:m1870_6, partial:m1870_11 -# 1871| v1871_1(void) = NoOp : -# 1868| v1868_5(void) = ReturnVoid : -# 1868| v1868_6(void) = AliasedUse : ~m1870_12 -# 1868| v1868_7(void) = ExitFunction : +# 1870| void missing_declaration_entries::test1() +# 1870| Block 0 +# 1870| v1870_1(void) = EnterFunction : +# 1870| m1870_2(unknown) = AliasedDefinition : +# 1870| m1870_3(unknown) = InitializeNonLocal : +# 1870| m1870_4(unknown) = Chi : total:m1870_2, partial:m1870_3 +# 1871| r1871_1(glval>) = VariableAddress[b] : +# 1871| m1871_2(Bar1) = Uninitialized[b] : &:r1871_1 +# 1872| r1872_1(glval>) = VariableAddress[b] : +# 1872| r1872_2(glval) = FunctionAddress[missing_type_decl_entry] : +# 1872| r1872_3(S *) = Constant[0] : +# 1872| r1872_4(void *) = Call[missing_type_decl_entry] : func:r1872_2, this:r1872_1, 0:r1872_3 +# 1872| m1872_5(unknown) = ^CallSideEffect : ~m1870_4 +# 1872| m1872_6(unknown) = Chi : total:m1870_4, partial:m1872_5 +# 1872| v1872_7(void) = ^IndirectReadSideEffect[-1] : &:r1872_1, m1871_2 +# 1872| v1872_8(void) = ^BufferReadSideEffect[0] : &:r1872_3, ~m1872_6 +# 1872| m1872_9(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1872_1 +# 1872| m1872_10(Bar1) = Chi : total:m1871_2, partial:m1872_9 +# 1872| m1872_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1872_3 +# 1872| m1872_12(unknown) = Chi : total:m1872_6, partial:m1872_11 +# 1873| v1873_1(void) = NoOp : +# 1870| v1870_5(void) = ReturnVoid : +# 1870| v1870_6(void) = AliasedUse : ~m1872_12 +# 1870| v1870_7(void) = ExitFunction : -# 1875| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| Block 0 -# 1875| v1875_1(void) = EnterFunction : -# 1875| m1875_2(unknown) = AliasedDefinition : -# 1875| m1875_3(unknown) = InitializeNonLocal : -# 1875| m1875_4(unknown) = Chi : total:m1875_2, partial:m1875_3 -# 1875| r1875_5(glval) = VariableAddress[#this] : -# 1875| m1875_6(glval>) = InitializeParameter[#this] : &:r1875_5 -# 1875| r1875_7(glval>) = Load[#this] : &:r1875_5, m1875_6 -# 1875| m1875_8(Bar2) = InitializeIndirection[#this] : &:r1875_7 -# 1876| r1876_1(glval) = VariableAddress[x] : -# 1876| m1876_2(int[10]) = Uninitialized[x] : &:r1876_1 -# 1876| r1876_3(glval) = VariableAddress[y] : -# 1876| m1876_4(int[10]) = Uninitialized[y] : &:r1876_3 -# 1877| r1877_1(int) = Constant[10] : -# 1877| r1877_2(glval) = VariableAddress[x] : -# 1877| r1877_3(int *) = Convert : r1877_2 -# 1877| r1877_4(glval) = CopyValue : r1877_3 -# 1877| m1877_5(int) = Store[?] : &:r1877_4, r1877_1 -# 1877| m1877_6(int[10]) = Chi : total:m1876_2, partial:m1877_5 -# 1878| r1878_1(int) = Constant[10] : -# 1878| r1878_2(glval) = VariableAddress[y] : -# 1878| r1878_3(int *) = Convert : r1878_2 -# 1878| r1878_4(glval) = CopyValue : r1878_3 -# 1878| m1878_5(int) = Store[?] : &:r1878_4, r1878_1 -# 1878| m1878_6(int[10]) = Chi : total:m1876_4, partial:m1878_5 -# 1879| r1879_1(glval) = VariableAddress[#return] : +# 1877| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| Block 0 +# 1877| v1877_1(void) = EnterFunction : +# 1877| m1877_2(unknown) = AliasedDefinition : +# 1877| m1877_3(unknown) = InitializeNonLocal : +# 1877| m1877_4(unknown) = Chi : total:m1877_2, partial:m1877_3 +# 1877| r1877_5(glval) = VariableAddress[#this] : +# 1877| m1877_6(glval>) = InitializeParameter[#this] : &:r1877_5 +# 1877| r1877_7(glval>) = Load[#this] : &:r1877_5, m1877_6 +# 1877| m1877_8(Bar2) = InitializeIndirection[#this] : &:r1877_7 +# 1878| r1878_1(glval) = VariableAddress[x] : +# 1878| m1878_2(int[10]) = Uninitialized[x] : &:r1878_1 +# 1878| r1878_3(glval) = VariableAddress[y] : +# 1878| m1878_4(int[10]) = Uninitialized[y] : &:r1878_3 +# 1879| r1879_1(int) = Constant[10] : # 1879| r1879_2(glval) = VariableAddress[x] : # 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(int) = Load[?] : &:r1879_3, m1877_5 -# 1879| r1879_5(glval) = VariableAddress[y] : -# 1879| r1879_6(int *) = Convert : r1879_5 -# 1879| r1879_7(int) = Load[?] : &:r1879_6, m1878_5 -# 1879| r1879_8(int) = Add : r1879_4, r1879_7 -# 1879| m1879_9(int) = Store[#return] : &:r1879_1, r1879_8 -# 1875| v1875_9(void) = ReturnIndirection[#this] : &:r1875_7, m1875_8 -# 1875| r1875_10(glval) = VariableAddress[#return] : -# 1875| v1875_11(void) = ReturnValue : &:r1875_10, m1879_9 -# 1875| v1875_12(void) = AliasedUse : m1875_3 -# 1875| v1875_13(void) = ExitFunction : +# 1879| r1879_4(glval) = CopyValue : r1879_3 +# 1879| m1879_5(int) = Store[?] : &:r1879_4, r1879_1 +# 1879| m1879_6(int[10]) = Chi : total:m1878_2, partial:m1879_5 +# 1880| r1880_1(int) = Constant[10] : +# 1880| r1880_2(glval) = VariableAddress[y] : +# 1880| r1880_3(int *) = Convert : r1880_2 +# 1880| r1880_4(glval) = CopyValue : r1880_3 +# 1880| m1880_5(int) = Store[?] : &:r1880_4, r1880_1 +# 1880| m1880_6(int[10]) = Chi : total:m1878_4, partial:m1880_5 +# 1881| r1881_1(glval) = VariableAddress[#return] : +# 1881| r1881_2(glval) = VariableAddress[x] : +# 1881| r1881_3(int *) = Convert : r1881_2 +# 1881| r1881_4(int) = Load[?] : &:r1881_3, m1879_5 +# 1881| r1881_5(glval) = VariableAddress[y] : +# 1881| r1881_6(int *) = Convert : r1881_5 +# 1881| r1881_7(int) = Load[?] : &:r1881_6, m1880_5 +# 1881| r1881_8(int) = Add : r1881_4, r1881_7 +# 1881| m1881_9(int) = Store[#return] : &:r1881_1, r1881_8 +# 1877| v1877_9(void) = ReturnIndirection[#this] : &:r1877_7, m1877_8 +# 1877| r1877_10(glval) = VariableAddress[#return] : +# 1877| v1877_11(void) = ReturnValue : &:r1877_10, m1881_9 +# 1877| v1877_12(void) = AliasedUse : m1877_3 +# 1877| v1877_13(void) = ExitFunction : -# 1883| void missing_declaration_entries::test2() -# 1883| Block 0 -# 1883| v1883_1(void) = EnterFunction : -# 1883| m1883_2(unknown) = AliasedDefinition : -# 1883| m1883_3(unknown) = InitializeNonLocal : -# 1883| m1883_4(unknown) = Chi : total:m1883_2, partial:m1883_3 -# 1884| r1884_1(glval>) = VariableAddress[b] : -# 1884| m1884_2(Bar2) = Uninitialized[b] : &:r1884_1 -# 1885| r1885_1(glval>) = VariableAddress[b] : -# 1885| r1885_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : -# 1885| r1885_3(int) = Call[two_missing_variable_declaration_entries] : func:r1885_2, this:r1885_1 -# 1885| m1885_4(unknown) = ^CallSideEffect : ~m1883_4 -# 1885| m1885_5(unknown) = Chi : total:m1883_4, partial:m1885_4 -# 1885| v1885_6(void) = ^IndirectReadSideEffect[-1] : &:r1885_1, m1884_2 -# 1885| m1885_7(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1 -# 1885| m1885_8(Bar2) = Chi : total:m1884_2, partial:m1885_7 -# 1886| v1886_1(void) = NoOp : -# 1883| v1883_5(void) = ReturnVoid : -# 1883| v1883_6(void) = AliasedUse : ~m1885_5 -# 1883| v1883_7(void) = ExitFunction : +# 1885| void missing_declaration_entries::test2() +# 1885| Block 0 +# 1885| v1885_1(void) = EnterFunction : +# 1885| m1885_2(unknown) = AliasedDefinition : +# 1885| m1885_3(unknown) = InitializeNonLocal : +# 1885| m1885_4(unknown) = Chi : total:m1885_2, partial:m1885_3 +# 1886| r1886_1(glval>) = VariableAddress[b] : +# 1886| m1886_2(Bar2) = Uninitialized[b] : &:r1886_1 +# 1887| r1887_1(glval>) = VariableAddress[b] : +# 1887| r1887_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : +# 1887| r1887_3(int) = Call[two_missing_variable_declaration_entries] : func:r1887_2, this:r1887_1 +# 1887| m1887_4(unknown) = ^CallSideEffect : ~m1885_4 +# 1887| m1887_5(unknown) = Chi : total:m1885_4, partial:m1887_4 +# 1887| v1887_6(void) = ^IndirectReadSideEffect[-1] : &:r1887_1, m1886_2 +# 1887| m1887_7(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1887_1 +# 1887| m1887_8(Bar2) = Chi : total:m1886_2, partial:m1887_7 +# 1888| v1888_1(void) = NoOp : +# 1885| v1885_5(void) = ReturnVoid : +# 1885| v1885_6(void) = AliasedUse : ~m1887_5 +# 1885| v1885_7(void) = ExitFunction : -# 1889| char global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| m1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(char) = Constant[42] : -# 1889| m1889_5(char) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| m1889_6(unknown) = Chi : total:m1889_2, partial:m1889_5 -# 1889| v1889_7(void) = ReturnVoid : -# 1889| v1889_8(void) = AliasedUse : ~m1889_6 -# 1889| v1889_9(void) = ExitFunction : - -# 1889| int global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| m1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(int) = Constant[42] : -# 1889| m1889_5(int) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| m1889_6(unknown) = Chi : total:m1889_2, partial:m1889_5 -# 1889| v1889_7(void) = ReturnVoid : -# 1889| v1889_8(void) = AliasedUse : ~m1889_6 -# 1889| v1889_9(void) = ExitFunction : - -# 1891| int test_global_template_int() +# 1891| char global_template # 1891| Block 0 # 1891| v1891_1(void) = EnterFunction : # 1891| m1891_2(unknown) = AliasedDefinition : -# 1891| m1891_3(unknown) = InitializeNonLocal : -# 1891| m1891_4(unknown) = Chi : total:m1891_2, partial:m1891_3 -# 1892| r1892_1(glval) = VariableAddress[local_int] : -# 1892| r1892_2(glval) = VariableAddress[global_template] : -# 1892| r1892_3(int) = Load[global_template] : &:r1892_2, ~m1891_3 -# 1892| m1892_4(int) = Store[local_int] : &:r1892_1, r1892_3 -# 1893| r1893_1(glval) = VariableAddress[local_char] : -# 1893| r1893_2(glval) = VariableAddress[global_template] : -# 1893| r1893_3(char) = Load[global_template] : &:r1893_2, ~m1891_3 -# 1893| m1893_4(char) = Store[local_char] : &:r1893_1, r1893_3 -# 1894| r1894_1(glval) = VariableAddress[#return] : -# 1894| r1894_2(glval) = VariableAddress[local_int] : -# 1894| r1894_3(int) = Load[local_int] : &:r1894_2, m1892_4 -# 1894| r1894_4(glval) = VariableAddress[local_char] : -# 1894| r1894_5(char) = Load[local_char] : &:r1894_4, m1893_4 -# 1894| r1894_6(int) = Convert : r1894_5 -# 1894| r1894_7(int) = Add : r1894_3, r1894_6 -# 1894| m1894_8(int) = Store[#return] : &:r1894_1, r1894_7 -# 1891| r1891_5(glval) = VariableAddress[#return] : -# 1891| v1891_6(void) = ReturnValue : &:r1891_5, m1894_8 -# 1891| v1891_7(void) = AliasedUse : m1891_3 -# 1891| v1891_8(void) = ExitFunction : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(char) = Constant[42] : +# 1891| m1891_5(char) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| m1891_6(unknown) = Chi : total:m1891_2, partial:m1891_5 +# 1891| v1891_7(void) = ReturnVoid : +# 1891| v1891_8(void) = AliasedUse : ~m1891_6 +# 1891| v1891_9(void) = ExitFunction : -# 1899| int noreturnTest(int) -# 1899| Block 0 -# 1899| v1899_1(void) = EnterFunction : -# 1899| m1899_2(unknown) = AliasedDefinition : -# 1899| m1899_3(unknown) = InitializeNonLocal : -# 1899| m1899_4(unknown) = Chi : total:m1899_2, partial:m1899_3 -# 1899| r1899_5(glval) = VariableAddress[x] : -# 1899| m1899_6(int) = InitializeParameter[x] : &:r1899_5 -# 1900| r1900_1(glval) = VariableAddress[x] : -# 1900| r1900_2(int) = Load[x] : &:r1900_1, m1899_6 -# 1900| r1900_3(int) = Constant[10] : -# 1900| r1900_4(bool) = CompareLT : r1900_2, r1900_3 -# 1900| v1900_5(void) = ConditionalBranch : r1900_4 +# 1891| int global_template +# 1891| Block 0 +# 1891| v1891_1(void) = EnterFunction : +# 1891| m1891_2(unknown) = AliasedDefinition : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(int) = Constant[42] : +# 1891| m1891_5(int) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| m1891_6(unknown) = Chi : total:m1891_2, partial:m1891_5 +# 1891| v1891_7(void) = ReturnVoid : +# 1891| v1891_8(void) = AliasedUse : ~m1891_6 +# 1891| v1891_9(void) = ExitFunction : + +# 1893| int test_global_template_int() +# 1893| Block 0 +# 1893| v1893_1(void) = EnterFunction : +# 1893| m1893_2(unknown) = AliasedDefinition : +# 1893| m1893_3(unknown) = InitializeNonLocal : +# 1893| m1893_4(unknown) = Chi : total:m1893_2, partial:m1893_3 +# 1894| r1894_1(glval) = VariableAddress[local_int] : +# 1894| r1894_2(glval) = VariableAddress[global_template] : +# 1894| r1894_3(int) = Load[global_template] : &:r1894_2, ~m1893_3 +# 1894| m1894_4(int) = Store[local_int] : &:r1894_1, r1894_3 +# 1895| r1895_1(glval) = VariableAddress[local_char] : +# 1895| r1895_2(glval) = VariableAddress[global_template] : +# 1895| r1895_3(char) = Load[global_template] : &:r1895_2, ~m1893_3 +# 1895| m1895_4(char) = Store[local_char] : &:r1895_1, r1895_3 +# 1896| r1896_1(glval) = VariableAddress[#return] : +# 1896| r1896_2(glval) = VariableAddress[local_int] : +# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, m1894_4 +# 1896| r1896_4(glval) = VariableAddress[local_char] : +# 1896| r1896_5(char) = Load[local_char] : &:r1896_4, m1895_4 +# 1896| r1896_6(int) = Convert : r1896_5 +# 1896| r1896_7(int) = Add : r1896_3, r1896_6 +# 1896| m1896_8(int) = Store[#return] : &:r1896_1, r1896_7 +# 1893| r1893_5(glval) = VariableAddress[#return] : +# 1893| v1893_6(void) = ReturnValue : &:r1893_5, m1896_8 +# 1893| v1893_7(void) = AliasedUse : m1893_3 +# 1893| v1893_8(void) = ExitFunction : + +# 1901| int noreturnTest(int) +# 1901| Block 0 +# 1901| v1901_1(void) = EnterFunction : +# 1901| m1901_2(unknown) = AliasedDefinition : +# 1901| m1901_3(unknown) = InitializeNonLocal : +# 1901| m1901_4(unknown) = Chi : total:m1901_2, partial:m1901_3 +# 1901| r1901_5(glval) = VariableAddress[x] : +# 1901| m1901_6(int) = InitializeParameter[x] : &:r1901_5 +# 1902| r1902_1(glval) = VariableAddress[x] : +# 1902| r1902_2(int) = Load[x] : &:r1902_1, m1901_6 +# 1902| r1902_3(int) = Constant[10] : +# 1902| r1902_4(bool) = CompareLT : r1902_2, r1902_3 +# 1902| v1902_5(void) = ConditionalBranch : r1902_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1901| Block 1 -# 1901| r1901_1(glval) = VariableAddress[#return] : -# 1901| r1901_2(glval) = VariableAddress[x] : -# 1901| r1901_3(int) = Load[x] : &:r1901_2, m1899_6 -# 1901| m1901_4(int) = Store[#return] : &:r1901_1, r1901_3 -# 1899| r1899_7(glval) = VariableAddress[#return] : -# 1899| v1899_8(void) = ReturnValue : &:r1899_7, m1901_4 -# 1899| v1899_9(void) = AliasedUse : m1899_3 -# 1899| v1899_10(void) = ExitFunction : +# 1903| Block 1 +# 1903| r1903_1(glval) = VariableAddress[#return] : +# 1903| r1903_2(glval) = VariableAddress[x] : +# 1903| r1903_3(int) = Load[x] : &:r1903_2, m1901_6 +# 1903| m1903_4(int) = Store[#return] : &:r1903_1, r1903_3 +# 1901| r1901_7(glval) = VariableAddress[#return] : +# 1901| v1901_8(void) = ReturnValue : &:r1901_7, m1903_4 +# 1901| v1901_9(void) = AliasedUse : m1901_3 +# 1901| v1901_10(void) = ExitFunction : -# 1903| Block 2 -# 1903| r1903_1(glval) = FunctionAddress[noreturnFunc] : -# 1903| v1903_2(void) = Call[noreturnFunc] : func:r1903_1 -# 1903| m1903_3(unknown) = ^CallSideEffect : ~m1899_4 -# 1903| m1903_4(unknown) = Chi : total:m1899_4, partial:m1903_3 -# 1899| v1899_11(void) = Unreached : +# 1905| Block 2 +# 1905| r1905_1(glval) = FunctionAddress[noreturnFunc] : +# 1905| v1905_2(void) = Call[noreturnFunc] : func:r1905_1 +# 1905| m1905_3(unknown) = ^CallSideEffect : ~m1901_4 +# 1905| m1905_4(unknown) = Chi : total:m1901_4, partial:m1905_3 +# 1901| v1901_11(void) = Unreached : -# 1907| int noreturnTest2(int) -# 1907| Block 0 -# 1907| v1907_1(void) = EnterFunction : -# 1907| m1907_2(unknown) = AliasedDefinition : -# 1907| m1907_3(unknown) = InitializeNonLocal : -# 1907| m1907_4(unknown) = Chi : total:m1907_2, partial:m1907_3 -# 1907| r1907_5(glval) = VariableAddress[x] : -# 1907| m1907_6(int) = InitializeParameter[x] : &:r1907_5 -# 1908| r1908_1(glval) = VariableAddress[x] : -# 1908| r1908_2(int) = Load[x] : &:r1908_1, m1907_6 -# 1908| r1908_3(int) = Constant[10] : -# 1908| r1908_4(bool) = CompareLT : r1908_2, r1908_3 -# 1908| v1908_5(void) = ConditionalBranch : r1908_4 +# 1909| int noreturnTest2(int) +# 1909| Block 0 +# 1909| v1909_1(void) = EnterFunction : +# 1909| m1909_2(unknown) = AliasedDefinition : +# 1909| m1909_3(unknown) = InitializeNonLocal : +# 1909| m1909_4(unknown) = Chi : total:m1909_2, partial:m1909_3 +# 1909| r1909_5(glval) = VariableAddress[x] : +# 1909| m1909_6(int) = InitializeParameter[x] : &:r1909_5 +# 1910| r1910_1(glval) = VariableAddress[x] : +# 1910| r1910_2(int) = Load[x] : &:r1910_1, m1909_6 +# 1910| r1910_3(int) = Constant[10] : +# 1910| r1910_4(bool) = CompareLT : r1910_2, r1910_3 +# 1910| v1910_5(void) = ConditionalBranch : r1910_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1909| Block 1 -# 1909| r1909_1(glval) = FunctionAddress[noreturnFunc] : -# 1909| v1909_2(void) = Call[noreturnFunc] : func:r1909_1 -# 1909| m1909_3(unknown) = ^CallSideEffect : ~m1907_4 -# 1909| m1909_4(unknown) = Chi : total:m1907_4, partial:m1909_3 -# 1907| v1907_7(void) = Unreached : +# 1911| Block 1 +# 1911| r1911_1(glval) = FunctionAddress[noreturnFunc] : +# 1911| v1911_2(void) = Call[noreturnFunc] : func:r1911_1 +# 1911| m1911_3(unknown) = ^CallSideEffect : ~m1909_4 +# 1911| m1911_4(unknown) = Chi : total:m1909_4, partial:m1911_3 +# 1909| v1909_7(void) = Unreached : -# 1911| Block 2 -# 1911| r1911_1(glval) = VariableAddress[#return] : -# 1911| r1911_2(glval) = VariableAddress[x] : -# 1911| r1911_3(int) = Load[x] : &:r1911_2, m1907_6 -# 1911| m1911_4(int) = Store[#return] : &:r1911_1, r1911_3 -# 1907| r1907_8(glval) = VariableAddress[#return] : -# 1907| v1907_9(void) = ReturnValue : &:r1907_8, m1911_4 -# 1907| v1907_10(void) = AliasedUse : m1907_3 -# 1907| v1907_11(void) = ExitFunction : +# 1913| Block 2 +# 1913| r1913_1(glval) = VariableAddress[#return] : +# 1913| r1913_2(glval) = VariableAddress[x] : +# 1913| r1913_3(int) = Load[x] : &:r1913_2, m1909_6 +# 1913| m1913_4(int) = Store[#return] : &:r1913_1, r1913_3 +# 1909| r1909_8(glval) = VariableAddress[#return] : +# 1909| v1909_9(void) = ReturnValue : &:r1909_8, m1913_4 +# 1909| v1909_10(void) = AliasedUse : m1909_3 +# 1909| v1909_11(void) = ExitFunction : -# 1914| int static_function(int) -# 1914| Block 0 -# 1914| v1914_1(void) = EnterFunction : -# 1914| m1914_2(unknown) = AliasedDefinition : -# 1914| m1914_3(unknown) = InitializeNonLocal : -# 1914| m1914_4(unknown) = Chi : total:m1914_2, partial:m1914_3 -# 1914| r1914_5(glval) = VariableAddress[x] : -# 1914| m1914_6(int) = InitializeParameter[x] : &:r1914_5 -# 1915| r1915_1(glval) = VariableAddress[#return] : -# 1915| r1915_2(glval) = VariableAddress[x] : -# 1915| r1915_3(int) = Load[x] : &:r1915_2, m1914_6 -# 1915| m1915_4(int) = Store[#return] : &:r1915_1, r1915_3 -# 1914| r1914_7(glval) = VariableAddress[#return] : -# 1914| v1914_8(void) = ReturnValue : &:r1914_7, m1915_4 -# 1914| v1914_9(void) = AliasedUse : m1914_3 -# 1914| v1914_10(void) = ExitFunction : +# 1916| int static_function(int) +# 1916| Block 0 +# 1916| v1916_1(void) = EnterFunction : +# 1916| m1916_2(unknown) = AliasedDefinition : +# 1916| m1916_3(unknown) = InitializeNonLocal : +# 1916| m1916_4(unknown) = Chi : total:m1916_2, partial:m1916_3 +# 1916| r1916_5(glval) = VariableAddress[x] : +# 1916| m1916_6(int) = InitializeParameter[x] : &:r1916_5 +# 1917| r1917_1(glval) = VariableAddress[#return] : +# 1917| r1917_2(glval) = VariableAddress[x] : +# 1917| r1917_3(int) = Load[x] : &:r1917_2, m1916_6 +# 1917| m1917_4(int) = Store[#return] : &:r1917_1, r1917_3 +# 1916| r1916_7(glval) = VariableAddress[#return] : +# 1916| v1916_8(void) = ReturnValue : &:r1916_7, m1917_4 +# 1916| v1916_9(void) = AliasedUse : m1916_3 +# 1916| v1916_10(void) = ExitFunction : -# 1918| void test_static_functions_with_assignments() -# 1918| Block 0 -# 1918| v1918_1(void) = EnterFunction : -# 1918| m1918_2(unknown) = AliasedDefinition : -# 1918| m1918_3(unknown) = InitializeNonLocal : -# 1918| m1918_4(unknown) = Chi : total:m1918_2, partial:m1918_3 -# 1919| r1919_1(glval) = VariableAddress[c] : -# 1919| m1919_2(C) = Uninitialized[c] : &:r1919_1 -# 1919| r1919_3(glval) = FunctionAddress[C] : -# 1919| v1919_4(void) = Call[C] : func:r1919_3, this:r1919_1 -# 1919| m1919_5(unknown) = ^CallSideEffect : ~m1918_4 -# 1919| m1919_6(unknown) = Chi : total:m1918_4, partial:m1919_5 -# 1919| m1919_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 -# 1919| m1919_8(C) = Chi : total:m1919_2, partial:m1919_7 -# 1920| r1920_1(glval) = VariableAddress[x] : -# 1920| m1920_2(int) = Uninitialized[x] : &:r1920_1 +# 1920| void test_static_functions_with_assignments() +# 1920| Block 0 +# 1920| v1920_1(void) = EnterFunction : +# 1920| m1920_2(unknown) = AliasedDefinition : +# 1920| m1920_3(unknown) = InitializeNonLocal : +# 1920| m1920_4(unknown) = Chi : total:m1920_2, partial:m1920_3 # 1921| r1921_1(glval) = VariableAddress[c] : -# 1921| r1921_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1921| r1921_3(int) = Constant[10] : -# 1921| r1921_4(int) = Call[StaticMemberFunction] : func:r1921_2, 0:r1921_3 -# 1921| m1921_5(unknown) = ^CallSideEffect : ~m1919_6 -# 1921| m1921_6(unknown) = Chi : total:m1919_6, partial:m1921_5 -# 1921| r1921_7(glval) = VariableAddress[x] : -# 1921| m1921_8(int) = Store[x] : &:r1921_7, r1921_4 -# 1922| r1922_1(glval) = VariableAddress[y] : -# 1922| m1922_2(int) = Uninitialized[y] : &:r1922_1 -# 1923| r1923_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1923| r1923_2(int) = Constant[10] : -# 1923| r1923_3(int) = Call[StaticMemberFunction] : func:r1923_1, 0:r1923_2 -# 1923| m1923_4(unknown) = ^CallSideEffect : ~m1921_6 -# 1923| m1923_5(unknown) = Chi : total:m1921_6, partial:m1923_4 -# 1923| r1923_6(glval) = VariableAddress[y] : -# 1923| m1923_7(int) = Store[y] : &:r1923_6, r1923_3 -# 1924| r1924_1(glval) = VariableAddress[z] : -# 1924| m1924_2(int) = Uninitialized[z] : &:r1924_1 -# 1925| r1925_1(glval) = FunctionAddress[static_function] : +# 1921| m1921_2(C) = Uninitialized[c] : &:r1921_1 +# 1921| r1921_3(glval) = FunctionAddress[C] : +# 1921| v1921_4(void) = Call[C] : func:r1921_3, this:r1921_1 +# 1921| m1921_5(unknown) = ^CallSideEffect : ~m1920_4 +# 1921| m1921_6(unknown) = Chi : total:m1920_4, partial:m1921_5 +# 1921| m1921_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 +# 1921| m1921_8(C) = Chi : total:m1921_2, partial:m1921_7 +# 1922| r1922_1(glval) = VariableAddress[x] : +# 1922| m1922_2(int) = Uninitialized[x] : &:r1922_1 +# 1923| r1923_1(glval) = VariableAddress[c] : +# 1923| r1923_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1923| r1923_3(int) = Constant[10] : +# 1923| r1923_4(int) = Call[StaticMemberFunction] : func:r1923_2, 0:r1923_3 +# 1923| m1923_5(unknown) = ^CallSideEffect : ~m1921_6 +# 1923| m1923_6(unknown) = Chi : total:m1921_6, partial:m1923_5 +# 1923| r1923_7(glval) = VariableAddress[x] : +# 1923| m1923_8(int) = Store[x] : &:r1923_7, r1923_4 +# 1924| r1924_1(glval) = VariableAddress[y] : +# 1924| m1924_2(int) = Uninitialized[y] : &:r1924_1 +# 1925| r1925_1(glval) = FunctionAddress[StaticMemberFunction] : # 1925| r1925_2(int) = Constant[10] : -# 1925| r1925_3(int) = Call[static_function] : func:r1925_1, 0:r1925_2 -# 1925| m1925_4(unknown) = ^CallSideEffect : ~m1923_5 -# 1925| m1925_5(unknown) = Chi : total:m1923_5, partial:m1925_4 -# 1925| r1925_6(glval) = VariableAddress[z] : -# 1925| m1925_7(int) = Store[z] : &:r1925_6, r1925_3 -# 1926| v1926_1(void) = NoOp : -# 1918| v1918_5(void) = ReturnVoid : -# 1918| v1918_6(void) = AliasedUse : ~m1925_5 -# 1918| v1918_7(void) = ExitFunction : +# 1925| r1925_3(int) = Call[StaticMemberFunction] : func:r1925_1, 0:r1925_2 +# 1925| m1925_4(unknown) = ^CallSideEffect : ~m1923_6 +# 1925| m1925_5(unknown) = Chi : total:m1923_6, partial:m1925_4 +# 1925| r1925_6(glval) = VariableAddress[y] : +# 1925| m1925_7(int) = Store[y] : &:r1925_6, r1925_3 +# 1926| r1926_1(glval) = VariableAddress[z] : +# 1926| m1926_2(int) = Uninitialized[z] : &:r1926_1 +# 1927| r1927_1(glval) = FunctionAddress[static_function] : +# 1927| r1927_2(int) = Constant[10] : +# 1927| r1927_3(int) = Call[static_function] : func:r1927_1, 0:r1927_2 +# 1927| m1927_4(unknown) = ^CallSideEffect : ~m1925_5 +# 1927| m1927_5(unknown) = Chi : total:m1925_5, partial:m1927_4 +# 1927| r1927_6(glval) = VariableAddress[z] : +# 1927| m1927_7(int) = Store[z] : &:r1927_6, r1927_3 +# 1928| v1928_1(void) = NoOp : +# 1920| v1920_5(void) = ReturnVoid : +# 1920| v1920_6(void) = AliasedUse : ~m1927_5 +# 1920| v1920_7(void) = ExitFunction : -# 1928| void test_double_assign() -# 1928| Block 0 -# 1928| v1928_1(void) = EnterFunction : -# 1928| m1928_2(unknown) = AliasedDefinition : -# 1928| m1928_3(unknown) = InitializeNonLocal : -# 1928| m1928_4(unknown) = Chi : total:m1928_2, partial:m1928_3 -# 1929| r1929_1(glval) = VariableAddress[i] : -# 1929| m1929_2(int) = Uninitialized[i] : &:r1929_1 -# 1929| r1929_3(glval) = VariableAddress[j] : -# 1929| m1929_4(int) = Uninitialized[j] : &:r1929_3 -# 1930| r1930_1(int) = Constant[40] : -# 1930| r1930_2(glval) = VariableAddress[j] : -# 1930| m1930_3(int) = Store[j] : &:r1930_2, r1930_1 -# 1930| r1930_4(int) = Load[j] : &:r1930_2, m1930_3 -# 1930| r1930_5(glval) = VariableAddress[i] : -# 1930| m1930_6(int) = Store[i] : &:r1930_5, r1930_4 -# 1931| v1931_1(void) = NoOp : -# 1928| v1928_5(void) = ReturnVoid : -# 1928| v1928_6(void) = AliasedUse : m1928_3 -# 1928| v1928_7(void) = ExitFunction : +# 1930| void test_double_assign() +# 1930| Block 0 +# 1930| v1930_1(void) = EnterFunction : +# 1930| m1930_2(unknown) = AliasedDefinition : +# 1930| m1930_3(unknown) = InitializeNonLocal : +# 1930| m1930_4(unknown) = Chi : total:m1930_2, partial:m1930_3 +# 1931| r1931_1(glval) = VariableAddress[i] : +# 1931| m1931_2(int) = Uninitialized[i] : &:r1931_1 +# 1931| r1931_3(glval) = VariableAddress[j] : +# 1931| m1931_4(int) = Uninitialized[j] : &:r1931_3 +# 1932| r1932_1(int) = Constant[40] : +# 1932| r1932_2(glval) = VariableAddress[j] : +# 1932| m1932_3(int) = Store[j] : &:r1932_2, r1932_1 +# 1932| r1932_4(int) = Load[j] : &:r1932_2, m1932_3 +# 1932| r1932_5(glval) = VariableAddress[i] : +# 1932| m1932_6(int) = Store[i] : &:r1932_5, r1932_4 +# 1933| v1933_1(void) = NoOp : +# 1930| v1930_5(void) = ReturnVoid : +# 1930| v1930_6(void) = AliasedUse : m1930_3 +# 1930| v1930_7(void) = ExitFunction : -# 1933| void test_assign_with_assign_operation() -# 1933| Block 0 -# 1933| v1933_1(void) = EnterFunction : -# 1933| m1933_2(unknown) = AliasedDefinition : -# 1933| m1933_3(unknown) = InitializeNonLocal : -# 1933| m1933_4(unknown) = Chi : total:m1933_2, partial:m1933_3 -# 1934| r1934_1(glval) = VariableAddress[i] : -# 1934| m1934_2(int) = Uninitialized[i] : &:r1934_1 -# 1934| r1934_3(glval) = VariableAddress[j] : -# 1934| r1934_4(int) = Constant[0] : -# 1934| m1934_5(int) = Store[j] : &:r1934_3, r1934_4 -# 1935| r1935_1(int) = Constant[40] : -# 1935| r1935_2(glval) = VariableAddress[j] : -# 1935| r1935_3(int) = Load[j] : &:r1935_2, m1934_5 -# 1935| r1935_4(int) = Add : r1935_3, r1935_1 -# 1935| m1935_5(int) = Store[j] : &:r1935_2, r1935_4 -# 1935| r1935_6(int) = Load[j] : &:r1935_2, m1935_5 -# 1935| r1935_7(glval) = VariableAddress[i] : -# 1935| m1935_8(int) = Store[i] : &:r1935_7, r1935_6 -# 1936| v1936_1(void) = NoOp : -# 1933| v1933_5(void) = ReturnVoid : -# 1933| v1933_6(void) = AliasedUse : m1933_3 -# 1933| v1933_7(void) = ExitFunction : +# 1935| void test_assign_with_assign_operation() +# 1935| Block 0 +# 1935| v1935_1(void) = EnterFunction : +# 1935| m1935_2(unknown) = AliasedDefinition : +# 1935| m1935_3(unknown) = InitializeNonLocal : +# 1935| m1935_4(unknown) = Chi : total:m1935_2, partial:m1935_3 +# 1936| r1936_1(glval) = VariableAddress[i] : +# 1936| m1936_2(int) = Uninitialized[i] : &:r1936_1 +# 1936| r1936_3(glval) = VariableAddress[j] : +# 1936| r1936_4(int) = Constant[0] : +# 1936| m1936_5(int) = Store[j] : &:r1936_3, r1936_4 +# 1937| r1937_1(int) = Constant[40] : +# 1937| r1937_2(glval) = VariableAddress[j] : +# 1937| r1937_3(int) = Load[j] : &:r1937_2, m1936_5 +# 1937| r1937_4(int) = Add : r1937_3, r1937_1 +# 1937| m1937_5(int) = Store[j] : &:r1937_2, r1937_4 +# 1937| r1937_6(int) = Load[j] : &:r1937_2, m1937_5 +# 1937| r1937_7(glval) = VariableAddress[i] : +# 1937| m1937_8(int) = Store[i] : &:r1937_7, r1937_6 +# 1938| v1938_1(void) = NoOp : +# 1935| v1935_5(void) = ReturnVoid : +# 1935| v1935_6(void) = AliasedUse : m1935_3 +# 1935| v1935_7(void) = ExitFunction : -# 1942| D& D::ReferenceStaticMemberFunction() -# 1942| Block 0 -# 1942| v1942_1(void) = EnterFunction : -# 1942| m1942_2(unknown) = AliasedDefinition : -# 1942| m1942_3(unknown) = InitializeNonLocal : -# 1942| m1942_4(unknown) = Chi : total:m1942_2, partial:m1942_3 -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[x] : -# 1943| r1943_3(D &) = CopyValue : r1943_2 -# 1943| m1943_4(D &) = Store[#return] : &:r1943_1, r1943_3 -# 1942| r1942_5(glval) = VariableAddress[#return] : -# 1942| v1942_6(void) = ReturnValue : &:r1942_5, m1943_4 -# 1942| v1942_7(void) = AliasedUse : m1942_3 -# 1942| v1942_8(void) = ExitFunction : +# 1944| D& D::ReferenceStaticMemberFunction() +# 1944| Block 0 +# 1944| v1944_1(void) = EnterFunction : +# 1944| m1944_2(unknown) = AliasedDefinition : +# 1944| m1944_3(unknown) = InitializeNonLocal : +# 1944| m1944_4(unknown) = Chi : total:m1944_2, partial:m1944_3 +# 1945| r1945_1(glval) = VariableAddress[#return] : +# 1945| r1945_2(glval) = VariableAddress[x] : +# 1945| r1945_3(D &) = CopyValue : r1945_2 +# 1945| m1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 +# 1944| r1944_5(glval) = VariableAddress[#return] : +# 1944| v1944_6(void) = ReturnValue : &:r1944_5, m1945_4 +# 1944| v1944_7(void) = AliasedUse : m1944_3 +# 1944| v1944_8(void) = ExitFunction : -# 1945| D D::ObjectStaticMemberFunction() -# 1945| Block 0 -# 1945| v1945_1(void) = EnterFunction : -# 1945| m1945_2(unknown) = AliasedDefinition : -# 1945| m1945_3(unknown) = InitializeNonLocal : -# 1945| m1945_4(unknown) = Chi : total:m1945_2, partial:m1945_3 -# 1946| r1946_1(glval) = VariableAddress[#return] : -# 1946| r1946_2(glval) = VariableAddress[x] : -# 1946| r1946_3(D) = Load[x] : &:r1946_2, ~m1945_3 -# 1946| m1946_4(D) = Store[#return] : &:r1946_1, r1946_3 -# 1945| r1945_5(glval) = VariableAddress[#return] : -# 1945| v1945_6(void) = ReturnValue : &:r1945_5, m1946_4 -# 1945| v1945_7(void) = AliasedUse : m1945_3 -# 1945| v1945_8(void) = ExitFunction : +# 1947| D D::ObjectStaticMemberFunction() +# 1947| Block 0 +# 1947| v1947_1(void) = EnterFunction : +# 1947| m1947_2(unknown) = AliasedDefinition : +# 1947| m1947_3(unknown) = InitializeNonLocal : +# 1947| m1947_4(unknown) = Chi : total:m1947_2, partial:m1947_3 +# 1948| r1948_1(glval) = VariableAddress[#return] : +# 1948| r1948_2(glval) = VariableAddress[x] : +# 1948| r1948_3(D) = Load[x] : &:r1948_2, ~m1947_3 +# 1948| m1948_4(D) = Store[#return] : &:r1948_1, r1948_3 +# 1947| r1947_5(glval) = VariableAddress[#return] : +# 1947| v1947_6(void) = ReturnValue : &:r1947_5, m1948_4 +# 1947| v1947_7(void) = AliasedUse : m1947_3 +# 1947| v1947_8(void) = ExitFunction : -# 1950| void test_static_member_functions_with_reference_return() -# 1950| Block 0 -# 1950| v1950_1(void) = EnterFunction : -# 1950| m1950_2(unknown) = AliasedDefinition : -# 1950| m1950_3(unknown) = InitializeNonLocal : -# 1950| m1950_4(unknown) = Chi : total:m1950_2, partial:m1950_3 -# 1951| r1951_1(glval) = VariableAddress[d] : -# 1951| m1951_2(D) = Uninitialized[d] : &:r1951_1 +# 1952| void test_static_member_functions_with_reference_return() +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| m1952_2(unknown) = AliasedDefinition : +# 1952| m1952_3(unknown) = InitializeNonLocal : +# 1952| m1952_4(unknown) = Chi : total:m1952_2, partial:m1952_3 # 1953| r1953_1(glval) = VariableAddress[d] : -# 1953| r1953_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1953| r1953_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1953_2 -# 1953| m1953_4(unknown) = ^CallSideEffect : ~m1950_4 -# 1953| m1953_5(unknown) = Chi : total:m1950_4, partial:m1953_4 -# 1953| r1953_6(glval) = CopyValue : r1953_3 -# 1954| r1954_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1954| r1954_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1954_1 -# 1954| m1954_3(unknown) = ^CallSideEffect : ~m1953_5 -# 1954| m1954_4(unknown) = Chi : total:m1953_5, partial:m1954_3 -# 1954| r1954_5(glval) = CopyValue : r1954_2 +# 1953| m1953_2(D) = Uninitialized[d] : &:r1953_1 # 1955| r1955_1(glval) = VariableAddress[d] : -# 1955| r1955_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1955| r1955_3(D) = Call[ObjectStaticMemberFunction] : func:r1955_2 -# 1955| m1955_4(unknown) = ^CallSideEffect : ~m1954_4 -# 1955| m1955_5(unknown) = Chi : total:m1954_4, partial:m1955_4 -# 1956| r1956_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1956| r1956_2(D) = Call[ObjectStaticMemberFunction] : func:r1956_1 +# 1955| r1955_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1955| r1955_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1955_2 +# 1955| m1955_4(unknown) = ^CallSideEffect : ~m1952_4 +# 1955| m1955_5(unknown) = Chi : total:m1952_4, partial:m1955_4 +# 1955| r1955_6(glval) = CopyValue : r1955_3 +# 1956| r1956_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1956| r1956_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1956_1 # 1956| m1956_3(unknown) = ^CallSideEffect : ~m1955_5 # 1956| m1956_4(unknown) = Chi : total:m1955_5, partial:m1956_3 -# 1958| r1958_1(glval) = VariableAddress[x] : -# 1958| m1958_2(D) = Uninitialized[x] : &:r1958_1 -# 1959| r1959_1(glval) = VariableAddress[d] : -# 1959| r1959_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1959| r1959_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1959_2 -# 1959| m1959_4(unknown) = ^CallSideEffect : ~m1956_4 -# 1959| m1959_5(unknown) = Chi : total:m1956_4, partial:m1959_4 -# 1959| r1959_6(D) = Load[?] : &:r1959_3, ~m1959_5 -# 1959| r1959_7(glval) = VariableAddress[x] : -# 1959| m1959_8(D) = Store[x] : &:r1959_7, r1959_6 -# 1960| r1960_1(glval) = VariableAddress[y] : -# 1960| m1960_2(D) = Uninitialized[y] : &:r1960_1 -# 1961| r1961_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1961| r1961_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_1 -# 1961| m1961_3(unknown) = ^CallSideEffect : ~m1959_5 -# 1961| m1961_4(unknown) = Chi : total:m1959_5, partial:m1961_3 -# 1961| r1961_5(D) = Load[?] : &:r1961_2, ~m1961_4 -# 1961| r1961_6(glval) = VariableAddress[y] : -# 1961| m1961_7(D) = Store[y] : &:r1961_6, r1961_5 -# 1962| r1962_1(glval) = VariableAddress[j] : -# 1962| m1962_2(D) = Uninitialized[j] : &:r1962_1 -# 1963| r1963_1(glval) = VariableAddress[d] : -# 1963| r1963_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1963| r1963_3(D) = Call[ObjectStaticMemberFunction] : func:r1963_2 -# 1963| m1963_4(unknown) = ^CallSideEffect : ~m1961_4 -# 1963| m1963_5(unknown) = Chi : total:m1961_4, partial:m1963_4 -# 1963| r1963_6(glval) = VariableAddress[j] : -# 1963| m1963_7(D) = Store[j] : &:r1963_6, r1963_3 -# 1964| r1964_1(glval) = VariableAddress[k] : -# 1964| m1964_2(D) = Uninitialized[k] : &:r1964_1 -# 1965| r1965_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1965| r1965_2(D) = Call[ObjectStaticMemberFunction] : func:r1965_1 -# 1965| m1965_3(unknown) = ^CallSideEffect : ~m1963_5 -# 1965| m1965_4(unknown) = Chi : total:m1963_5, partial:m1965_3 -# 1965| r1965_5(glval) = VariableAddress[k] : -# 1965| m1965_6(D) = Store[k] : &:r1965_5, r1965_2 -# 1966| v1966_1(void) = NoOp : -# 1950| v1950_5(void) = ReturnVoid : -# 1950| v1950_6(void) = AliasedUse : ~m1965_4 -# 1950| v1950_7(void) = ExitFunction : +# 1956| r1956_5(glval) = CopyValue : r1956_2 +# 1957| r1957_1(glval) = VariableAddress[d] : +# 1957| r1957_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1957| r1957_3(D) = Call[ObjectStaticMemberFunction] : func:r1957_2 +# 1957| m1957_4(unknown) = ^CallSideEffect : ~m1956_4 +# 1957| m1957_5(unknown) = Chi : total:m1956_4, partial:m1957_4 +# 1958| r1958_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1958| r1958_2(D) = Call[ObjectStaticMemberFunction] : func:r1958_1 +# 1958| m1958_3(unknown) = ^CallSideEffect : ~m1957_5 +# 1958| m1958_4(unknown) = Chi : total:m1957_5, partial:m1958_3 +# 1960| r1960_1(glval) = VariableAddress[x] : +# 1960| m1960_2(D) = Uninitialized[x] : &:r1960_1 +# 1961| r1961_1(glval) = VariableAddress[d] : +# 1961| r1961_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1961| r1961_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_2 +# 1961| m1961_4(unknown) = ^CallSideEffect : ~m1958_4 +# 1961| m1961_5(unknown) = Chi : total:m1958_4, partial:m1961_4 +# 1961| r1961_6(D) = Load[?] : &:r1961_3, ~m1961_5 +# 1961| r1961_7(glval) = VariableAddress[x] : +# 1961| m1961_8(D) = Store[x] : &:r1961_7, r1961_6 +# 1962| r1962_1(glval) = VariableAddress[y] : +# 1962| m1962_2(D) = Uninitialized[y] : &:r1962_1 +# 1963| r1963_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1963| r1963_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1963_1 +# 1963| m1963_3(unknown) = ^CallSideEffect : ~m1961_5 +# 1963| m1963_4(unknown) = Chi : total:m1961_5, partial:m1963_3 +# 1963| r1963_5(D) = Load[?] : &:r1963_2, ~m1963_4 +# 1963| r1963_6(glval) = VariableAddress[y] : +# 1963| m1963_7(D) = Store[y] : &:r1963_6, r1963_5 +# 1964| r1964_1(glval) = VariableAddress[j] : +# 1964| m1964_2(D) = Uninitialized[j] : &:r1964_1 +# 1965| r1965_1(glval) = VariableAddress[d] : +# 1965| r1965_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1965| r1965_3(D) = Call[ObjectStaticMemberFunction] : func:r1965_2 +# 1965| m1965_4(unknown) = ^CallSideEffect : ~m1963_4 +# 1965| m1965_5(unknown) = Chi : total:m1963_4, partial:m1965_4 +# 1965| r1965_6(glval) = VariableAddress[j] : +# 1965| m1965_7(D) = Store[j] : &:r1965_6, r1965_3 +# 1966| r1966_1(glval) = VariableAddress[k] : +# 1966| m1966_2(D) = Uninitialized[k] : &:r1966_1 +# 1967| r1967_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1967| r1967_2(D) = Call[ObjectStaticMemberFunction] : func:r1967_1 +# 1967| m1967_3(unknown) = ^CallSideEffect : ~m1965_5 +# 1967| m1967_4(unknown) = Chi : total:m1965_5, partial:m1967_3 +# 1967| r1967_5(glval) = VariableAddress[k] : +# 1967| m1967_6(D) = Store[k] : &:r1967_5, r1967_2 +# 1968| v1968_1(void) = NoOp : +# 1952| v1952_5(void) = ReturnVoid : +# 1952| v1952_6(void) = AliasedUse : ~m1967_4 +# 1952| v1952_7(void) = ExitFunction : -# 1968| void test_volatile() -# 1968| Block 0 -# 1968| v1968_1(void) = EnterFunction : -# 1968| m1968_2(unknown) = AliasedDefinition : -# 1968| m1968_3(unknown) = InitializeNonLocal : -# 1968| m1968_4(unknown) = Chi : total:m1968_2, partial:m1968_3 -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| m1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[x] : -# 1970| r1970_2(int) = Load[x] : &:r1970_1, m1969_2 -# 1971| v1971_1(void) = NoOp : -# 1968| v1968_5(void) = ReturnVoid : -# 1968| v1968_6(void) = AliasedUse : m1968_3 -# 1968| v1968_7(void) = ExitFunction : +# 1970| void test_volatile() +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| m1970_2(unknown) = AliasedDefinition : +# 1970| m1970_3(unknown) = InitializeNonLocal : +# 1970| m1970_4(unknown) = Chi : total:m1970_2, partial:m1970_3 +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| m1971_2(int) = Uninitialized[x] : &:r1971_1 +# 1972| r1972_1(glval) = VariableAddress[x] : +# 1972| r1972_2(int) = Load[x] : &:r1972_1, m1971_2 +# 1973| v1973_1(void) = NoOp : +# 1970| v1970_5(void) = ReturnVoid : +# 1970| v1970_6(void) = AliasedUse : m1970_3 +# 1970| v1970_7(void) = ExitFunction : -# 1979| void value_category_test() -# 1979| Block 0 -# 1979| v1979_1(void) = EnterFunction : -# 1979| m1979_2(unknown) = AliasedDefinition : -# 1979| m1979_3(unknown) = InitializeNonLocal : -# 1979| m1979_4(unknown) = Chi : total:m1979_2, partial:m1979_3 -# 1980| r1980_1(glval) = VariableAddress[c] : -# 1980| m1980_2(ValCat) = Uninitialized[c] : &:r1980_1 +# 1981| void value_category_test() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| m1981_2(unknown) = AliasedDefinition : +# 1981| m1981_3(unknown) = InitializeNonLocal : +# 1981| m1981_4(unknown) = Chi : total:m1981_2, partial:m1981_3 +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| m1982_2(ValCat) = Uninitialized[c] : &:r1982_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| m0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, m0_2 -# 1982| r1982_1(glval) = VariableAddress[c] : -# 1982| r1982_2(glval) = FunctionAddress[lvalue] : -# 1982| r1982_3(ValCat &) = Call[lvalue] : func:r1982_2 -# 1982| m1982_4(unknown) = ^CallSideEffect : ~m1979_4 -# 1982| m1982_5(unknown) = Chi : total:m1979_4, partial:m1982_4 -# 1982| r1982_6(glval) = CopyValue : r1982_3 -# 1982| m1982_7(ValCat) = Store[?] : &:r1982_6, r0_3 -# 1982| m1982_8(unknown) = Chi : total:m1982_5, partial:m1982_7 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[lvalue] : +# 1984| r1984_3(ValCat &) = Call[lvalue] : func:r1984_2 +# 1984| m1984_4(unknown) = ^CallSideEffect : ~m1981_4 +# 1984| m1984_5(unknown) = Chi : total:m1981_4, partial:m1984_4 +# 1984| r1984_6(glval) = CopyValue : r1984_3 +# 1984| m1984_7(ValCat) = Store[?] : &:r1984_6, r0_3 +# 1984| m1984_8(unknown) = Chi : total:m1984_5, partial:m1984_7 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| m0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, m0_5 -# 1983| r1983_1(glval) = VariableAddress[c] : -# 1983| r1983_2(glval) = FunctionAddress[xvalue] : -# 1983| r1983_3(ValCat &&) = Call[xvalue] : func:r1983_2 -# 1983| m1983_4(unknown) = ^CallSideEffect : ~m1982_8 -# 1983| m1983_5(unknown) = Chi : total:m1982_8, partial:m1983_4 -# 1983| r1983_6(glval) = CopyValue : r1983_3 -# 1983| m1983_7(ValCat) = Store[?] : &:r1983_6, r0_6 -# 1983| m1983_8(unknown) = Chi : total:m1983_5, partial:m1983_7 +# 1985| r1985_1(glval) = VariableAddress[c] : +# 1985| r1985_2(glval) = FunctionAddress[xvalue] : +# 1985| r1985_3(ValCat &&) = Call[xvalue] : func:r1985_2 +# 1985| m1985_4(unknown) = ^CallSideEffect : ~m1984_8 +# 1985| m1985_5(unknown) = Chi : total:m1984_8, partial:m1985_4 +# 1985| r1985_6(glval) = CopyValue : r1985_3 +# 1985| m1985_7(ValCat) = Store[?] : &:r1985_6, r0_6 +# 1985| m1985_8(unknown) = Chi : total:m1985_5, partial:m1985_7 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| m0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, m0_8 -# 1984| r1984_1(glval) = VariableAddress[#temp1984:5] : -# 1984| r1984_2(glval) = VariableAddress[c] : -# 1984| r1984_3(glval) = FunctionAddress[prvalue] : -# 1984| r1984_4(ValCat) = Call[prvalue] : func:r1984_3 -# 1984| m1984_5(unknown) = ^CallSideEffect : ~m1983_8 -# 1984| m1984_6(unknown) = Chi : total:m1983_8, partial:m1984_5 -# 1984| m1984_7(ValCat) = Store[#temp1984:5] : &:r1984_1, r1984_4 -# 1984| m1984_8(ValCat) = Store[#temp1984:5] : &:r1984_1, r0_9 +# 1986| r1986_1(glval) = VariableAddress[#temp1986:5] : +# 1986| r1986_2(glval) = VariableAddress[c] : +# 1986| r1986_3(glval) = FunctionAddress[prvalue] : +# 1986| r1986_4(ValCat) = Call[prvalue] : func:r1986_3 +# 1986| m1986_5(unknown) = ^CallSideEffect : ~m1985_8 +# 1986| m1986_6(unknown) = Chi : total:m1985_8, partial:m1986_5 +# 1986| m1986_7(ValCat) = Store[#temp1986:5] : &:r1986_1, r1986_4 +# 1986| m1986_8(ValCat) = Store[#temp1986:5] : &:r1986_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| m0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, m0_11 -# 1985| r1985_1(glval) = FunctionAddress[lvalue] : -# 1985| r1985_2(ValCat &) = Call[lvalue] : func:r1985_1 -# 1985| m1985_3(unknown) = ^CallSideEffect : ~m1984_6 -# 1985| m1985_4(unknown) = Chi : total:m1984_6, partial:m1985_3 -# 1985| r1985_5(glval) = CopyValue : r1985_2 -# 1985| m1985_6(ValCat) = Store[?] : &:r1985_5, r0_12 -# 1985| m1985_7(unknown) = Chi : total:m1985_4, partial:m1985_6 +# 1987| r1987_1(glval) = FunctionAddress[lvalue] : +# 1987| r1987_2(ValCat &) = Call[lvalue] : func:r1987_1 +# 1987| m1987_3(unknown) = ^CallSideEffect : ~m1986_6 +# 1987| m1987_4(unknown) = Chi : total:m1986_6, partial:m1987_3 +# 1987| r1987_5(glval) = CopyValue : r1987_2 +# 1987| m1987_6(ValCat) = Store[?] : &:r1987_5, r0_12 +# 1987| m1987_7(unknown) = Chi : total:m1987_4, partial:m1987_6 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| m0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, m0_14 -# 1986| r1986_1(glval) = FunctionAddress[xvalue] : -# 1986| r1986_2(ValCat &&) = Call[xvalue] : func:r1986_1 -# 1986| m1986_3(unknown) = ^CallSideEffect : ~m1985_7 -# 1986| m1986_4(unknown) = Chi : total:m1985_7, partial:m1986_3 -# 1986| r1986_5(glval) = CopyValue : r1986_2 -# 1986| m1986_6(ValCat) = Store[?] : &:r1986_5, r0_15 -# 1986| m1986_7(unknown) = Chi : total:m1986_4, partial:m1986_6 +# 1988| r1988_1(glval) = FunctionAddress[xvalue] : +# 1988| r1988_2(ValCat &&) = Call[xvalue] : func:r1988_1 +# 1988| m1988_3(unknown) = ^CallSideEffect : ~m1987_7 +# 1988| m1988_4(unknown) = Chi : total:m1987_7, partial:m1988_3 +# 1988| r1988_5(glval) = CopyValue : r1988_2 +# 1988| m1988_6(ValCat) = Store[?] : &:r1988_5, r0_15 +# 1988| m1988_7(unknown) = Chi : total:m1988_4, partial:m1988_6 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| m0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, m0_17 -# 1987| r1987_1(glval) = VariableAddress[#temp1987:5] : -# 1987| r1987_2(glval) = FunctionAddress[prvalue] : -# 1987| r1987_3(ValCat) = Call[prvalue] : func:r1987_2 -# 1987| m1987_4(unknown) = ^CallSideEffect : ~m1986_7 -# 1987| m1987_5(unknown) = Chi : total:m1986_7, partial:m1987_4 -# 1987| m1987_6(ValCat) = Store[#temp1987:5] : &:r1987_1, r1987_3 -# 1987| m1987_7(ValCat) = Store[#temp1987:5] : &:r1987_1, r0_18 -# 1988| v1988_1(void) = NoOp : -# 1979| v1979_5(void) = ReturnVoid : -# 1979| v1979_6(void) = AliasedUse : ~m1987_5 -# 1979| v1979_7(void) = ExitFunction : +# 1989| r1989_1(glval) = VariableAddress[#temp1989:5] : +# 1989| r1989_2(glval) = FunctionAddress[prvalue] : +# 1989| r1989_3(ValCat) = Call[prvalue] : func:r1989_2 +# 1989| m1989_4(unknown) = ^CallSideEffect : ~m1988_7 +# 1989| m1989_5(unknown) = Chi : total:m1988_7, partial:m1989_4 +# 1989| m1989_6(ValCat) = Store[#temp1989:5] : &:r1989_1, r1989_3 +# 1989| m1989_7(ValCat) = Store[#temp1989:5] : &:r1989_1, r0_18 +# 1990| v1990_1(void) = NoOp : +# 1981| v1981_5(void) = ReturnVoid : +# 1981| v1981_6(void) = AliasedUse : ~m1989_5 +# 1981| v1981_7(void) = ExitFunction : -# 1990| void SetStaticFuncPtr() -# 1990| Block 0 -# 1990| v1990_1(void) = EnterFunction : -# 1990| m1990_2(unknown) = AliasedDefinition : -# 1990| m1990_3(unknown) = InitializeNonLocal : -# 1990| m1990_4(unknown) = Chi : total:m1990_2, partial:m1990_3 -# 1991| r1991_1(glval) = VariableAddress[c] : -# 1991| m1991_2(C) = Uninitialized[c] : &:r1991_1 -# 1991| r1991_3(glval) = FunctionAddress[C] : -# 1991| v1991_4(void) = Call[C] : func:r1991_3, this:r1991_1 -# 1991| m1991_5(unknown) = ^CallSideEffect : ~m1990_4 -# 1991| m1991_6(unknown) = Chi : total:m1990_4, partial:m1991_5 -# 1991| m1991_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1991_1 -# 1991| m1991_8(C) = Chi : total:m1991_2, partial:m1991_7 -# 1992| r1992_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1992| r1992_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1992| m1992_3(..(*)(..)) = Store[pfn] : &:r1992_1, r1992_2 +# 1992| void SetStaticFuncPtr() +# 1992| Block 0 +# 1992| v1992_1(void) = EnterFunction : +# 1992| m1992_2(unknown) = AliasedDefinition : +# 1992| m1992_3(unknown) = InitializeNonLocal : +# 1992| m1992_4(unknown) = Chi : total:m1992_2, partial:m1992_3 # 1993| r1993_1(glval) = VariableAddress[c] : -# 1993| r1993_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1993| r1993_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1993| m1993_4(..(*)(..)) = Store[pfn] : &:r1993_3, r1993_2 -# 1994| v1994_1(void) = NoOp : -# 1990| v1990_5(void) = ReturnVoid : -# 1990| v1990_6(void) = AliasedUse : ~m1991_6 -# 1990| v1990_7(void) = ExitFunction : +# 1993| m1993_2(C) = Uninitialized[c] : &:r1993_1 +# 1993| r1993_3(glval) = FunctionAddress[C] : +# 1993| v1993_4(void) = Call[C] : func:r1993_3, this:r1993_1 +# 1993| m1993_5(unknown) = ^CallSideEffect : ~m1992_4 +# 1993| m1993_6(unknown) = Chi : total:m1992_4, partial:m1993_5 +# 1993| m1993_7(C) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 +# 1993| m1993_8(C) = Chi : total:m1993_2, partial:m1993_7 +# 1994| r1994_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1994| r1994_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1994| m1994_3(..(*)(..)) = Store[pfn] : &:r1994_1, r1994_2 +# 1995| r1995_1(glval) = VariableAddress[c] : +# 1995| r1995_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1995| r1995_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1995| m1995_4(..(*)(..)) = Store[pfn] : &:r1995_3, r1995_2 +# 1996| v1996_1(void) = NoOp : +# 1992| v1992_5(void) = ReturnVoid : +# 1992| v1992_6(void) = AliasedUse : ~m1993_6 +# 1992| v1992_7(void) = ExitFunction : -# 1996| void TernaryTestInt(bool, int, int, int) -# 1996| Block 0 -# 1996| v1996_1(void) = EnterFunction : -# 1996| m1996_2(unknown) = AliasedDefinition : -# 1996| m1996_3(unknown) = InitializeNonLocal : -# 1996| m1996_4(unknown) = Chi : total:m1996_2, partial:m1996_3 -# 1996| r1996_5(glval) = VariableAddress[a] : -# 1996| m1996_6(bool) = InitializeParameter[a] : &:r1996_5 -# 1996| r1996_7(glval) = VariableAddress[x] : -# 1996| m1996_8(int) = InitializeParameter[x] : &:r1996_7 -# 1996| r1996_9(glval) = VariableAddress[y] : -# 1996| m1996_10(int) = InitializeParameter[y] : &:r1996_9 -# 1996| r1996_11(glval) = VariableAddress[z] : -# 1996| m1996_12(int) = InitializeParameter[z] : &:r1996_11 -# 1997| r1997_1(glval) = VariableAddress[a] : -# 1997| r1997_2(bool) = Load[a] : &:r1997_1, m1996_6 -# 1997| v1997_3(void) = ConditionalBranch : r1997_2 +# 1998| void TernaryTestInt(bool, int, int, int) +# 1998| Block 0 +# 1998| v1998_1(void) = EnterFunction : +# 1998| m1998_2(unknown) = AliasedDefinition : +# 1998| m1998_3(unknown) = InitializeNonLocal : +# 1998| m1998_4(unknown) = Chi : total:m1998_2, partial:m1998_3 +# 1998| r1998_5(glval) = VariableAddress[a] : +# 1998| m1998_6(bool) = InitializeParameter[a] : &:r1998_5 +# 1998| r1998_7(glval) = VariableAddress[x] : +# 1998| m1998_8(int) = InitializeParameter[x] : &:r1998_7 +# 1998| r1998_9(glval) = VariableAddress[y] : +# 1998| m1998_10(int) = InitializeParameter[y] : &:r1998_9 +# 1998| r1998_11(glval) = VariableAddress[z] : +# 1998| m1998_12(int) = InitializeParameter[z] : &:r1998_11 +# 1999| r1999_1(glval) = VariableAddress[a] : +# 1999| r1999_2(bool) = Load[a] : &:r1999_1, m1998_6 +# 1999| v1999_3(void) = ConditionalBranch : r1999_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1997| Block 1 -# 1997| m1997_4(int) = Phi : from 2:m1997_12, from 3:m1997_16 -# 1997| r1997_5(glval) = VariableAddress[#temp1997:9] : -# 1997| r1997_6(int) = Load[#temp1997:9] : &:r1997_5, m1997_4 -# 1997| r1997_7(glval) = VariableAddress[z] : -# 1997| m1997_8(int) = Store[z] : &:r1997_7, r1997_6 -# 1998| r1998_1(glval) = VariableAddress[a] : -# 1998| r1998_2(bool) = Load[a] : &:r1998_1, m1996_6 -# 1998| v1998_3(void) = ConditionalBranch : r1998_2 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 1997| Block 2 -# 1997| r1997_9(glval) = VariableAddress[x] : -# 1997| r1997_10(int) = Load[x] : &:r1997_9, m1996_8 -# 1997| r1997_11(glval) = VariableAddress[#temp1997:9] : -# 1997| m1997_12(int) = Store[#temp1997:9] : &:r1997_11, r1997_10 -#-----| Goto -> Block 1 - -# 1997| Block 3 -# 1997| r1997_13(glval) = VariableAddress[y] : -# 1997| r1997_14(int) = Load[y] : &:r1997_13, m1996_10 -# 1997| r1997_15(glval) = VariableAddress[#temp1997:9] : -# 1997| m1997_16(int) = Store[#temp1997:9] : &:r1997_15, r1997_14 -#-----| Goto -> Block 1 - -# 1998| Block 4 -# 1998| m1998_4(int) = Phi : from 5:m1998_12, from 6:m1998_15 -# 1998| r1998_5(glval) = VariableAddress[#temp1998:9] : -# 1998| r1998_6(int) = Load[#temp1998:9] : &:r1998_5, m1998_4 -# 1998| r1998_7(glval) = VariableAddress[z] : -# 1998| m1998_8(int) = Store[z] : &:r1998_7, r1998_6 -# 1999| r1999_1(glval) = VariableAddress[a] : -# 1999| r1999_2(bool) = Load[a] : &:r1999_1, m1996_6 -# 1999| v1999_3(void) = ConditionalBranch : r1999_2 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 1998| Block 5 -# 1998| r1998_9(glval) = VariableAddress[x] : -# 1998| r1998_10(int) = Load[x] : &:r1998_9, m1996_8 -# 1998| r1998_11(glval) = VariableAddress[#temp1998:9] : -# 1998| m1998_12(int) = Store[#temp1998:9] : &:r1998_11, r1998_10 -#-----| Goto -> Block 4 - -# 1998| Block 6 -# 1998| r1998_13(int) = Constant[5] : -# 1998| r1998_14(glval) = VariableAddress[#temp1998:9] : -# 1998| m1998_15(int) = Store[#temp1998:9] : &:r1998_14, r1998_13 -#-----| Goto -> Block 4 - -# 1999| Block 7 -# 1999| m1999_4(int) = Phi : from 8:m1999_11, from 9:m1999_14 +# 1999| Block 1 +# 1999| m1999_4(int) = Phi : from 2:m1999_12, from 3:m1999_16 # 1999| r1999_5(glval) = VariableAddress[#temp1999:9] : # 1999| r1999_6(int) = Load[#temp1999:9] : &:r1999_5, m1999_4 # 1999| r1999_7(glval) = VariableAddress[z] : # 1999| m1999_8(int) = Store[z] : &:r1999_7, r1999_6 -# 2000| r2000_1(int) = Constant[7] : -# 2000| r2000_2(glval) = VariableAddress[a] : -# 2000| r2000_3(bool) = Load[a] : &:r2000_2, m1996_6 -# 2000| v2000_4(void) = ConditionalBranch : r2000_3 -#-----| False -> Block 12 -#-----| True -> Block 11 - -# 1999| Block 8 -# 1999| r1999_9(int) = Constant[3] : -# 1999| r1999_10(glval) = VariableAddress[#temp1999:9] : -# 1999| m1999_11(int) = Store[#temp1999:9] : &:r1999_10, r1999_9 -#-----| Goto -> Block 7 - -# 1999| Block 9 -# 1999| r1999_12(int) = Constant[5] : -# 1999| r1999_13(glval) = VariableAddress[#temp1999:9] : -# 1999| m1999_14(int) = Store[#temp1999:9] : &:r1999_13, r1999_12 -#-----| Goto -> Block 7 - -# 2000| Block 10 -# 2000| m2000_5(glval) = Phi : from 11:m2000_12, from 12:m2000_15 -# 2000| r2000_6(glval) = VariableAddress[#temp2000:6] : -# 2000| r2000_7(glval) = Load[#temp2000:6] : &:r2000_6, m2000_5 -# 2000| m2000_8(int) = Store[?] : &:r2000_7, r2000_1 -# 2000| m2000_9(unknown) = Chi : total:m1996_4, partial:m2000_8 -# 2001| v2001_1(void) = NoOp : -# 1996| v1996_13(void) = ReturnVoid : -# 1996| v1996_14(void) = AliasedUse : ~m2000_9 -# 1996| v1996_15(void) = ExitFunction : - -# 2000| Block 11 -# 2000| r2000_10(glval) = VariableAddress[x] : -# 2000| r2000_11(glval) = VariableAddress[#temp2000:6] : -# 2000| m2000_12(glval) = Store[#temp2000:6] : &:r2000_11, r2000_10 -#-----| Goto -> Block 10 - -# 2000| Block 12 -# 2000| r2000_13(glval) = VariableAddress[y] : -# 2000| r2000_14(glval) = VariableAddress[#temp2000:6] : -# 2000| m2000_15(glval) = Store[#temp2000:6] : &:r2000_14, r2000_13 -#-----| Goto -> Block 10 - -# 2006| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2006| Block 0 -# 2006| v2006_1(void) = EnterFunction : -# 2006| m2006_2(unknown) = AliasedDefinition : -# 2006| m2006_3(unknown) = InitializeNonLocal : -# 2006| m2006_4(unknown) = Chi : total:m2006_2, partial:m2006_3 -# 2006| r2006_5(glval) = VariableAddress[a] : -# 2006| m2006_6(bool) = InitializeParameter[a] : &:r2006_5 -# 2006| r2006_7(glval) = VariableAddress[x] : -# 2006| m2006_8(TernaryPodObj) = InitializeParameter[x] : &:r2006_7 -# 2006| r2006_9(glval) = VariableAddress[y] : -# 2006| m2006_10(TernaryPodObj) = InitializeParameter[y] : &:r2006_9 -# 2006| r2006_11(glval) = VariableAddress[z] : -# 2006| m2006_12(TernaryPodObj) = InitializeParameter[z] : &:r2006_11 -# 2007| r2007_1(glval) = VariableAddress[a] : -# 2007| r2007_2(bool) = Load[a] : &:r2007_1, m2006_6 -# 2007| v2007_3(void) = ConditionalBranch : r2007_2 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2007| Block 1 -# 2007| m2007_4(TernaryPodObj) = Phi : from 2:m2007_12, from 3:m2007_16 -# 2007| r2007_5(glval) = VariableAddress[#temp2007:9] : -# 2007| r2007_6(TernaryPodObj) = Load[#temp2007:9] : &:r2007_5, m2007_4 -# 2007| r2007_7(glval) = VariableAddress[z] : -# 2007| m2007_8(TernaryPodObj) = Store[z] : &:r2007_7, r2007_6 -# 2008| r2008_1(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_2(glval) = VariableAddress[a] : -# 2008| r2008_3(bool) = Load[a] : &:r2008_2, m2006_6 -# 2008| v2008_4(void) = ConditionalBranch : r2008_3 +# 2000| r2000_1(glval) = VariableAddress[a] : +# 2000| r2000_2(bool) = Load[a] : &:r2000_1, m1998_6 +# 2000| v2000_3(void) = ConditionalBranch : r2000_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2007| Block 2 -# 2007| r2007_9(glval) = VariableAddress[x] : -# 2007| r2007_10(TernaryPodObj) = Load[x] : &:r2007_9, m2006_8 -# 2007| r2007_11(glval) = VariableAddress[#temp2007:9] : -# 2007| m2007_12(TernaryPodObj) = Store[#temp2007:9] : &:r2007_11, r2007_10 +# 1999| Block 2 +# 1999| r1999_9(glval) = VariableAddress[x] : +# 1999| r1999_10(int) = Load[x] : &:r1999_9, m1998_8 +# 1999| r1999_11(glval) = VariableAddress[#temp1999:9] : +# 1999| m1999_12(int) = Store[#temp1999:9] : &:r1999_11, r1999_10 #-----| Goto -> Block 1 -# 2007| Block 3 -# 2007| r2007_13(glval) = VariableAddress[y] : -# 2007| r2007_14(TernaryPodObj) = Load[y] : &:r2007_13, m2006_10 -# 2007| r2007_15(glval) = VariableAddress[#temp2007:9] : -# 2007| m2007_16(TernaryPodObj) = Store[#temp2007:9] : &:r2007_15, r2007_14 +# 1999| Block 3 +# 1999| r1999_13(glval) = VariableAddress[y] : +# 1999| r1999_14(int) = Load[y] : &:r1999_13, m1998_10 +# 1999| r1999_15(glval) = VariableAddress[#temp1999:9] : +# 1999| m1999_16(int) = Store[#temp1999:9] : &:r1999_15, r1999_14 #-----| Goto -> Block 1 -# 2008| Block 4 -# 2008| m2008_5(TernaryPodObj) = Phi : from 5:m2008_18, from 6:m2008_24 -# 2008| r2008_6(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_7(TernaryPodObj) = Load[#temp2008:9] : &:r2008_6, m2008_5 -# 2008| m2008_8(TernaryPodObj) = Store[#temp2008:9] : &:r2008_1, r2008_7 -# 2008| r2008_9(TernaryPodObj) = Load[#temp2008:9] : &:r2008_1, m2008_8 -# 2008| r2008_10(glval) = VariableAddress[z] : -# 2008| m2008_11(TernaryPodObj) = Store[z] : &:r2008_10, r2008_9 -# 2009| r2009_1(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_2(glval) = VariableAddress[a] : -# 2009| r2009_3(bool) = Load[a] : &:r2009_2, m2006_6 -# 2009| v2009_4(void) = ConditionalBranch : r2009_3 +# 2000| Block 4 +# 2000| m2000_4(int) = Phi : from 5:m2000_12, from 6:m2000_15 +# 2000| r2000_5(glval) = VariableAddress[#temp2000:9] : +# 2000| r2000_6(int) = Load[#temp2000:9] : &:r2000_5, m2000_4 +# 2000| r2000_7(glval) = VariableAddress[z] : +# 2000| m2000_8(int) = Store[z] : &:r2000_7, r2000_6 +# 2001| r2001_1(glval) = VariableAddress[a] : +# 2001| r2001_2(bool) = Load[a] : &:r2001_1, m1998_6 +# 2001| v2001_3(void) = ConditionalBranch : r2001_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2008| Block 5 -# 2008| r2008_12(glval) = VariableAddress[#temp2008:13] : -# 2008| r2008_13(glval) = VariableAddress[x] : -# 2008| r2008_14(TernaryPodObj) = Load[x] : &:r2008_13, m2006_8 -# 2008| m2008_15(TernaryPodObj) = Store[#temp2008:13] : &:r2008_12, r2008_14 -# 2008| r2008_16(TernaryPodObj) = Load[#temp2008:13] : &:r2008_12, m2008_15 -# 2008| r2008_17(glval) = VariableAddress[#temp2008:9] : -# 2008| m2008_18(TernaryPodObj) = Store[#temp2008:9] : &:r2008_17, r2008_16 +# 2000| Block 5 +# 2000| r2000_9(glval) = VariableAddress[x] : +# 2000| r2000_10(int) = Load[x] : &:r2000_9, m1998_8 +# 2000| r2000_11(glval) = VariableAddress[#temp2000:9] : +# 2000| m2000_12(int) = Store[#temp2000:9] : &:r2000_11, r2000_10 #-----| Goto -> Block 4 -# 2008| Block 6 -# 2008| r2008_19(glval) = VariableAddress[#temp2008:17] : -# 2008| r2008_20(TernaryPodObj) = Constant[0] : -# 2008| m2008_21(TernaryPodObj) = Store[#temp2008:17] : &:r2008_19, r2008_20 -# 2008| r2008_22(TernaryPodObj) = Load[#temp2008:17] : &:r2008_19, m2008_21 -# 2008| r2008_23(glval) = VariableAddress[#temp2008:9] : -# 2008| m2008_24(TernaryPodObj) = Store[#temp2008:9] : &:r2008_23, r2008_22 +# 2000| Block 6 +# 2000| r2000_13(int) = Constant[5] : +# 2000| r2000_14(glval) = VariableAddress[#temp2000:9] : +# 2000| m2000_15(int) = Store[#temp2000:9] : &:r2000_14, r2000_13 #-----| Goto -> Block 4 -# 2009| Block 7 -# 2009| m2009_5(TernaryPodObj) = Phi : from 8:m2009_17, from 9:m2009_23 -# 2009| r2009_6(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_7(TernaryPodObj) = Load[#temp2009:9] : &:r2009_6, m2009_5 -# 2009| m2009_8(TernaryPodObj) = Store[#temp2009:9] : &:r2009_1, r2009_7 -# 2009| r2009_9(TernaryPodObj) = Load[#temp2009:9] : &:r2009_1, m2009_8 -# 2009| r2009_10(glval) = VariableAddress[z] : -# 2009| m2009_11(TernaryPodObj) = Store[z] : &:r2009_10, r2009_9 -# 2010| r2010_1(glval) = VariableAddress[#temp2010:23] : -# 2010| r2010_2(TernaryPodObj) = Constant[0] : -# 2010| m2010_3(TernaryPodObj) = Store[#temp2010:23] : &:r2010_1, r2010_2 -# 2010| r2010_4(TernaryPodObj) = Load[#temp2010:23] : &:r2010_1, m2010_3 -# 2010| r2010_5(glval) = VariableAddress[a] : -# 2010| r2010_6(bool) = Load[a] : &:r2010_5, m2006_6 -# 2010| v2010_7(void) = ConditionalBranch : r2010_6 +# 2001| Block 7 +# 2001| m2001_4(int) = Phi : from 8:m2001_11, from 9:m2001_14 +# 2001| r2001_5(glval) = VariableAddress[#temp2001:9] : +# 2001| r2001_6(int) = Load[#temp2001:9] : &:r2001_5, m2001_4 +# 2001| r2001_7(glval) = VariableAddress[z] : +# 2001| m2001_8(int) = Store[z] : &:r2001_7, r2001_6 +# 2002| r2002_1(int) = Constant[7] : +# 2002| r2002_2(glval) = VariableAddress[a] : +# 2002| r2002_3(bool) = Load[a] : &:r2002_2, m1998_6 +# 2002| v2002_4(void) = ConditionalBranch : r2002_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2009| Block 8 -# 2009| r2009_12(glval) = VariableAddress[#temp2009:13] : -# 2009| r2009_13(TernaryPodObj) = Constant[0] : -# 2009| m2009_14(TernaryPodObj) = Store[#temp2009:13] : &:r2009_12, r2009_13 -# 2009| r2009_15(TernaryPodObj) = Load[#temp2009:13] : &:r2009_12, m2009_14 -# 2009| r2009_16(glval) = VariableAddress[#temp2009:9] : -# 2009| m2009_17(TernaryPodObj) = Store[#temp2009:9] : &:r2009_16, r2009_15 +# 2001| Block 8 +# 2001| r2001_9(int) = Constant[3] : +# 2001| r2001_10(glval) = VariableAddress[#temp2001:9] : +# 2001| m2001_11(int) = Store[#temp2001:9] : &:r2001_10, r2001_9 #-----| Goto -> Block 7 -# 2009| Block 9 -# 2009| r2009_18(glval) = VariableAddress[#temp2009:31] : -# 2009| r2009_19(TernaryPodObj) = Constant[0] : -# 2009| m2009_20(TernaryPodObj) = Store[#temp2009:31] : &:r2009_18, r2009_19 -# 2009| r2009_21(TernaryPodObj) = Load[#temp2009:31] : &:r2009_18, m2009_20 -# 2009| r2009_22(glval) = VariableAddress[#temp2009:9] : -# 2009| m2009_23(TernaryPodObj) = Store[#temp2009:9] : &:r2009_22, r2009_21 +# 2001| Block 9 +# 2001| r2001_12(int) = Constant[5] : +# 2001| r2001_13(glval) = VariableAddress[#temp2001:9] : +# 2001| m2001_14(int) = Store[#temp2001:9] : &:r2001_13, r2001_12 #-----| Goto -> Block 7 -# 2010| Block 10 -# 2010| m2010_8(TernaryPodObj) = Phi : from 11:m2010_18, from 12:m2010_22 -# 2010| r2010_9(glval) = VariableAddress[#temp2010:10] : -# 2010| r2010_10(TernaryPodObj) = Load[#temp2010:10] : &:r2010_9, m2010_8 -# 2010| r2010_11(glval) = VariableAddress[z] : -# 2010| m2010_12(TernaryPodObj) = Store[z] : &:r2010_11, r2010_10 -# 2010| r2010_13(glval) = CopyValue : r2010_11 -# 2010| m2010_14(TernaryPodObj) = Store[?] : &:r2010_13, r2010_4 -# 2011| v2011_1(void) = NoOp : -# 2006| v2006_13(void) = ReturnVoid : -# 2006| v2006_14(void) = AliasedUse : m2006_3 -# 2006| v2006_15(void) = ExitFunction : +# 2002| Block 10 +# 2002| m2002_5(glval) = Phi : from 11:m2002_12, from 12:m2002_15 +# 2002| r2002_6(glval) = VariableAddress[#temp2002:6] : +# 2002| r2002_7(glval) = Load[#temp2002:6] : &:r2002_6, m2002_5 +# 2002| m2002_8(int) = Store[?] : &:r2002_7, r2002_1 +# 2002| m2002_9(unknown) = Chi : total:m1998_4, partial:m2002_8 +# 2003| v2003_1(void) = NoOp : +# 1998| v1998_13(void) = ReturnVoid : +# 1998| v1998_14(void) = AliasedUse : ~m2002_9 +# 1998| v1998_15(void) = ExitFunction : -# 2010| Block 11 -# 2010| r2010_15(glval) = VariableAddress[x] : -# 2010| r2010_16(TernaryPodObj) = Load[x] : &:r2010_15, m2006_8 -# 2010| r2010_17(glval) = VariableAddress[#temp2010:10] : -# 2010| m2010_18(TernaryPodObj) = Store[#temp2010:10] : &:r2010_17, r2010_16 +# 2002| Block 11 +# 2002| r2002_10(glval) = VariableAddress[x] : +# 2002| r2002_11(glval) = VariableAddress[#temp2002:6] : +# 2002| m2002_12(glval) = Store[#temp2002:6] : &:r2002_11, r2002_10 #-----| Goto -> Block 10 -# 2010| Block 12 -# 2010| r2010_19(glval) = VariableAddress[y] : -# 2010| r2010_20(TernaryPodObj) = Load[y] : &:r2010_19, m2006_10 -# 2010| r2010_21(glval) = VariableAddress[#temp2010:10] : -# 2010| m2010_22(TernaryPodObj) = Store[#temp2010:10] : &:r2010_21, r2010_20 +# 2002| Block 12 +# 2002| r2002_13(glval) = VariableAddress[y] : +# 2002| r2002_14(glval) = VariableAddress[#temp2002:6] : +# 2002| m2002_15(glval) = Store[#temp2002:6] : &:r2002_14, r2002_13 #-----| Goto -> Block 10 -# 2013| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| m2013_2(unknown) = AliasedDefinition : -# 2013| m2013_3(unknown) = InitializeNonLocal : -# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 -# 2013| r2013_5(glval) = VariableAddress[#this] : -# 2013| m2013_6(glval) = InitializeParameter[#this] : &:r2013_5 -# 2013| r2013_7(glval) = Load[#this] : &:r2013_5, m2013_6 -# 2013| m2013_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_7 +# 2008| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| m2008_2(unknown) = AliasedDefinition : +# 2008| m2008_3(unknown) = InitializeNonLocal : +# 2008| m2008_4(unknown) = Chi : total:m2008_2, partial:m2008_3 +# 2008| r2008_5(glval) = VariableAddress[a] : +# 2008| m2008_6(bool) = InitializeParameter[a] : &:r2008_5 +# 2008| r2008_7(glval) = VariableAddress[x] : +# 2008| m2008_8(TernaryPodObj) = InitializeParameter[x] : &:r2008_7 +# 2008| r2008_9(glval) = VariableAddress[y] : +# 2008| m2008_10(TernaryPodObj) = InitializeParameter[y] : &:r2008_9 +# 2008| r2008_11(glval) = VariableAddress[z] : +# 2008| m2008_12(TernaryPodObj) = InitializeParameter[z] : &:r2008_11 +# 2009| r2009_1(glval) = VariableAddress[a] : +# 2009| r2009_2(bool) = Load[a] : &:r2009_1, m2008_6 +# 2009| v2009_3(void) = ConditionalBranch : r2009_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2009| Block 1 +# 2009| m2009_4(TernaryPodObj) = Phi : from 2:m2009_12, from 3:m2009_16 +# 2009| r2009_5(glval) = VariableAddress[#temp2009:9] : +# 2009| r2009_6(TernaryPodObj) = Load[#temp2009:9] : &:r2009_5, m2009_4 +# 2009| r2009_7(glval) = VariableAddress[z] : +# 2009| m2009_8(TernaryPodObj) = Store[z] : &:r2009_7, r2009_6 +# 2010| r2010_1(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_2(glval) = VariableAddress[a] : +# 2010| r2010_3(bool) = Load[a] : &:r2010_2, m2008_6 +# 2010| v2010_4(void) = ConditionalBranch : r2010_3 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2009| Block 2 +# 2009| r2009_9(glval) = VariableAddress[x] : +# 2009| r2009_10(TernaryPodObj) = Load[x] : &:r2009_9, m2008_8 +# 2009| r2009_11(glval) = VariableAddress[#temp2009:9] : +# 2009| m2009_12(TernaryPodObj) = Store[#temp2009:9] : &:r2009_11, r2009_10 +#-----| Goto -> Block 1 + +# 2009| Block 3 +# 2009| r2009_13(glval) = VariableAddress[y] : +# 2009| r2009_14(TernaryPodObj) = Load[y] : &:r2009_13, m2008_10 +# 2009| r2009_15(glval) = VariableAddress[#temp2009:9] : +# 2009| m2009_16(TernaryPodObj) = Store[#temp2009:9] : &:r2009_15, r2009_14 +#-----| Goto -> Block 1 + +# 2010| Block 4 +# 2010| m2010_5(TernaryPodObj) = Phi : from 5:m2010_18, from 6:m2010_24 +# 2010| r2010_6(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_7(TernaryPodObj) = Load[#temp2010:9] : &:r2010_6, m2010_5 +# 2010| m2010_8(TernaryPodObj) = Store[#temp2010:9] : &:r2010_1, r2010_7 +# 2010| r2010_9(TernaryPodObj) = Load[#temp2010:9] : &:r2010_1, m2010_8 +# 2010| r2010_10(glval) = VariableAddress[z] : +# 2010| m2010_11(TernaryPodObj) = Store[z] : &:r2010_10, r2010_9 +# 2011| r2011_1(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_2(glval) = VariableAddress[a] : +# 2011| r2011_3(bool) = Load[a] : &:r2011_2, m2008_6 +# 2011| v2011_4(void) = ConditionalBranch : r2011_3 +#-----| False -> Block 9 +#-----| True -> Block 8 + +# 2010| Block 5 +# 2010| r2010_12(glval) = VariableAddress[#temp2010:13] : +# 2010| r2010_13(glval) = VariableAddress[x] : +# 2010| r2010_14(TernaryPodObj) = Load[x] : &:r2010_13, m2008_8 +# 2010| m2010_15(TernaryPodObj) = Store[#temp2010:13] : &:r2010_12, r2010_14 +# 2010| r2010_16(TernaryPodObj) = Load[#temp2010:13] : &:r2010_12, m2010_15 +# 2010| r2010_17(glval) = VariableAddress[#temp2010:9] : +# 2010| m2010_18(TernaryPodObj) = Store[#temp2010:9] : &:r2010_17, r2010_16 +#-----| Goto -> Block 4 + +# 2010| Block 6 +# 2010| r2010_19(glval) = VariableAddress[#temp2010:17] : +# 2010| r2010_20(TernaryPodObj) = Constant[0] : +# 2010| m2010_21(TernaryPodObj) = Store[#temp2010:17] : &:r2010_19, r2010_20 +# 2010| r2010_22(TernaryPodObj) = Load[#temp2010:17] : &:r2010_19, m2010_21 +# 2010| r2010_23(glval) = VariableAddress[#temp2010:9] : +# 2010| m2010_24(TernaryPodObj) = Store[#temp2010:9] : &:r2010_23, r2010_22 +#-----| Goto -> Block 4 + +# 2011| Block 7 +# 2011| m2011_5(TernaryPodObj) = Phi : from 8:m2011_17, from 9:m2011_23 +# 2011| r2011_6(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_7(TernaryPodObj) = Load[#temp2011:9] : &:r2011_6, m2011_5 +# 2011| m2011_8(TernaryPodObj) = Store[#temp2011:9] : &:r2011_1, r2011_7 +# 2011| r2011_9(TernaryPodObj) = Load[#temp2011:9] : &:r2011_1, m2011_8 +# 2011| r2011_10(glval) = VariableAddress[z] : +# 2011| m2011_11(TernaryPodObj) = Store[z] : &:r2011_10, r2011_9 +# 2012| r2012_1(glval) = VariableAddress[#temp2012:23] : +# 2012| r2012_2(TernaryPodObj) = Constant[0] : +# 2012| m2012_3(TernaryPodObj) = Store[#temp2012:23] : &:r2012_1, r2012_2 +# 2012| r2012_4(TernaryPodObj) = Load[#temp2012:23] : &:r2012_1, m2012_3 +# 2012| r2012_5(glval) = VariableAddress[a] : +# 2012| r2012_6(bool) = Load[a] : &:r2012_5, m2008_6 +# 2012| v2012_7(void) = ConditionalBranch : r2012_6 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 2011| Block 8 +# 2011| r2011_12(glval) = VariableAddress[#temp2011:13] : +# 2011| r2011_13(TernaryPodObj) = Constant[0] : +# 2011| m2011_14(TernaryPodObj) = Store[#temp2011:13] : &:r2011_12, r2011_13 +# 2011| r2011_15(TernaryPodObj) = Load[#temp2011:13] : &:r2011_12, m2011_14 +# 2011| r2011_16(glval) = VariableAddress[#temp2011:9] : +# 2011| m2011_17(TernaryPodObj) = Store[#temp2011:9] : &:r2011_16, r2011_15 +#-----| Goto -> Block 7 + +# 2011| Block 9 +# 2011| r2011_18(glval) = VariableAddress[#temp2011:31] : +# 2011| r2011_19(TernaryPodObj) = Constant[0] : +# 2011| m2011_20(TernaryPodObj) = Store[#temp2011:31] : &:r2011_18, r2011_19 +# 2011| r2011_21(TernaryPodObj) = Load[#temp2011:31] : &:r2011_18, m2011_20 +# 2011| r2011_22(glval) = VariableAddress[#temp2011:9] : +# 2011| m2011_23(TernaryPodObj) = Store[#temp2011:9] : &:r2011_22, r2011_21 +#-----| Goto -> Block 7 + +# 2012| Block 10 +# 2012| m2012_8(TernaryPodObj) = Phi : from 11:m2012_18, from 12:m2012_22 +# 2012| r2012_9(glval) = VariableAddress[#temp2012:10] : +# 2012| r2012_10(TernaryPodObj) = Load[#temp2012:10] : &:r2012_9, m2012_8 +# 2012| r2012_11(glval) = VariableAddress[z] : +# 2012| m2012_12(TernaryPodObj) = Store[z] : &:r2012_11, r2012_10 +# 2012| r2012_13(glval) = CopyValue : r2012_11 +# 2012| m2012_14(TernaryPodObj) = Store[?] : &:r2012_13, r2012_4 +# 2013| v2013_1(void) = NoOp : +# 2008| v2008_13(void) = ReturnVoid : +# 2008| v2008_14(void) = AliasedUse : m2008_3 +# 2008| v2008_15(void) = ExitFunction : + +# 2012| Block 11 +# 2012| r2012_15(glval) = VariableAddress[x] : +# 2012| r2012_16(TernaryPodObj) = Load[x] : &:r2012_15, m2008_8 +# 2012| r2012_17(glval) = VariableAddress[#temp2012:10] : +# 2012| m2012_18(TernaryPodObj) = Store[#temp2012:10] : &:r2012_17, r2012_16 +#-----| Goto -> Block 10 + +# 2012| Block 12 +# 2012| r2012_19(glval) = VariableAddress[y] : +# 2012| r2012_20(TernaryPodObj) = Load[y] : &:r2012_19, m2008_10 +# 2012| r2012_21(glval) = VariableAddress[#temp2012:10] : +# 2012| m2012_22(TernaryPodObj) = Store[#temp2012:10] : &:r2012_21, r2012_20 +#-----| Goto -> Block 10 + +# 2015| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| m2015_2(unknown) = AliasedDefinition : +# 2015| m2015_3(unknown) = InitializeNonLocal : +# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 +# 2015| r2015_5(glval) = VariableAddress[#this] : +# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 +# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 +# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 #-----| r0_5(glval) = VariableAddress[#return] : #-----| r0_6(glval) = VariableAddress[#this] : -#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2013_6 +#-----| r0_7(TernaryNonPodObj *) = Load[#this] : &:r0_6, m2015_6 #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| m0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2013| v2013_9(void) = ReturnIndirection[#this] : &:r2013_7, m2013_8 +# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2013| r2013_10(glval) = VariableAddress[#return] : -# 2013| v2013_11(void) = ReturnValue : &:r2013_10, m0_10 -# 2013| v2013_12(void) = AliasedUse : m2013_3 -# 2013| v2013_13(void) = ExitFunction : +# 2015| r2015_10(glval) = VariableAddress[#return] : +# 2015| v2015_11(void) = ReturnValue : &:r2015_10, m0_10 +# 2015| v2015_12(void) = AliasedUse : m2015_3 +# 2015| v2015_13(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj() -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| m2013_2(unknown) = AliasedDefinition : -# 2013| m2013_3(unknown) = InitializeNonLocal : -# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 -# 2013| r2013_5(glval) = VariableAddress[#this] : -# 2013| m2013_6(glval) = InitializeParameter[#this] : &:r2013_5 -# 2013| r2013_7(glval) = Load[#this] : &:r2013_5, m2013_6 -# 2013| m2013_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_7 -# 2013| v2013_9(void) = NoOp : -# 2013| v2013_10(void) = ReturnIndirection[#this] : &:r2013_7, m2013_8 -# 2013| v2013_11(void) = ReturnVoid : -# 2013| v2013_12(void) = AliasedUse : m2013_3 -# 2013| v2013_13(void) = ExitFunction : +# 2015| void TernaryNonPodObj::TernaryNonPodObj() +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| m2015_2(unknown) = AliasedDefinition : +# 2015| m2015_3(unknown) = InitializeNonLocal : +# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 +# 2015| r2015_5(glval) = VariableAddress[#this] : +# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 +# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 +# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 +# 2015| v2015_9(void) = NoOp : +# 2015| v2015_10(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 +# 2015| v2015_11(void) = ReturnVoid : +# 2015| v2015_12(void) = AliasedUse : m2015_3 +# 2015| v2015_13(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| m2013_2(unknown) = AliasedDefinition : -# 2013| m2013_3(unknown) = InitializeNonLocal : -# 2013| m2013_4(unknown) = Chi : total:m2013_2, partial:m2013_3 -# 2013| r2013_5(glval) = VariableAddress[#this] : -# 2013| m2013_6(glval) = InitializeParameter[#this] : &:r2013_5 -# 2013| r2013_7(glval) = Load[#this] : &:r2013_5, m2013_6 -# 2013| m2013_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_7 +# 2015| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| m2015_2(unknown) = AliasedDefinition : +# 2015| m2015_3(unknown) = InitializeNonLocal : +# 2015| m2015_4(unknown) = Chi : total:m2015_2, partial:m2015_3 +# 2015| r2015_5(glval) = VariableAddress[#this] : +# 2015| m2015_6(glval) = InitializeParameter[#this] : &:r2015_5 +# 2015| r2015_7(glval) = Load[#this] : &:r2015_5, m2015_6 +# 2015| m2015_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_7 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| m0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 #-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2013| v2013_9(void) = NoOp : -# 2013| v2013_10(void) = ReturnIndirection[#this] : &:r2013_7, m2013_8 +# 2015| v2015_9(void) = NoOp : +# 2015| v2015_10(void) = ReturnIndirection[#this] : &:r2015_7, m2015_8 #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 -# 2013| v2013_11(void) = ReturnVoid : -# 2013| v2013_12(void) = AliasedUse : m2013_3 -# 2013| v2013_13(void) = ExitFunction : +# 2015| v2015_11(void) = ReturnVoid : +# 2015| v2015_12(void) = AliasedUse : m2015_3 +# 2015| v2015_13(void) = ExitFunction : -# 2014| void TernaryNonPodObj::~TernaryNonPodObj() -# 2014| Block 0 -# 2014| v2014_1(void) = EnterFunction : -# 2014| m2014_2(unknown) = AliasedDefinition : -# 2014| m2014_3(unknown) = InitializeNonLocal : -# 2014| m2014_4(unknown) = Chi : total:m2014_2, partial:m2014_3 -# 2014| r2014_5(glval) = VariableAddress[#this] : -# 2014| m2014_6(glval) = InitializeParameter[#this] : &:r2014_5 -# 2014| r2014_7(glval) = Load[#this] : &:r2014_5, m2014_6 -# 2014| m2014_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2014_7 -# 2014| v2014_9(void) = NoOp : -# 2014| v2014_10(void) = ReturnIndirection[#this] : &:r2014_7, m2014_8 -# 2014| v2014_11(void) = ReturnVoid : -# 2014| v2014_12(void) = AliasedUse : m2014_3 -# 2014| v2014_13(void) = ExitFunction : +# 2016| void TernaryNonPodObj::~TernaryNonPodObj() +# 2016| Block 0 +# 2016| v2016_1(void) = EnterFunction : +# 2016| m2016_2(unknown) = AliasedDefinition : +# 2016| m2016_3(unknown) = InitializeNonLocal : +# 2016| m2016_4(unknown) = Chi : total:m2016_2, partial:m2016_3 +# 2016| r2016_5(glval) = VariableAddress[#this] : +# 2016| m2016_6(glval) = InitializeParameter[#this] : &:r2016_5 +# 2016| r2016_7(glval) = Load[#this] : &:r2016_5, m2016_6 +# 2016| m2016_8(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2016_7 +# 2016| v2016_9(void) = NoOp : +# 2016| v2016_10(void) = ReturnIndirection[#this] : &:r2016_7, m2016_8 +# 2016| v2016_11(void) = ReturnVoid : +# 2016| v2016_12(void) = AliasedUse : m2016_3 +# 2016| v2016_13(void) = ExitFunction : -# 2017| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| m2017_2(unknown) = AliasedDefinition : -# 2017| m2017_3(unknown) = InitializeNonLocal : -# 2017| m2017_4(unknown) = Chi : total:m2017_2, partial:m2017_3 -# 2017| r2017_5(glval) = VariableAddress[a] : -# 2017| m2017_6(bool) = InitializeParameter[a] : &:r2017_5 -# 2017| r2017_7(glval) = VariableAddress[x] : -# 2017| m2017_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2017_7 -# 2017| r2017_9(glval) = VariableAddress[y] : -# 2017| m2017_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2017_9 -# 2017| r2017_11(glval) = VariableAddress[z] : -# 2017| m2017_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2017_11 -# 2018| r2018_1(glval) = VariableAddress[z] : -# 2018| r2018_2(glval) = FunctionAddress[operator=] : -# 2018| r2018_3(glval) = VariableAddress[a] : -# 2018| r2018_4(bool) = Load[a] : &:r2018_3, m2017_6 -# 2018| v2018_5(void) = ConditionalBranch : r2018_4 +# 2019| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2019| Block 0 +# 2019| v2019_1(void) = EnterFunction : +# 2019| m2019_2(unknown) = AliasedDefinition : +# 2019| m2019_3(unknown) = InitializeNonLocal : +# 2019| m2019_4(unknown) = Chi : total:m2019_2, partial:m2019_3 +# 2019| r2019_5(glval) = VariableAddress[a] : +# 2019| m2019_6(bool) = InitializeParameter[a] : &:r2019_5 +# 2019| r2019_7(glval) = VariableAddress[x] : +# 2019| m2019_8(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_7 +# 2019| r2019_9(glval) = VariableAddress[y] : +# 2019| m2019_10(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_9 +# 2019| r2019_11(glval) = VariableAddress[z] : +# 2019| m2019_12(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_11 +# 2020| r2020_1(glval) = VariableAddress[z] : +# 2020| r2020_2(glval) = FunctionAddress[operator=] : +# 2020| r2020_3(glval) = VariableAddress[a] : +# 2020| r2020_4(bool) = Load[a] : &:r2020_3, m2019_6 +# 2020| v2020_5(void) = ConditionalBranch : r2020_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2018| Block 1 -# 2018| m2018_6(glval) = Phi : from 2:m2018_21, from 3:m2018_24 -# 2018| r2018_7(glval) = VariableAddress[#temp2018:9] : -# 2018| r2018_8(glval) = Load[#temp2018:9] : &:r2018_7, m2018_6 -# 2018| r2018_9(glval) = Convert : r2018_8 -# 2018| r2018_10(TernaryNonPodObj &) = CopyValue : r2018_9 -# 2018| r2018_11(TernaryNonPodObj &) = Call[operator=] : func:r2018_2, this:r2018_1, 0:r2018_10 -# 2018| m2018_12(unknown) = ^CallSideEffect : ~m2017_4 -# 2018| m2018_13(unknown) = Chi : total:m2017_4, partial:m2018_12 -# 2018| v2018_14(void) = ^IndirectReadSideEffect[-1] : &:r2018_1, m2017_12 -# 2018| v2018_15(void) = ^BufferReadSideEffect[0] : &:r2018_10, ~m2018_13 -# 2018| m2018_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2018_1 -# 2018| m2018_17(TernaryNonPodObj) = Chi : total:m2017_12, partial:m2018_16 -# 2018| r2018_18(glval) = CopyValue : r2018_11 -# 2019| r2019_1(glval) = VariableAddress[z] : -# 2019| r2019_2(glval) = FunctionAddress[operator=] : -# 2019| r2019_3(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_4(glval) = VariableAddress[a] : -# 2019| r2019_5(bool) = Load[a] : &:r2019_4, m2017_6 -# 2019| v2019_6(void) = ConditionalBranch : r2019_5 +# 2020| Block 1 +# 2020| m2020_6(glval) = Phi : from 2:m2020_21, from 3:m2020_24 +# 2020| r2020_7(glval) = VariableAddress[#temp2020:9] : +# 2020| r2020_8(glval) = Load[#temp2020:9] : &:r2020_7, m2020_6 +# 2020| r2020_9(glval) = Convert : r2020_8 +# 2020| r2020_10(TernaryNonPodObj &) = CopyValue : r2020_9 +# 2020| r2020_11(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_10 +# 2020| m2020_12(unknown) = ^CallSideEffect : ~m2019_4 +# 2020| m2020_13(unknown) = Chi : total:m2019_4, partial:m2020_12 +# 2020| v2020_14(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, m2019_12 +# 2020| v2020_15(void) = ^BufferReadSideEffect[0] : &:r2020_10, ~m2020_13 +# 2020| m2020_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 +# 2020| m2020_17(TernaryNonPodObj) = Chi : total:m2019_12, partial:m2020_16 +# 2020| r2020_18(glval) = CopyValue : r2020_11 +# 2021| r2021_1(glval) = VariableAddress[z] : +# 2021| r2021_2(glval) = FunctionAddress[operator=] : +# 2021| r2021_3(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_4(glval) = VariableAddress[a] : +# 2021| r2021_5(bool) = Load[a] : &:r2021_4, m2019_6 +# 2021| v2021_6(void) = ConditionalBranch : r2021_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2018| Block 2 -# 2018| r2018_19(glval) = VariableAddress[x] : -# 2018| r2018_20(glval) = VariableAddress[#temp2018:9] : -# 2018| m2018_21(glval) = Store[#temp2018:9] : &:r2018_20, r2018_19 +# 2020| Block 2 +# 2020| r2020_19(glval) = VariableAddress[x] : +# 2020| r2020_20(glval) = VariableAddress[#temp2020:9] : +# 2020| m2020_21(glval) = Store[#temp2020:9] : &:r2020_20, r2020_19 #-----| Goto -> Block 1 -# 2018| Block 3 -# 2018| r2018_22(glval) = VariableAddress[y] : -# 2018| r2018_23(glval) = VariableAddress[#temp2018:9] : -# 2018| m2018_24(glval) = Store[#temp2018:9] : &:r2018_23, r2018_22 +# 2020| Block 3 +# 2020| r2020_22(glval) = VariableAddress[y] : +# 2020| r2020_23(glval) = VariableAddress[#temp2020:9] : +# 2020| m2020_24(glval) = Store[#temp2020:9] : &:r2020_23, r2020_22 #-----| Goto -> Block 1 -# 2019| Block 4 -# 2019| m2019_7(unknown) = Phi : from 5:~m2019_30, from 6:~m2019_42 -# 2019| m2019_8(TernaryNonPodObj) = Phi : from 5:m2019_36, from 6:m2019_47 -# 2019| r2019_9(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_10(TernaryNonPodObj) = Load[#temp2019:9] : &:r2019_9, m2019_8 -# 2019| m2019_11(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_3, r2019_10 -# 2019| r2019_12(glval) = Convert : r2019_3 -# 2019| r2019_13(TernaryNonPodObj &) = CopyValue : r2019_12 -# 2019| r2019_14(TernaryNonPodObj &) = Call[operator=] : func:r2019_2, this:r2019_1, 0:r2019_13 -# 2019| m2019_15(unknown) = ^CallSideEffect : ~m2019_7 -# 2019| m2019_16(unknown) = Chi : total:m2019_7, partial:m2019_15 -# 2019| v2019_17(void) = ^IndirectReadSideEffect[-1] : &:r2019_1, m2018_17 -# 2019| v2019_18(void) = ^BufferReadSideEffect[0] : &:r2019_13, ~m2019_11 -# 2019| m2019_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_1 -# 2019| m2019_20(TernaryNonPodObj) = Chi : total:m2018_17, partial:m2019_19 -# 2019| r2019_21(glval) = CopyValue : r2019_14 -# 2020| r2020_1(glval) = VariableAddress[z] : -# 2020| r2020_2(glval) = FunctionAddress[operator=] : -# 2020| r2020_3(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_4(glval) = VariableAddress[a] : -# 2020| r2020_5(bool) = Load[a] : &:r2020_4, m2017_6 -# 2020| v2020_6(void) = ConditionalBranch : r2020_5 +# 2021| Block 4 +# 2021| m2021_7(unknown) = Phi : from 5:~m2021_30, from 6:~m2021_42 +# 2021| m2021_8(TernaryNonPodObj) = Phi : from 5:m2021_36, from 6:m2021_47 +# 2021| r2021_9(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_10(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_9, m2021_8 +# 2021| m2021_11(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_10 +# 2021| r2021_12(glval) = Convert : r2021_3 +# 2021| r2021_13(TernaryNonPodObj &) = CopyValue : r2021_12 +# 2021| r2021_14(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_13 +# 2021| m2021_15(unknown) = ^CallSideEffect : ~m2021_7 +# 2021| m2021_16(unknown) = Chi : total:m2021_7, partial:m2021_15 +# 2021| v2021_17(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, m2020_17 +# 2021| v2021_18(void) = ^BufferReadSideEffect[0] : &:r2021_13, ~m2021_11 +# 2021| m2021_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 +# 2021| m2021_20(TernaryNonPodObj) = Chi : total:m2020_17, partial:m2021_19 +# 2021| r2021_21(glval) = CopyValue : r2021_14 +# 2022| r2022_1(glval) = VariableAddress[z] : +# 2022| r2022_2(glval) = FunctionAddress[operator=] : +# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_4(glval) = VariableAddress[a] : +# 2022| r2022_5(bool) = Load[a] : &:r2022_4, m2019_6 +# 2022| v2022_6(void) = ConditionalBranch : r2022_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2019| Block 5 -# 2019| r2019_22(glval) = VariableAddress[#temp2019:13] : -# 2019| m2019_23(TernaryNonPodObj) = Uninitialized[#temp2019:13] : &:r2019_22 -# 2019| r2019_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| r2019_25(glval) = VariableAddress[x] : -# 2019| r2019_26(glval) = Convert : r2019_25 -# 2019| r2019_27(TernaryNonPodObj &) = CopyValue : r2019_26 -# 2019| v2019_28(void) = Call[TernaryNonPodObj] : func:r2019_24, this:r2019_22, 0:r2019_27 -# 2019| m2019_29(unknown) = ^CallSideEffect : ~m2018_13 -# 2019| m2019_30(unknown) = Chi : total:m2018_13, partial:m2019_29 -# 2019| v2019_31(void) = ^BufferReadSideEffect[0] : &:r2019_27, ~m2017_8 -# 2019| m2019_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_22 -# 2019| m2019_33(TernaryNonPodObj) = Chi : total:m2019_23, partial:m2019_32 -# 2019| r2019_34(TernaryNonPodObj) = Load[#temp2019:13] : &:r2019_22, m2019_33 -# 2019| r2019_35(glval) = VariableAddress[#temp2019:9] : -# 2019| m2019_36(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_35, r2019_34 +# 2021| Block 5 +# 2021| r2021_22(glval) = VariableAddress[#temp2021:13] : +# 2021| m2021_23(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_22 +# 2021| r2021_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| r2021_25(glval) = VariableAddress[x] : +# 2021| r2021_26(glval) = Convert : r2021_25 +# 2021| r2021_27(TernaryNonPodObj &) = CopyValue : r2021_26 +# 2021| v2021_28(void) = Call[TernaryNonPodObj] : func:r2021_24, this:r2021_22, 0:r2021_27 +# 2021| m2021_29(unknown) = ^CallSideEffect : ~m2020_13 +# 2021| m2021_30(unknown) = Chi : total:m2020_13, partial:m2021_29 +# 2021| v2021_31(void) = ^BufferReadSideEffect[0] : &:r2021_27, ~m2019_8 +# 2021| m2021_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_22 +# 2021| m2021_33(TernaryNonPodObj) = Chi : total:m2021_23, partial:m2021_32 +# 2021| r2021_34(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_22, m2021_33 +# 2021| r2021_35(glval) = VariableAddress[#temp2021:9] : +# 2021| m2021_36(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_35, r2021_34 #-----| Goto -> Block 4 -# 2019| Block 6 -# 2019| r2019_37(glval) = VariableAddress[#temp2019:17] : -# 2019| m2019_38(TernaryNonPodObj) = Uninitialized[#temp2019:17] : &:r2019_37 -# 2019| r2019_39(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| v2019_40(void) = Call[TernaryNonPodObj] : func:r2019_39, this:r2019_37 -# 2019| m2019_41(unknown) = ^CallSideEffect : ~m2018_13 -# 2019| m2019_42(unknown) = Chi : total:m2018_13, partial:m2019_41 -# 2019| m2019_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_37 -# 2019| m2019_44(TernaryNonPodObj) = Chi : total:m2019_38, partial:m2019_43 -# 2019| r2019_45(TernaryNonPodObj) = Load[#temp2019:17] : &:r2019_37, m2019_44 -# 2019| r2019_46(glval) = VariableAddress[#temp2019:9] : -# 2019| m2019_47(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_46, r2019_45 +# 2021| Block 6 +# 2021| r2021_37(glval) = VariableAddress[#temp2021:17] : +# 2021| m2021_38(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_37 +# 2021| r2021_39(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| v2021_40(void) = Call[TernaryNonPodObj] : func:r2021_39, this:r2021_37 +# 2021| m2021_41(unknown) = ^CallSideEffect : ~m2020_13 +# 2021| m2021_42(unknown) = Chi : total:m2020_13, partial:m2021_41 +# 2021| m2021_43(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_37 +# 2021| m2021_44(TernaryNonPodObj) = Chi : total:m2021_38, partial:m2021_43 +# 2021| r2021_45(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_37, m2021_44 +# 2021| r2021_46(glval) = VariableAddress[#temp2021:9] : +# 2021| m2021_47(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_46, r2021_45 #-----| Goto -> Block 4 -# 2020| Block 7 -# 2020| m2020_7(unknown) = Phi : from 8:~m2020_27, from 9:~m2020_38 -# 2020| m2020_8(TernaryNonPodObj) = Phi : from 8:m2020_32, from 9:m2020_43 -# 2020| r2020_9(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_10(TernaryNonPodObj) = Load[#temp2020:9] : &:r2020_9, m2020_8 -# 2020| m2020_11(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_3, r2020_10 -# 2020| r2020_12(glval) = Convert : r2020_3 -# 2020| r2020_13(TernaryNonPodObj &) = CopyValue : r2020_12 -# 2020| r2020_14(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_13 -# 2020| m2020_15(unknown) = ^CallSideEffect : ~m2020_7 -# 2020| m2020_16(unknown) = Chi : total:m2020_7, partial:m2020_15 -# 2020| v2020_17(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, m2019_20 -# 2020| v2020_18(void) = ^BufferReadSideEffect[0] : &:r2020_13, ~m2020_11 -# 2020| m2020_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2020| m2020_20(TernaryNonPodObj) = Chi : total:m2019_20, partial:m2020_19 -# 2020| r2020_21(glval) = CopyValue : r2020_14 -# 2021| r2021_1(glval) = VariableAddress[z] : -# 2021| r2021_2(glval) = FunctionAddress[operator=] : -# 2021| r2021_3(glval) = VariableAddress[a] : -# 2021| r2021_4(bool) = Load[a] : &:r2021_3, m2017_6 -# 2021| v2021_5(void) = ConditionalBranch : r2021_4 +# 2022| Block 7 +# 2022| m2022_7(unknown) = Phi : from 8:~m2022_27, from 9:~m2022_38 +# 2022| m2022_8(TernaryNonPodObj) = Phi : from 8:m2022_32, from 9:m2022_43 +# 2022| r2022_9(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_10(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_9, m2022_8 +# 2022| m2022_11(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_10 +# 2022| r2022_12(glval) = Convert : r2022_3 +# 2022| r2022_13(TernaryNonPodObj &) = CopyValue : r2022_12 +# 2022| r2022_14(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_13 +# 2022| m2022_15(unknown) = ^CallSideEffect : ~m2022_7 +# 2022| m2022_16(unknown) = Chi : total:m2022_7, partial:m2022_15 +# 2022| v2022_17(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, m2021_20 +# 2022| v2022_18(void) = ^BufferReadSideEffect[0] : &:r2022_13, ~m2022_11 +# 2022| m2022_19(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 +# 2022| m2022_20(TernaryNonPodObj) = Chi : total:m2021_20, partial:m2022_19 +# 2022| r2022_21(glval) = CopyValue : r2022_14 +# 2023| r2023_1(glval) = VariableAddress[z] : +# 2023| r2023_2(glval) = FunctionAddress[operator=] : +# 2023| r2023_3(glval) = VariableAddress[a] : +# 2023| r2023_4(bool) = Load[a] : &:r2023_3, m2019_6 +# 2023| v2023_5(void) = ConditionalBranch : r2023_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2020| Block 8 -# 2020| r2020_22(glval) = VariableAddress[#temp2020:13] : -# 2020| m2020_23(TernaryNonPodObj) = Uninitialized[#temp2020:13] : &:r2020_22 -# 2020| r2020_24(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_25(void) = Call[TernaryNonPodObj] : func:r2020_24, this:r2020_22 -# 2020| m2020_26(unknown) = ^CallSideEffect : ~m2019_16 -# 2020| m2020_27(unknown) = Chi : total:m2019_16, partial:m2020_26 -# 2020| m2020_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_22 -# 2020| m2020_29(TernaryNonPodObj) = Chi : total:m2020_23, partial:m2020_28 -# 2020| r2020_30(TernaryNonPodObj) = Load[#temp2020:13] : &:r2020_22, m2020_29 -# 2020| r2020_31(glval) = VariableAddress[#temp2020:9] : -# 2020| m2020_32(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_31, r2020_30 +# 2022| Block 8 +# 2022| r2022_22(glval) = VariableAddress[#temp2022:13] : +# 2022| m2022_23(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_22 +# 2022| r2022_24(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_25(void) = Call[TernaryNonPodObj] : func:r2022_24, this:r2022_22 +# 2022| m2022_26(unknown) = ^CallSideEffect : ~m2021_16 +# 2022| m2022_27(unknown) = Chi : total:m2021_16, partial:m2022_26 +# 2022| m2022_28(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_22 +# 2022| m2022_29(TernaryNonPodObj) = Chi : total:m2022_23, partial:m2022_28 +# 2022| r2022_30(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_22, m2022_29 +# 2022| r2022_31(glval) = VariableAddress[#temp2022:9] : +# 2022| m2022_32(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_31, r2022_30 #-----| Goto -> Block 7 -# 2020| Block 9 -# 2020| r2020_33(glval) = VariableAddress[#temp2020:34] : -# 2020| m2020_34(TernaryNonPodObj) = Uninitialized[#temp2020:34] : &:r2020_33 -# 2020| r2020_35(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_36(void) = Call[TernaryNonPodObj] : func:r2020_35, this:r2020_33 -# 2020| m2020_37(unknown) = ^CallSideEffect : ~m2019_16 -# 2020| m2020_38(unknown) = Chi : total:m2019_16, partial:m2020_37 -# 2020| m2020_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_33 -# 2020| m2020_40(TernaryNonPodObj) = Chi : total:m2020_34, partial:m2020_39 -# 2020| r2020_41(TernaryNonPodObj) = Load[#temp2020:34] : &:r2020_33, m2020_40 -# 2020| r2020_42(glval) = VariableAddress[#temp2020:9] : -# 2020| m2020_43(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_42, r2020_41 +# 2022| Block 9 +# 2022| r2022_33(glval) = VariableAddress[#temp2022:34] : +# 2022| m2022_34(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_33 +# 2022| r2022_35(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_36(void) = Call[TernaryNonPodObj] : func:r2022_35, this:r2022_33 +# 2022| m2022_37(unknown) = ^CallSideEffect : ~m2021_16 +# 2022| m2022_38(unknown) = Chi : total:m2021_16, partial:m2022_37 +# 2022| m2022_39(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_33 +# 2022| m2022_40(TernaryNonPodObj) = Chi : total:m2022_34, partial:m2022_39 +# 2022| r2022_41(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_33, m2022_40 +# 2022| r2022_42(glval) = VariableAddress[#temp2022:9] : +# 2022| m2022_43(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_42, r2022_41 #-----| Goto -> Block 7 -# 2021| Block 10 -# 2021| m2021_6(glval) = Phi : from 11:m2021_40, from 12:m2021_43 -# 2021| r2021_7(glval) = VariableAddress[#temp2021:10] : -# 2021| r2021_8(glval) = Load[#temp2021:10] : &:r2021_7, m2021_6 -# 2021| r2021_9(glval) = Convert : r2021_8 -# 2021| r2021_10(TernaryNonPodObj &) = CopyValue : r2021_9 -# 2021| r2021_11(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_10 -# 2021| m2021_12(unknown) = ^CallSideEffect : ~m2020_16 -# 2021| m2021_13(unknown) = Chi : total:m2020_16, partial:m2021_12 -# 2021| v2021_14(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, m2020_20 -# 2021| v2021_15(void) = ^BufferReadSideEffect[0] : &:r2021_10, ~m2021_13 -# 2021| m2021_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| m2021_17(TernaryNonPodObj) = Chi : total:m2020_20, partial:m2021_16 -# 2021| r2021_18(glval) = CopyValue : r2021_11 -# 2021| r2021_19(glval) = FunctionAddress[operator=] : -# 2021| r2021_20(glval) = VariableAddress[#temp2021:23] : -# 2021| m2021_21(TernaryNonPodObj) = Uninitialized[#temp2021:23] : &:r2021_20 -# 2021| r2021_22(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_23(void) = Call[TernaryNonPodObj] : func:r2021_22, this:r2021_20 -# 2021| m2021_24(unknown) = ^CallSideEffect : ~m2021_13 -# 2021| m2021_25(unknown) = Chi : total:m2021_13, partial:m2021_24 -# 2021| m2021_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_20 -# 2021| m2021_27(TernaryNonPodObj) = Chi : total:m2021_21, partial:m2021_26 -# 2021| r2021_28(glval) = Convert : r2021_20 -# 2021| r2021_29(TernaryNonPodObj &) = CopyValue : r2021_28 -# 2021| r2021_30(TernaryNonPodObj &) = Call[operator=] : func:r2021_19, this:r2021_18, 0:r2021_29 -# 2021| m2021_31(unknown) = ^CallSideEffect : ~m2021_25 -# 2021| m2021_32(unknown) = Chi : total:m2021_25, partial:m2021_31 -# 2021| v2021_33(void) = ^IndirectReadSideEffect[-1] : &:r2021_18, m2021_17 -# 2021| v2021_34(void) = ^BufferReadSideEffect[0] : &:r2021_29, ~m2021_27 -# 2021| m2021_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_18 -# 2021| m2021_36(TernaryNonPodObj) = Chi : total:m2021_17, partial:m2021_35 -# 2021| r2021_37(glval) = CopyValue : r2021_30 -# 2022| v2022_1(void) = NoOp : -# 2017| v2017_13(void) = ReturnVoid : -# 2017| v2017_14(void) = AliasedUse : ~m2021_32 -# 2017| v2017_15(void) = ExitFunction : +# 2023| Block 10 +# 2023| m2023_6(glval) = Phi : from 11:m2023_40, from 12:m2023_43 +# 2023| r2023_7(glval) = VariableAddress[#temp2023:10] : +# 2023| r2023_8(glval) = Load[#temp2023:10] : &:r2023_7, m2023_6 +# 2023| r2023_9(glval) = Convert : r2023_8 +# 2023| r2023_10(TernaryNonPodObj &) = CopyValue : r2023_9 +# 2023| r2023_11(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_10 +# 2023| m2023_12(unknown) = ^CallSideEffect : ~m2022_16 +# 2023| m2023_13(unknown) = Chi : total:m2022_16, partial:m2023_12 +# 2023| v2023_14(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, m2022_20 +# 2023| v2023_15(void) = ^BufferReadSideEffect[0] : &:r2023_10, ~m2023_13 +# 2023| m2023_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 +# 2023| m2023_17(TernaryNonPodObj) = Chi : total:m2022_20, partial:m2023_16 +# 2023| r2023_18(glval) = CopyValue : r2023_11 +# 2023| r2023_19(glval) = FunctionAddress[operator=] : +# 2023| r2023_20(glval) = VariableAddress[#temp2023:23] : +# 2023| m2023_21(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_20 +# 2023| r2023_22(glval) = FunctionAddress[TernaryNonPodObj] : +# 2023| v2023_23(void) = Call[TernaryNonPodObj] : func:r2023_22, this:r2023_20 +# 2023| m2023_24(unknown) = ^CallSideEffect : ~m2023_13 +# 2023| m2023_25(unknown) = Chi : total:m2023_13, partial:m2023_24 +# 2023| m2023_26(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_20 +# 2023| m2023_27(TernaryNonPodObj) = Chi : total:m2023_21, partial:m2023_26 +# 2023| r2023_28(glval) = Convert : r2023_20 +# 2023| r2023_29(TernaryNonPodObj &) = CopyValue : r2023_28 +# 2023| r2023_30(TernaryNonPodObj &) = Call[operator=] : func:r2023_19, this:r2023_18, 0:r2023_29 +# 2023| m2023_31(unknown) = ^CallSideEffect : ~m2023_25 +# 2023| m2023_32(unknown) = Chi : total:m2023_25, partial:m2023_31 +# 2023| v2023_33(void) = ^IndirectReadSideEffect[-1] : &:r2023_18, m2023_17 +# 2023| v2023_34(void) = ^BufferReadSideEffect[0] : &:r2023_29, ~m2023_27 +# 2023| m2023_35(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_18 +# 2023| m2023_36(TernaryNonPodObj) = Chi : total:m2023_17, partial:m2023_35 +# 2023| r2023_37(glval) = CopyValue : r2023_30 +# 2024| v2024_1(void) = NoOp : +# 2019| v2019_13(void) = ReturnVoid : +# 2019| v2019_14(void) = AliasedUse : ~m2023_32 +# 2019| v2019_15(void) = ExitFunction : -# 2021| Block 11 -# 2021| r2021_38(glval) = VariableAddress[x] : -# 2021| r2021_39(glval) = VariableAddress[#temp2021:10] : -# 2021| m2021_40(glval) = Store[#temp2021:10] : &:r2021_39, r2021_38 +# 2023| Block 11 +# 2023| r2023_38(glval) = VariableAddress[x] : +# 2023| r2023_39(glval) = VariableAddress[#temp2023:10] : +# 2023| m2023_40(glval) = Store[#temp2023:10] : &:r2023_39, r2023_38 #-----| Goto -> Block 10 -# 2021| Block 12 -# 2021| r2021_41(glval) = VariableAddress[y] : -# 2021| r2021_42(glval) = VariableAddress[#temp2021:10] : -# 2021| m2021_43(glval) = Store[#temp2021:10] : &:r2021_42, r2021_41 +# 2023| Block 12 +# 2023| r2023_41(glval) = VariableAddress[y] : +# 2023| r2023_42(glval) = VariableAddress[#temp2023:10] : +# 2023| m2023_43(glval) = Store[#temp2023:10] : &:r2023_42, r2023_41 #-----| Goto -> Block 10 -# 2026| unsigned int CommaTest(unsigned int) -# 2026| Block 0 -# 2026| v2026_1(void) = EnterFunction : -# 2026| m2026_2(unknown) = AliasedDefinition : -# 2026| m2026_3(unknown) = InitializeNonLocal : -# 2026| m2026_4(unknown) = Chi : total:m2026_2, partial:m2026_3 -# 2026| r2026_5(glval) = VariableAddress[x] : -# 2026| m2026_6(unsigned int) = InitializeParameter[x] : &:r2026_5 -# 2027| r2027_1(glval) = VariableAddress[y] : -# 2027| m2027_2(unsigned int) = Uninitialized[y] : &:r2027_1 -# 2028| r2028_1(glval) = VariableAddress[x] : -# 2028| r2028_2(unsigned int) = Load[x] : &:r2028_1, m2026_6 -# 2028| r2028_3(unsigned int) = Constant[100] : -# 2028| r2028_4(bool) = CompareLT : r2028_2, r2028_3 -# 2028| v2028_5(void) = ConditionalBranch : r2028_4 +# 2028| unsigned int CommaTest(unsigned int) +# 2028| Block 0 +# 2028| v2028_1(void) = EnterFunction : +# 2028| m2028_2(unknown) = AliasedDefinition : +# 2028| m2028_3(unknown) = InitializeNonLocal : +# 2028| m2028_4(unknown) = Chi : total:m2028_2, partial:m2028_3 +# 2028| r2028_5(glval) = VariableAddress[x] : +# 2028| m2028_6(unsigned int) = InitializeParameter[x] : &:r2028_5 +# 2029| r2029_1(glval) = VariableAddress[y] : +# 2029| m2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 +# 2030| r2030_1(glval) = VariableAddress[x] : +# 2030| r2030_2(unsigned int) = Load[x] : &:r2030_1, m2028_6 +# 2030| r2030_3(unsigned int) = Constant[100] : +# 2030| r2030_4(bool) = CompareLT : r2030_2, r2030_3 +# 2030| v2030_5(void) = ConditionalBranch : r2030_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2028| Block 1 -# 2028| m2028_6(unknown) = Phi : from 2:~m2029_6, from 3:~m2030_6 -# 2028| m2028_7(unsigned int) = Phi : from 2:m2028_13, from 3:m2028_15 -# 2028| r2028_8(glval) = VariableAddress[#temp2028:7] : -# 2028| r2028_9(unsigned int) = Load[#temp2028:7] : &:r2028_8, m2028_7 -# 2028| r2028_10(glval) = VariableAddress[y] : -# 2028| m2028_11(unsigned int) = Store[y] : &:r2028_10, r2028_9 -# 2031| r2031_1(glval) = VariableAddress[#return] : -# 2031| m2031_2(unsigned int) = Uninitialized[#return] : &:r2031_1 -# 2026| r2026_7(glval) = VariableAddress[#return] : -# 2026| v2026_8(void) = ReturnValue : &:r2026_7, m2031_2 -# 2026| v2026_9(void) = AliasedUse : ~m2028_6 -# 2026| v2026_10(void) = ExitFunction : +# 2030| Block 1 +# 2030| m2030_6(unknown) = Phi : from 2:~m2031_6, from 3:~m2032_6 +# 2030| m2030_7(unsigned int) = Phi : from 2:m2030_13, from 3:m2030_15 +# 2030| r2030_8(glval) = VariableAddress[#temp2030:7] : +# 2030| r2030_9(unsigned int) = Load[#temp2030:7] : &:r2030_8, m2030_7 +# 2030| r2030_10(glval) = VariableAddress[y] : +# 2030| m2030_11(unsigned int) = Store[y] : &:r2030_10, r2030_9 +# 2033| r2033_1(glval) = VariableAddress[#return] : +# 2033| m2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 +# 2028| r2028_7(glval) = VariableAddress[#return] : +# 2028| v2028_8(void) = ReturnValue : &:r2028_7, m2033_2 +# 2028| v2028_9(void) = AliasedUse : ~m2030_6 +# 2028| v2028_10(void) = ExitFunction : -# 2029| Block 2 -# 2029| r2029_1(glval) = FunctionAddress[CommaTestHelper] : -# 2029| r2029_2(glval) = VariableAddress[x] : -# 2029| r2029_3(unsigned int) = Load[x] : &:r2029_2, m2026_6 -# 2029| v2029_4(void) = Call[CommaTestHelper] : func:r2029_1, 0:r2029_3 -# 2029| m2029_5(unknown) = ^CallSideEffect : ~m2026_4 -# 2029| m2029_6(unknown) = Chi : total:m2026_4, partial:m2029_5 -# 2029| r2029_7(glval) = VariableAddress[x] : -# 2029| r2029_8(unsigned int) = Load[x] : &:r2029_7, m2026_6 -# 2029| r2029_9(unsigned int) = CopyValue : r2029_8 -# 2028| r2028_12(glval) = VariableAddress[#temp2028:7] : -# 2028| m2028_13(unsigned int) = Store[#temp2028:7] : &:r2028_12, r2029_9 +# 2031| Block 2 +# 2031| r2031_1(glval) = FunctionAddress[CommaTestHelper] : +# 2031| r2031_2(glval) = VariableAddress[x] : +# 2031| r2031_3(unsigned int) = Load[x] : &:r2031_2, m2028_6 +# 2031| v2031_4(void) = Call[CommaTestHelper] : func:r2031_1, 0:r2031_3 +# 2031| m2031_5(unknown) = ^CallSideEffect : ~m2028_4 +# 2031| m2031_6(unknown) = Chi : total:m2028_4, partial:m2031_5 +# 2031| r2031_7(glval) = VariableAddress[x] : +# 2031| r2031_8(unsigned int) = Load[x] : &:r2031_7, m2028_6 +# 2031| r2031_9(unsigned int) = CopyValue : r2031_8 +# 2030| r2030_12(glval) = VariableAddress[#temp2030:7] : +# 2030| m2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2031_9 #-----| Goto -> Block 1 -# 2030| Block 3 -# 2030| r2030_1(glval) = FunctionAddress[CommaTestHelper] : -# 2030| r2030_2(glval) = VariableAddress[x] : -# 2030| r2030_3(unsigned int) = Load[x] : &:r2030_2, m2026_6 -# 2030| v2030_4(void) = Call[CommaTestHelper] : func:r2030_1, 0:r2030_3 -# 2030| m2030_5(unknown) = ^CallSideEffect : ~m2026_4 -# 2030| m2030_6(unknown) = Chi : total:m2026_4, partial:m2030_5 -# 2030| r2030_7(int) = Constant[10] : -# 2030| r2030_8(int) = CopyValue : r2030_7 -# 2030| r2030_9(unsigned int) = Convert : r2030_8 -# 2028| r2028_14(glval) = VariableAddress[#temp2028:7] : -# 2028| m2028_15(unsigned int) = Store[#temp2028:7] : &:r2028_14, r2030_9 +# 2032| Block 3 +# 2032| r2032_1(glval) = FunctionAddress[CommaTestHelper] : +# 2032| r2032_2(glval) = VariableAddress[x] : +# 2032| r2032_3(unsigned int) = Load[x] : &:r2032_2, m2028_6 +# 2032| v2032_4(void) = Call[CommaTestHelper] : func:r2032_1, 0:r2032_3 +# 2032| m2032_5(unknown) = ^CallSideEffect : ~m2028_4 +# 2032| m2032_6(unknown) = Chi : total:m2028_4, partial:m2032_5 +# 2032| r2032_7(int) = Constant[10] : +# 2032| r2032_8(int) = CopyValue : r2032_7 +# 2032| r2032_9(unsigned int) = Convert : r2032_8 +# 2030| r2030_14(glval) = VariableAddress[#temp2030:7] : +# 2030| m2030_15(unsigned int) = Store[#temp2030:7] : &:r2030_14, r2032_9 #-----| Goto -> Block 1 -# 2033| void NewDeleteMem() -# 2033| Block 0 -# 2033| v2033_1(void) = EnterFunction : -# 2033| m2033_2(unknown) = AliasedDefinition : -# 2033| m2033_3(unknown) = InitializeNonLocal : -# 2033| m2033_4(unknown) = Chi : total:m2033_2, partial:m2033_3 -# 2034| r2034_1(glval) = VariableAddress[x] : -# 2034| r2034_2(glval) = FunctionAddress[operator new] : -# 2034| r2034_3(unsigned long) = Constant[4] : -# 2034| r2034_4(void *) = Call[operator new] : func:r2034_2, 0:r2034_3 -# 2034| m2034_5(unknown) = ^CallSideEffect : ~m2033_4 -# 2034| m2034_6(unknown) = Chi : total:m2033_4, partial:m2034_5 -# 2034| m2034_7(unknown) = ^InitializeDynamicAllocation : &:r2034_4 -# 2034| r2034_8(int *) = Convert : r2034_4 -# 2034| m2034_9(int *) = Store[x] : &:r2034_1, r2034_8 -# 2035| r2035_1(int) = Constant[6] : -# 2035| r2035_2(glval) = VariableAddress[x] : -# 2035| r2035_3(int *) = Load[x] : &:r2035_2, m2034_9 -# 2035| r2035_4(glval) = CopyValue : r2035_3 -# 2035| m2035_5(int) = Store[?] : &:r2035_4, r2035_1 -# 2035| m2035_6(unknown) = Chi : total:m2034_7, partial:m2035_5 -# 2036| r2036_1(glval) = FunctionAddress[operator delete] : -# 2036| r2036_2(glval) = VariableAddress[x] : -# 2036| r2036_3(int *) = Load[x] : &:r2036_2, m2034_9 -# 2036| v2036_4(void) = Call[operator delete] : func:r2036_1, 0:r2036_3 -# 2036| m2036_5(unknown) = ^CallSideEffect : ~m2034_6 -# 2036| m2036_6(unknown) = Chi : total:m2034_6, partial:m2036_5 -# 2037| v2037_1(void) = NoOp : -# 2033| v2033_5(void) = ReturnVoid : -# 2033| v2033_6(void) = AliasedUse : ~m2036_6 -# 2033| v2033_7(void) = ExitFunction : +# 2035| void NewDeleteMem() +# 2035| Block 0 +# 2035| v2035_1(void) = EnterFunction : +# 2035| m2035_2(unknown) = AliasedDefinition : +# 2035| m2035_3(unknown) = InitializeNonLocal : +# 2035| m2035_4(unknown) = Chi : total:m2035_2, partial:m2035_3 +# 2036| r2036_1(glval) = VariableAddress[x] : +# 2036| r2036_2(glval) = FunctionAddress[operator new] : +# 2036| r2036_3(unsigned long) = Constant[4] : +# 2036| r2036_4(void *) = Call[operator new] : func:r2036_2, 0:r2036_3 +# 2036| m2036_5(unknown) = ^CallSideEffect : ~m2035_4 +# 2036| m2036_6(unknown) = Chi : total:m2035_4, partial:m2036_5 +# 2036| m2036_7(unknown) = ^InitializeDynamicAllocation : &:r2036_4 +# 2036| r2036_8(int *) = Convert : r2036_4 +# 2036| m2036_9(int *) = Store[x] : &:r2036_1, r2036_8 +# 2037| r2037_1(int) = Constant[6] : +# 2037| r2037_2(glval) = VariableAddress[x] : +# 2037| r2037_3(int *) = Load[x] : &:r2037_2, m2036_9 +# 2037| r2037_4(glval) = CopyValue : r2037_3 +# 2037| m2037_5(int) = Store[?] : &:r2037_4, r2037_1 +# 2037| m2037_6(unknown) = Chi : total:m2036_7, partial:m2037_5 +# 2038| r2038_1(glval) = FunctionAddress[operator delete] : +# 2038| r2038_2(glval) = VariableAddress[x] : +# 2038| r2038_3(int *) = Load[x] : &:r2038_2, m2036_9 +# 2038| v2038_4(void) = Call[operator delete] : func:r2038_1, 0:r2038_3 +# 2038| m2038_5(unknown) = ^CallSideEffect : ~m2036_6 +# 2038| m2038_6(unknown) = Chi : total:m2036_6, partial:m2038_5 +# 2039| v2039_1(void) = NoOp : +# 2035| v2035_5(void) = ReturnVoid : +# 2035| v2035_6(void) = AliasedUse : ~m2038_6 +# 2035| v2035_7(void) = ExitFunction : -# 2039| void Base2::Base2() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| m2039_2(unknown) = AliasedDefinition : -# 2039| m2039_3(unknown) = InitializeNonLocal : -# 2039| m2039_4(unknown) = Chi : total:m2039_2, partial:m2039_3 -# 2039| r2039_5(glval) = VariableAddress[#this] : -# 2039| m2039_6(glval) = InitializeParameter[#this] : &:r2039_5 -# 2039| r2039_7(glval) = Load[#this] : &:r2039_5, m2039_6 -# 2039| m2039_8(Base2) = InitializeIndirection[#this] : &:r2039_7 -# 2039| v2039_9(void) = NoOp : -# 2039| v2039_10(void) = ReturnIndirection[#this] : &:r2039_7, m2039_8 -# 2039| v2039_11(void) = ReturnVoid : -# 2039| v2039_12(void) = AliasedUse : m2039_3 -# 2039| v2039_13(void) = ExitFunction : - -# 2041| void Base2::operator delete(void*) +# 2041| void Base2::Base2() # 2041| Block 0 -# 2041| v2041_1(void) = EnterFunction : -# 2041| m2041_2(unknown) = AliasedDefinition : -# 2041| m2041_3(unknown) = InitializeNonLocal : -# 2041| m2041_4(unknown) = Chi : total:m2041_2, partial:m2041_3 -# 2041| r2041_5(glval) = VariableAddress[p] : -# 2041| m2041_6(void *) = InitializeParameter[p] : &:r2041_5 -# 2041| r2041_7(void *) = Load[p] : &:r2041_5, m2041_6 -# 2041| m2041_8(unknown) = InitializeIndirection[p] : &:r2041_7 -# 2042| v2042_1(void) = NoOp : -# 2041| v2041_9(void) = ReturnIndirection[p] : &:r2041_7, m2041_8 -# 2041| v2041_10(void) = ReturnVoid : -# 2041| v2041_11(void) = AliasedUse : m2041_3 -# 2041| v2041_12(void) = ExitFunction : +# 2041| v2041_1(void) = EnterFunction : +# 2041| m2041_2(unknown) = AliasedDefinition : +# 2041| m2041_3(unknown) = InitializeNonLocal : +# 2041| m2041_4(unknown) = Chi : total:m2041_2, partial:m2041_3 +# 2041| r2041_5(glval) = VariableAddress[#this] : +# 2041| m2041_6(glval) = InitializeParameter[#this] : &:r2041_5 +# 2041| r2041_7(glval) = Load[#this] : &:r2041_5, m2041_6 +# 2041| m2041_8(Base2) = InitializeIndirection[#this] : &:r2041_7 +# 2041| v2041_9(void) = NoOp : +# 2041| v2041_10(void) = ReturnIndirection[#this] : &:r2041_7, m2041_8 +# 2041| v2041_11(void) = ReturnVoid : +# 2041| v2041_12(void) = AliasedUse : m2041_3 +# 2041| v2041_13(void) = ExitFunction : -# 2043| void Base2::~Base2() +# 2043| void Base2::operator delete(void*) # 2043| Block 0 -# 2043| v2043_1(void) = EnterFunction : -# 2043| m2043_2(unknown) = AliasedDefinition : -# 2043| m2043_3(unknown) = InitializeNonLocal : -# 2043| m2043_4(unknown) = Chi : total:m2043_2, partial:m2043_3 -# 2043| r2043_5(glval) = VariableAddress[#this] : -# 2043| m2043_6(glval) = InitializeParameter[#this] : &:r2043_5 -# 2043| r2043_7(glval) = Load[#this] : &:r2043_5, m2043_6 -# 2043| m2043_8(Base2) = InitializeIndirection[#this] : &:r2043_7 -# 2043| v2043_9(void) = NoOp : -# 2043| v2043_10(void) = ReturnIndirection[#this] : &:r2043_7, m2043_8 -# 2043| v2043_11(void) = ReturnVoid : -# 2043| v2043_12(void) = AliasedUse : m2043_3 -# 2043| v2043_13(void) = ExitFunction : +# 2043| v2043_1(void) = EnterFunction : +# 2043| m2043_2(unknown) = AliasedDefinition : +# 2043| m2043_3(unknown) = InitializeNonLocal : +# 2043| m2043_4(unknown) = Chi : total:m2043_2, partial:m2043_3 +# 2043| r2043_5(glval) = VariableAddress[p] : +# 2043| m2043_6(void *) = InitializeParameter[p] : &:r2043_5 +# 2043| r2043_7(void *) = Load[p] : &:r2043_5, m2043_6 +# 2043| m2043_8(unknown) = InitializeIndirection[p] : &:r2043_7 +# 2044| v2044_1(void) = NoOp : +# 2043| v2043_9(void) = ReturnIndirection[p] : &:r2043_7, m2043_8 +# 2043| v2043_10(void) = ReturnVoid : +# 2043| v2043_11(void) = AliasedUse : m2043_3 +# 2043| v2043_12(void) = ExitFunction : -# 2046| void Derived2::Derived2() -# 2046| Block 0 -# 2046| v2046_1(void) = EnterFunction : -# 2046| m2046_2(unknown) = AliasedDefinition : -# 2046| m2046_3(unknown) = InitializeNonLocal : -# 2046| m2046_4(unknown) = Chi : total:m2046_2, partial:m2046_3 -# 2046| r2046_5(glval) = VariableAddress[#this] : -# 2046| m2046_6(glval) = InitializeParameter[#this] : &:r2046_5 -# 2046| r2046_7(glval) = Load[#this] : &:r2046_5, m2046_6 -# 2046| m2046_8(Derived2) = InitializeIndirection[#this] : &:r2046_7 -# 2046| r2046_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2046_6 -# 2046| r2046_10(glval) = FunctionAddress[Base2] : -# 2046| v2046_11(void) = Call[Base2] : func:r2046_10, this:r2046_9 -# 2046| m2046_12(unknown) = ^CallSideEffect : ~m2046_4 -# 2046| m2046_13(unknown) = Chi : total:m2046_4, partial:m2046_12 -# 2046| m2046_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2046_9 -# 2046| m2046_15(unknown) = Chi : total:m2046_8, partial:m2046_14 -# 2046| v2046_16(void) = NoOp : -# 2046| v2046_17(void) = ReturnIndirection[#this] : &:r2046_7, m2046_15 -# 2046| v2046_18(void) = ReturnVoid : -# 2046| v2046_19(void) = AliasedUse : ~m2046_13 -# 2046| v2046_20(void) = ExitFunction : +# 2045| void Base2::~Base2() +# 2045| Block 0 +# 2045| v2045_1(void) = EnterFunction : +# 2045| m2045_2(unknown) = AliasedDefinition : +# 2045| m2045_3(unknown) = InitializeNonLocal : +# 2045| m2045_4(unknown) = Chi : total:m2045_2, partial:m2045_3 +# 2045| r2045_5(glval) = VariableAddress[#this] : +# 2045| m2045_6(glval) = InitializeParameter[#this] : &:r2045_5 +# 2045| r2045_7(glval) = Load[#this] : &:r2045_5, m2045_6 +# 2045| m2045_8(Base2) = InitializeIndirection[#this] : &:r2045_7 +# 2045| v2045_9(void) = NoOp : +# 2045| v2045_10(void) = ReturnIndirection[#this] : &:r2045_7, m2045_8 +# 2045| v2045_11(void) = ReturnVoid : +# 2045| v2045_12(void) = AliasedUse : m2045_3 +# 2045| v2045_13(void) = ExitFunction : -# 2049| void Derived2::~Derived2() -# 2049| Block 0 -# 2049| v2049_1(void) = EnterFunction : -# 2049| m2049_2(unknown) = AliasedDefinition : -# 2049| m2049_3(unknown) = InitializeNonLocal : -# 2049| m2049_4(unknown) = Chi : total:m2049_2, partial:m2049_3 -# 2049| r2049_5(glval) = VariableAddress[#this] : -# 2049| m2049_6(glval) = InitializeParameter[#this] : &:r2049_5 -# 2049| r2049_7(glval) = Load[#this] : &:r2049_5, m2049_6 -# 2049| m2049_8(Derived2) = InitializeIndirection[#this] : &:r2049_7 -# 2049| v2049_9(void) = NoOp : -# 2049| r2049_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2049_6 -# 2049| r2049_11(glval) = FunctionAddress[~Base2] : -# 2049| v2049_12(void) = Call[~Base2] : func:r2049_11, this:r2049_10 -# 2049| m2049_13(unknown) = ^CallSideEffect : ~m2049_4 -# 2049| m2049_14(unknown) = Chi : total:m2049_4, partial:m2049_13 -# 2049| v2049_15(void) = ReturnIndirection[#this] : &:r2049_7, m2049_8 -# 2049| v2049_16(void) = ReturnVoid : -# 2049| v2049_17(void) = AliasedUse : ~m2049_14 -# 2049| v2049_18(void) = ExitFunction : +# 2048| void Derived2::Derived2() +# 2048| Block 0 +# 2048| v2048_1(void) = EnterFunction : +# 2048| m2048_2(unknown) = AliasedDefinition : +# 2048| m2048_3(unknown) = InitializeNonLocal : +# 2048| m2048_4(unknown) = Chi : total:m2048_2, partial:m2048_3 +# 2048| r2048_5(glval) = VariableAddress[#this] : +# 2048| m2048_6(glval) = InitializeParameter[#this] : &:r2048_5 +# 2048| r2048_7(glval) = Load[#this] : &:r2048_5, m2048_6 +# 2048| m2048_8(Derived2) = InitializeIndirection[#this] : &:r2048_7 +# 2048| r2048_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2048_6 +# 2048| r2048_10(glval) = FunctionAddress[Base2] : +# 2048| v2048_11(void) = Call[Base2] : func:r2048_10, this:r2048_9 +# 2048| m2048_12(unknown) = ^CallSideEffect : ~m2048_4 +# 2048| m2048_13(unknown) = Chi : total:m2048_4, partial:m2048_12 +# 2048| m2048_14(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2048_9 +# 2048| m2048_15(unknown) = Chi : total:m2048_8, partial:m2048_14 +# 2048| v2048_16(void) = NoOp : +# 2048| v2048_17(void) = ReturnIndirection[#this] : &:r2048_7, m2048_15 +# 2048| v2048_18(void) = ReturnVoid : +# 2048| v2048_19(void) = AliasedUse : ~m2048_13 +# 2048| v2048_20(void) = ExitFunction : -# 2051| void Derived2::operator delete(void*) +# 2051| void Derived2::~Derived2() # 2051| Block 0 -# 2051| v2051_1(void) = EnterFunction : -# 2051| m2051_2(unknown) = AliasedDefinition : -# 2051| m2051_3(unknown) = InitializeNonLocal : -# 2051| m2051_4(unknown) = Chi : total:m2051_2, partial:m2051_3 -# 2051| r2051_5(glval) = VariableAddress[p] : -# 2051| m2051_6(void *) = InitializeParameter[p] : &:r2051_5 -# 2051| r2051_7(void *) = Load[p] : &:r2051_5, m2051_6 -# 2051| m2051_8(unknown) = InitializeIndirection[p] : &:r2051_7 -# 2052| v2052_1(void) = NoOp : -# 2051| v2051_9(void) = ReturnIndirection[p] : &:r2051_7, m2051_8 -# 2051| v2051_10(void) = ReturnVoid : -# 2051| v2051_11(void) = AliasedUse : m2051_3 -# 2051| v2051_12(void) = ExitFunction : +# 2051| v2051_1(void) = EnterFunction : +# 2051| m2051_2(unknown) = AliasedDefinition : +# 2051| m2051_3(unknown) = InitializeNonLocal : +# 2051| m2051_4(unknown) = Chi : total:m2051_2, partial:m2051_3 +# 2051| r2051_5(glval) = VariableAddress[#this] : +# 2051| m2051_6(glval) = InitializeParameter[#this] : &:r2051_5 +# 2051| r2051_7(glval) = Load[#this] : &:r2051_5, m2051_6 +# 2051| m2051_8(Derived2) = InitializeIndirection[#this] : &:r2051_7 +# 2051| v2051_9(void) = NoOp : +# 2051| r2051_10(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : m2051_6 +# 2051| r2051_11(glval) = FunctionAddress[~Base2] : +# 2051| v2051_12(void) = Call[~Base2] : func:r2051_11, this:r2051_10 +# 2051| m2051_13(unknown) = ^CallSideEffect : ~m2051_4 +# 2051| m2051_14(unknown) = Chi : total:m2051_4, partial:m2051_13 +# 2051| v2051_15(void) = ReturnIndirection[#this] : &:r2051_7, m2051_8 +# 2051| v2051_16(void) = ReturnVoid : +# 2051| v2051_17(void) = AliasedUse : ~m2051_14 +# 2051| v2051_18(void) = ExitFunction : -# 2056| int virtual_delete() -# 2056| Block 0 -# 2056| v2056_1(void) = EnterFunction : -# 2056| m2056_2(unknown) = AliasedDefinition : -# 2056| m2056_3(unknown) = InitializeNonLocal : -# 2056| m2056_4(unknown) = Chi : total:m2056_2, partial:m2056_3 -# 2058| r2058_1(glval) = VariableAddress[b1] : -# 2058| r2058_2(glval) = FunctionAddress[operator new] : -# 2058| r2058_3(unsigned long) = Constant[8] : -# 2058| r2058_4(void *) = Call[operator new] : func:r2058_2, 0:r2058_3 -# 2058| m2058_5(unknown) = ^CallSideEffect : ~m2056_4 -# 2058| m2058_6(unknown) = Chi : total:m2056_4, partial:m2058_5 -# 2058| m2058_7(unknown) = ^InitializeDynamicAllocation : &:r2058_4 -# 2058| r2058_8(Base2 *) = Convert : r2058_4 -# 2058| r2058_9(glval) = FunctionAddress[Base2] : -# 2058| v2058_10(void) = Call[Base2] : func:r2058_9, this:r2058_8 -# 2058| m2058_11(unknown) = ^CallSideEffect : ~m2058_6 -# 2058| m2058_12(unknown) = Chi : total:m2058_6, partial:m2058_11 -# 2058| m2058_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2058_8 -# 2058| m2058_14(unknown) = Chi : total:m2058_7, partial:m2058_13 -# 2058| m2058_15(Base2 *) = Store[b1] : &:r2058_1, r2058_8 -# 2059| r2059_1(glval) = VirtualDeleteFunctionAddress : -# 2059| r2059_2(glval) = VariableAddress[b1] : -# 2059| r2059_3(Base2 *) = Load[b1] : &:r2059_2, m2058_15 -# 2059| v2059_4(void) = Call[?] : func:r2059_1, 0:r2059_3 -# 2059| m2059_5(unknown) = ^CallSideEffect : ~m2058_12 -# 2059| m2059_6(unknown) = Chi : total:m2058_12, partial:m2059_5 -# 2061| r2061_1(glval) = VariableAddress[b2] : -# 2061| r2061_2(glval) = FunctionAddress[operator new] : -# 2061| r2061_3(unsigned long) = Constant[16] : -# 2061| r2061_4(void *) = Call[operator new] : func:r2061_2, 0:r2061_3 -# 2061| m2061_5(unknown) = ^CallSideEffect : ~m2059_6 -# 2061| m2061_6(unknown) = Chi : total:m2059_6, partial:m2061_5 -# 2061| m2061_7(unknown) = ^InitializeDynamicAllocation : &:r2061_4 -# 2061| r2061_8(Derived2 *) = Convert : r2061_4 -# 2061| r2061_9(glval) = FunctionAddress[Derived2] : -# 2061| v2061_10(void) = Call[Derived2] : func:r2061_9, this:r2061_8 -# 2061| m2061_11(unknown) = ^CallSideEffect : ~m2061_6 -# 2061| m2061_12(unknown) = Chi : total:m2061_6, partial:m2061_11 -# 2061| m2061_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2061_8 -# 2061| m2061_14(unknown) = Chi : total:m2061_7, partial:m2061_13 -# 2061| r2061_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2061_8 -# 2061| m2061_16(Base2 *) = Store[b2] : &:r2061_1, r2061_15 -# 2062| r2062_1(glval) = VirtualDeleteFunctionAddress : -# 2062| r2062_2(glval) = VariableAddress[b2] : -# 2062| r2062_3(Base2 *) = Load[b2] : &:r2062_2, m2061_16 -# 2062| v2062_4(void) = Call[?] : func:r2062_1, 0:r2062_3 -# 2062| m2062_5(unknown) = ^CallSideEffect : ~m2061_12 -# 2062| m2062_6(unknown) = Chi : total:m2061_12, partial:m2062_5 -# 2064| r2064_1(glval) = VariableAddress[d] : -# 2064| r2064_2(glval) = FunctionAddress[operator new] : -# 2064| r2064_3(unsigned long) = Constant[16] : -# 2064| r2064_4(void *) = Call[operator new] : func:r2064_2, 0:r2064_3 -# 2064| m2064_5(unknown) = ^CallSideEffect : ~m2062_6 -# 2064| m2064_6(unknown) = Chi : total:m2062_6, partial:m2064_5 -# 2064| m2064_7(unknown) = ^InitializeDynamicAllocation : &:r2064_4 -# 2064| r2064_8(Derived2 *) = Convert : r2064_4 -# 2064| r2064_9(glval) = FunctionAddress[Derived2] : -# 2064| v2064_10(void) = Call[Derived2] : func:r2064_9, this:r2064_8 -# 2064| m2064_11(unknown) = ^CallSideEffect : ~m2064_6 -# 2064| m2064_12(unknown) = Chi : total:m2064_6, partial:m2064_11 -# 2064| m2064_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2064_8 -# 2064| m2064_14(unknown) = Chi : total:m2064_7, partial:m2064_13 -# 2064| m2064_15(Derived2 *) = Store[d] : &:r2064_1, r2064_8 -# 2065| r2065_1(glval) = VirtualDeleteFunctionAddress : -# 2065| r2065_2(glval) = VariableAddress[d] : -# 2065| r2065_3(Derived2 *) = Load[d] : &:r2065_2, m2064_15 -# 2065| v2065_4(void) = Call[?] : func:r2065_1, 0:r2065_3 -# 2065| m2065_5(unknown) = ^CallSideEffect : ~m2064_12 -# 2065| m2065_6(unknown) = Chi : total:m2064_12, partial:m2065_5 -# 2066| r2066_1(glval) = VariableAddress[#return] : -# 2066| m2066_2(int) = Uninitialized[#return] : &:r2066_1 -# 2056| r2056_5(glval) = VariableAddress[#return] : -# 2056| v2056_6(void) = ReturnValue : &:r2056_5, m2066_2 -# 2056| v2056_7(void) = AliasedUse : ~m2065_6 -# 2056| v2056_8(void) = ExitFunction : +# 2053| void Derived2::operator delete(void*) +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| m2053_2(unknown) = AliasedDefinition : +# 2053| m2053_3(unknown) = InitializeNonLocal : +# 2053| m2053_4(unknown) = Chi : total:m2053_2, partial:m2053_3 +# 2053| r2053_5(glval) = VariableAddress[p] : +# 2053| m2053_6(void *) = InitializeParameter[p] : &:r2053_5 +# 2053| r2053_7(void *) = Load[p] : &:r2053_5, m2053_6 +# 2053| m2053_8(unknown) = InitializeIndirection[p] : &:r2053_7 +# 2054| v2054_1(void) = NoOp : +# 2053| v2053_9(void) = ReturnIndirection[p] : &:r2053_7, m2053_8 +# 2053| v2053_10(void) = ReturnVoid : +# 2053| v2053_11(void) = AliasedUse : m2053_3 +# 2053| v2053_12(void) = ExitFunction : -# 2070| void test_constant_folding() -# 2070| Block 0 -# 2070| v2070_1(void) = EnterFunction : -# 2070| m2070_2(unknown) = AliasedDefinition : -# 2070| m2070_3(unknown) = InitializeNonLocal : -# 2070| m2070_4(unknown) = Chi : total:m2070_2, partial:m2070_3 -# 2071| r2071_1(glval) = VariableAddress[x] : -# 2071| r2071_2(int) = Constant[116] : -# 2071| m2071_3(int) = Store[x] : &:r2071_1, r2071_2 -# 2072| r2072_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2072| r2072_2(int) = Constant[116] : -# 2072| v2072_3(void) = Call[test_constant_folding_use] : func:r2072_1, 0:r2072_2 -# 2072| m2072_4(unknown) = ^CallSideEffect : ~m2070_4 -# 2072| m2072_5(unknown) = Chi : total:m2070_4, partial:m2072_4 -# 2073| v2073_1(void) = NoOp : -# 2070| v2070_5(void) = ReturnVoid : -# 2070| v2070_6(void) = AliasedUse : ~m2072_5 -# 2070| v2070_7(void) = ExitFunction : +# 2058| int virtual_delete() +# 2058| Block 0 +# 2058| v2058_1(void) = EnterFunction : +# 2058| m2058_2(unknown) = AliasedDefinition : +# 2058| m2058_3(unknown) = InitializeNonLocal : +# 2058| m2058_4(unknown) = Chi : total:m2058_2, partial:m2058_3 +# 2060| r2060_1(glval) = VariableAddress[b1] : +# 2060| r2060_2(glval) = FunctionAddress[operator new] : +# 2060| r2060_3(unsigned long) = Constant[8] : +# 2060| r2060_4(void *) = Call[operator new] : func:r2060_2, 0:r2060_3 +# 2060| m2060_5(unknown) = ^CallSideEffect : ~m2058_4 +# 2060| m2060_6(unknown) = Chi : total:m2058_4, partial:m2060_5 +# 2060| m2060_7(unknown) = ^InitializeDynamicAllocation : &:r2060_4 +# 2060| r2060_8(Base2 *) = Convert : r2060_4 +# 2060| r2060_9(glval) = FunctionAddress[Base2] : +# 2060| v2060_10(void) = Call[Base2] : func:r2060_9, this:r2060_8 +# 2060| m2060_11(unknown) = ^CallSideEffect : ~m2060_6 +# 2060| m2060_12(unknown) = Chi : total:m2060_6, partial:m2060_11 +# 2060| m2060_13(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2060_8 +# 2060| m2060_14(unknown) = Chi : total:m2060_7, partial:m2060_13 +# 2060| m2060_15(Base2 *) = Store[b1] : &:r2060_1, r2060_8 +# 2061| r2061_1(glval) = VirtualDeleteFunctionAddress : +# 2061| r2061_2(glval) = VariableAddress[b1] : +# 2061| r2061_3(Base2 *) = Load[b1] : &:r2061_2, m2060_15 +# 2061| v2061_4(void) = Call[?] : func:r2061_1, 0:r2061_3 +# 2061| m2061_5(unknown) = ^CallSideEffect : ~m2060_12 +# 2061| m2061_6(unknown) = Chi : total:m2060_12, partial:m2061_5 +# 2063| r2063_1(glval) = VariableAddress[b2] : +# 2063| r2063_2(glval) = FunctionAddress[operator new] : +# 2063| r2063_3(unsigned long) = Constant[16] : +# 2063| r2063_4(void *) = Call[operator new] : func:r2063_2, 0:r2063_3 +# 2063| m2063_5(unknown) = ^CallSideEffect : ~m2061_6 +# 2063| m2063_6(unknown) = Chi : total:m2061_6, partial:m2063_5 +# 2063| m2063_7(unknown) = ^InitializeDynamicAllocation : &:r2063_4 +# 2063| r2063_8(Derived2 *) = Convert : r2063_4 +# 2063| r2063_9(glval) = FunctionAddress[Derived2] : +# 2063| v2063_10(void) = Call[Derived2] : func:r2063_9, this:r2063_8 +# 2063| m2063_11(unknown) = ^CallSideEffect : ~m2063_6 +# 2063| m2063_12(unknown) = Chi : total:m2063_6, partial:m2063_11 +# 2063| m2063_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2063_8 +# 2063| m2063_14(unknown) = Chi : total:m2063_7, partial:m2063_13 +# 2063| r2063_15(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2063_8 +# 2063| m2063_16(Base2 *) = Store[b2] : &:r2063_1, r2063_15 +# 2064| r2064_1(glval) = VirtualDeleteFunctionAddress : +# 2064| r2064_2(glval) = VariableAddress[b2] : +# 2064| r2064_3(Base2 *) = Load[b2] : &:r2064_2, m2063_16 +# 2064| v2064_4(void) = Call[?] : func:r2064_1, 0:r2064_3 +# 2064| m2064_5(unknown) = ^CallSideEffect : ~m2063_12 +# 2064| m2064_6(unknown) = Chi : total:m2063_12, partial:m2064_5 +# 2066| r2066_1(glval) = VariableAddress[d] : +# 2066| r2066_2(glval) = FunctionAddress[operator new] : +# 2066| r2066_3(unsigned long) = Constant[16] : +# 2066| r2066_4(void *) = Call[operator new] : func:r2066_2, 0:r2066_3 +# 2066| m2066_5(unknown) = ^CallSideEffect : ~m2064_6 +# 2066| m2066_6(unknown) = Chi : total:m2064_6, partial:m2066_5 +# 2066| m2066_7(unknown) = ^InitializeDynamicAllocation : &:r2066_4 +# 2066| r2066_8(Derived2 *) = Convert : r2066_4 +# 2066| r2066_9(glval) = FunctionAddress[Derived2] : +# 2066| v2066_10(void) = Call[Derived2] : func:r2066_9, this:r2066_8 +# 2066| m2066_11(unknown) = ^CallSideEffect : ~m2066_6 +# 2066| m2066_12(unknown) = Chi : total:m2066_6, partial:m2066_11 +# 2066| m2066_13(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2066_8 +# 2066| m2066_14(unknown) = Chi : total:m2066_7, partial:m2066_13 +# 2066| m2066_15(Derived2 *) = Store[d] : &:r2066_1, r2066_8 +# 2067| r2067_1(glval) = VirtualDeleteFunctionAddress : +# 2067| r2067_2(glval) = VariableAddress[d] : +# 2067| r2067_3(Derived2 *) = Load[d] : &:r2067_2, m2066_15 +# 2067| v2067_4(void) = Call[?] : func:r2067_1, 0:r2067_3 +# 2067| m2067_5(unknown) = ^CallSideEffect : ~m2066_12 +# 2067| m2067_6(unknown) = Chi : total:m2066_12, partial:m2067_5 +# 2068| r2068_1(glval) = VariableAddress[#return] : +# 2068| m2068_2(int) = Uninitialized[#return] : &:r2068_1 +# 2058| r2058_5(glval) = VariableAddress[#return] : +# 2058| v2058_6(void) = ReturnValue : &:r2058_5, m2068_2 +# 2058| v2058_7(void) = AliasedUse : ~m2067_6 +# 2058| v2058_8(void) = ExitFunction : -# 2077| int NonExit() -# 2077| Block 0 -# 2077| v2077_1(void) = EnterFunction : -# 2077| m2077_2(unknown) = AliasedDefinition : -# 2077| m2077_3(unknown) = InitializeNonLocal : -# 2077| m2077_4(unknown) = Chi : total:m2077_2, partial:m2077_3 -# 2078| r2078_1(glval) = VariableAddress[x] : -# 2078| r2078_2(glval) = FunctionAddress[Add] : -# 2078| r2078_3(int) = Constant[3] : -# 2078| r2078_4(int) = Constant[4] : -# 2078| r2078_5(int) = Call[Add] : func:r2078_2, 0:r2078_3, 1:r2078_4 -# 2078| m2078_6(unknown) = ^CallSideEffect : ~m2077_4 -# 2078| m2078_7(unknown) = Chi : total:m2077_4, partial:m2078_6 -# 2078| m2078_8(int) = Store[x] : &:r2078_1, r2078_5 -# 2079| r2079_1(glval) = VariableAddress[x] : -# 2079| r2079_2(int) = Load[x] : &:r2079_1, m2078_8 -# 2079| r2079_3(int) = Constant[7] : -# 2079| r2079_4(bool) = CompareEQ : r2079_2, r2079_3 -# 2079| v2079_5(void) = ConditionalBranch : r2079_4 +# 2072| void test_constant_folding() +# 2072| Block 0 +# 2072| v2072_1(void) = EnterFunction : +# 2072| m2072_2(unknown) = AliasedDefinition : +# 2072| m2072_3(unknown) = InitializeNonLocal : +# 2072| m2072_4(unknown) = Chi : total:m2072_2, partial:m2072_3 +# 2073| r2073_1(glval) = VariableAddress[x] : +# 2073| r2073_2(int) = Constant[116] : +# 2073| m2073_3(int) = Store[x] : &:r2073_1, r2073_2 +# 2074| r2074_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2074| r2074_2(int) = Constant[116] : +# 2074| v2074_3(void) = Call[test_constant_folding_use] : func:r2074_1, 0:r2074_2 +# 2074| m2074_4(unknown) = ^CallSideEffect : ~m2072_4 +# 2074| m2074_5(unknown) = Chi : total:m2072_4, partial:m2074_4 +# 2075| v2075_1(void) = NoOp : +# 2072| v2072_5(void) = ReturnVoid : +# 2072| v2072_6(void) = AliasedUse : ~m2074_5 +# 2072| v2072_7(void) = ExitFunction : + +# 2079| int NonExit() +# 2079| Block 0 +# 2079| v2079_1(void) = EnterFunction : +# 2079| m2079_2(unknown) = AliasedDefinition : +# 2079| m2079_3(unknown) = InitializeNonLocal : +# 2079| m2079_4(unknown) = Chi : total:m2079_2, partial:m2079_3 +# 2080| r2080_1(glval) = VariableAddress[x] : +# 2080| r2080_2(glval) = FunctionAddress[Add] : +# 2080| r2080_3(int) = Constant[3] : +# 2080| r2080_4(int) = Constant[4] : +# 2080| r2080_5(int) = Call[Add] : func:r2080_2, 0:r2080_3, 1:r2080_4 +# 2080| m2080_6(unknown) = ^CallSideEffect : ~m2079_4 +# 2080| m2080_7(unknown) = Chi : total:m2079_4, partial:m2080_6 +# 2080| m2080_8(int) = Store[x] : &:r2080_1, r2080_5 +# 2081| r2081_1(glval) = VariableAddress[x] : +# 2081| r2081_2(int) = Load[x] : &:r2081_1, m2080_8 +# 2081| r2081_3(int) = Constant[7] : +# 2081| r2081_4(bool) = CompareEQ : r2081_2, r2081_3 +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2080| Block 1 -# 2080| r2080_1(glval) = FunctionAddress[exit] : -# 2080| r2080_2(int) = Constant[3] : -# 2080| v2080_3(void) = Call[exit] : func:r2080_1, 0:r2080_2 -# 2080| m2080_4(unknown) = ^CallSideEffect : ~m2078_7 -# 2080| m2080_5(unknown) = Chi : total:m2078_7, partial:m2080_4 -# 2077| v2077_5(void) = Unreached : +# 2082| Block 1 +# 2082| r2082_1(glval) = FunctionAddress[exit] : +# 2082| r2082_2(int) = Constant[3] : +# 2082| v2082_3(void) = Call[exit] : func:r2082_1, 0:r2082_2 +# 2082| m2082_4(unknown) = ^CallSideEffect : ~m2080_7 +# 2082| m2082_5(unknown) = Chi : total:m2080_7, partial:m2082_4 +# 2079| v2079_5(void) = Unreached : -# 2081| Block 2 -# 2081| r2081_1(glval) = FunctionAddress[VoidFunc] : -# 2081| v2081_2(void) = Call[VoidFunc] : func:r2081_1 -# 2081| m2081_3(unknown) = ^CallSideEffect : ~m2078_7 -# 2081| m2081_4(unknown) = Chi : total:m2078_7, partial:m2081_3 -# 2082| r2082_1(glval) = VariableAddress[#return] : -# 2082| r2082_2(glval) = VariableAddress[x] : -# 2082| r2082_3(int) = Load[x] : &:r2082_2, m2078_8 -# 2082| m2082_4(int) = Store[#return] : &:r2082_1, r2082_3 -# 2077| r2077_6(glval) = VariableAddress[#return] : -# 2077| v2077_7(void) = ReturnValue : &:r2077_6, m2082_4 -# 2077| v2077_8(void) = AliasedUse : ~m2081_4 -# 2077| v2077_9(void) = ExitFunction : +# 2083| Block 2 +# 2083| r2083_1(glval) = FunctionAddress[VoidFunc] : +# 2083| v2083_2(void) = Call[VoidFunc] : func:r2083_1 +# 2083| m2083_3(unknown) = ^CallSideEffect : ~m2080_7 +# 2083| m2083_4(unknown) = Chi : total:m2080_7, partial:m2083_3 +# 2084| r2084_1(glval) = VariableAddress[#return] : +# 2084| r2084_2(glval) = VariableAddress[x] : +# 2084| r2084_3(int) = Load[x] : &:r2084_2, m2080_8 +# 2084| m2084_4(int) = Store[#return] : &:r2084_1, r2084_3 +# 2079| r2079_6(glval) = VariableAddress[#return] : +# 2079| v2079_7(void) = ReturnValue : &:r2079_6, m2084_4 +# 2079| v2079_8(void) = AliasedUse : ~m2083_4 +# 2079| v2079_9(void) = ExitFunction : -# 2085| void CallsNonExit() -# 2085| Block 0 -# 2085| v2085_1(void) = EnterFunction : -# 2085| m2085_2(unknown) = AliasedDefinition : -# 2085| m2085_3(unknown) = InitializeNonLocal : -# 2085| m2085_4(unknown) = Chi : total:m2085_2, partial:m2085_3 -# 2086| r2086_1(glval) = FunctionAddress[VoidFunc] : -# 2086| v2086_2(void) = Call[VoidFunc] : func:r2086_1 -# 2086| m2086_3(unknown) = ^CallSideEffect : ~m2085_4 -# 2086| m2086_4(unknown) = Chi : total:m2085_4, partial:m2086_3 -# 2087| r2087_1(glval) = FunctionAddress[exit] : -# 2087| r2087_2(int) = Constant[3] : -# 2087| v2087_3(void) = Call[exit] : func:r2087_1, 0:r2087_2 -# 2087| m2087_4(unknown) = ^CallSideEffect : ~m2086_4 -# 2087| m2087_5(unknown) = Chi : total:m2086_4, partial:m2087_4 -# 2085| v2085_5(void) = Unreached : +# 2087| void CallsNonExit() +# 2087| Block 0 +# 2087| v2087_1(void) = EnterFunction : +# 2087| m2087_2(unknown) = AliasedDefinition : +# 2087| m2087_3(unknown) = InitializeNonLocal : +# 2087| m2087_4(unknown) = Chi : total:m2087_2, partial:m2087_3 +# 2088| r2088_1(glval) = FunctionAddress[VoidFunc] : +# 2088| v2088_2(void) = Call[VoidFunc] : func:r2088_1 +# 2088| m2088_3(unknown) = ^CallSideEffect : ~m2087_4 +# 2088| m2088_4(unknown) = Chi : total:m2087_4, partial:m2088_3 +# 2089| r2089_1(glval) = FunctionAddress[exit] : +# 2089| r2089_2(int) = Constant[3] : +# 2089| v2089_3(void) = Call[exit] : func:r2089_1, 0:r2089_2 +# 2089| m2089_4(unknown) = ^CallSideEffect : ~m2088_4 +# 2089| m2089_5(unknown) = Chi : total:m2088_4, partial:m2089_4 +# 2087| v2087_5(void) = Unreached : -# 2090| int TransNonExit() -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| m2090_2(unknown) = AliasedDefinition : -# 2090| m2090_3(unknown) = InitializeNonLocal : -# 2090| m2090_4(unknown) = Chi : total:m2090_2, partial:m2090_3 -# 2091| r2091_1(glval) = VariableAddress[x] : -# 2091| r2091_2(glval) = FunctionAddress[Add] : -# 2091| r2091_3(int) = Constant[3] : -# 2091| r2091_4(int) = Constant[4] : -# 2091| r2091_5(int) = Call[Add] : func:r2091_2, 0:r2091_3, 1:r2091_4 -# 2091| m2091_6(unknown) = ^CallSideEffect : ~m2090_4 -# 2091| m2091_7(unknown) = Chi : total:m2090_4, partial:m2091_6 -# 2091| m2091_8(int) = Store[x] : &:r2091_1, r2091_5 -# 2092| r2092_1(glval) = VariableAddress[x] : -# 2092| r2092_2(int) = Load[x] : &:r2092_1, m2091_8 -# 2092| r2092_3(int) = Constant[7] : -# 2092| r2092_4(bool) = CompareEQ : r2092_2, r2092_3 -# 2092| v2092_5(void) = ConditionalBranch : r2092_4 +# 2092| int TransNonExit() +# 2092| Block 0 +# 2092| v2092_1(void) = EnterFunction : +# 2092| m2092_2(unknown) = AliasedDefinition : +# 2092| m2092_3(unknown) = InitializeNonLocal : +# 2092| m2092_4(unknown) = Chi : total:m2092_2, partial:m2092_3 +# 2093| r2093_1(glval) = VariableAddress[x] : +# 2093| r2093_2(glval) = FunctionAddress[Add] : +# 2093| r2093_3(int) = Constant[3] : +# 2093| r2093_4(int) = Constant[4] : +# 2093| r2093_5(int) = Call[Add] : func:r2093_2, 0:r2093_3, 1:r2093_4 +# 2093| m2093_6(unknown) = ^CallSideEffect : ~m2092_4 +# 2093| m2093_7(unknown) = Chi : total:m2092_4, partial:m2093_6 +# 2093| m2093_8(int) = Store[x] : &:r2093_1, r2093_5 +# 2094| r2094_1(glval) = VariableAddress[x] : +# 2094| r2094_2(int) = Load[x] : &:r2094_1, m2093_8 +# 2094| r2094_3(int) = Constant[7] : +# 2094| r2094_4(bool) = CompareEQ : r2094_2, r2094_3 +# 2094| v2094_5(void) = ConditionalBranch : r2094_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2093| Block 1 -# 2093| r2093_1(glval) = FunctionAddress[CallsNonExit] : -# 2093| v2093_2(void) = Call[CallsNonExit] : func:r2093_1 -# 2090| v2090_5(void) = Unreached : +# 2095| Block 1 +# 2095| r2095_1(glval) = FunctionAddress[CallsNonExit] : +# 2095| v2095_2(void) = Call[CallsNonExit] : func:r2095_1 +# 2092| v2092_5(void) = Unreached : -# 2094| Block 2 -# 2094| r2094_1(glval) = FunctionAddress[VoidFunc] : -# 2094| v2094_2(void) = Call[VoidFunc] : func:r2094_1 -# 2094| m2094_3(unknown) = ^CallSideEffect : ~m2091_7 -# 2094| m2094_4(unknown) = Chi : total:m2091_7, partial:m2094_3 -# 2095| r2095_1(glval) = VariableAddress[#return] : -# 2095| r2095_2(glval) = VariableAddress[x] : -# 2095| r2095_3(int) = Load[x] : &:r2095_2, m2091_8 -# 2095| m2095_4(int) = Store[#return] : &:r2095_1, r2095_3 -# 2090| r2090_6(glval) = VariableAddress[#return] : -# 2090| v2090_7(void) = ReturnValue : &:r2090_6, m2095_4 -# 2090| v2090_8(void) = AliasedUse : ~m2094_4 -# 2090| v2090_9(void) = ExitFunction : +# 2096| Block 2 +# 2096| r2096_1(glval) = FunctionAddress[VoidFunc] : +# 2096| v2096_2(void) = Call[VoidFunc] : func:r2096_1 +# 2096| m2096_3(unknown) = ^CallSideEffect : ~m2093_7 +# 2096| m2096_4(unknown) = Chi : total:m2093_7, partial:m2096_3 +# 2097| r2097_1(glval) = VariableAddress[#return] : +# 2097| r2097_2(glval) = VariableAddress[x] : +# 2097| r2097_3(int) = Load[x] : &:r2097_2, m2093_8 +# 2097| m2097_4(int) = Store[#return] : &:r2097_1, r2097_3 +# 2092| r2092_6(glval) = VariableAddress[#return] : +# 2092| v2092_7(void) = ReturnValue : &:r2092_6, m2097_4 +# 2092| v2092_8(void) = AliasedUse : ~m2096_4 +# 2092| v2092_9(void) = ExitFunction : -# 2098| void newArrayCorrectType(size_t) -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| m2098_2(unknown) = AliasedDefinition : -# 2098| m2098_3(unknown) = InitializeNonLocal : -# 2098| m2098_4(unknown) = Chi : total:m2098_2, partial:m2098_3 -# 2098| r2098_5(glval) = VariableAddress[n] : -# 2098| m2098_6(unsigned long) = InitializeParameter[n] : &:r2098_5 -# 2099| r2099_1(glval) = FunctionAddress[operator new[]] : -# 2099| r2099_2(glval) = VariableAddress[n] : -# 2099| r2099_3(unsigned long) = Load[n] : &:r2099_2, m2098_6 -# 2099| r2099_4(unsigned long) = Constant[4] : -# 2099| r2099_5(unsigned long) = Mul : r2099_3, r2099_4 -# 2099| r2099_6(void *) = Call[operator new[]] : func:r2099_1, 0:r2099_5 -# 2099| m2099_7(unknown) = ^CallSideEffect : ~m2098_4 -# 2099| m2099_8(unknown) = Chi : total:m2098_4, partial:m2099_7 -# 2099| m2099_9(unknown) = ^InitializeDynamicAllocation : &:r2099_6 -# 2099| r2099_10(int *) = Convert : r2099_6 -# 2100| r2100_1(glval) = FunctionAddress[operator new[]] : -# 2100| r2100_2(glval) = VariableAddress[n] : -# 2100| r2100_3(unsigned long) = Load[n] : &:r2100_2, m2098_6 -# 2100| r2100_4(unsigned long) = Constant[4] : -# 2100| r2100_5(unsigned long) = Mul : r2100_3, r2100_4 -# 2100| r2100_6(float) = Constant[1.0] : -# 2100| r2100_7(void *) = Call[operator new[]] : func:r2100_1, 0:r2100_5, 1:r2100_6 -# 2100| m2100_8(unknown) = ^CallSideEffect : ~m2099_8 -# 2100| m2100_9(unknown) = Chi : total:m2099_8, partial:m2100_8 -# 2100| m2100_10(unknown) = ^InitializeDynamicAllocation : &:r2100_7 -# 2100| r2100_11(int *) = Convert : r2100_7 +# 2100| void newArrayCorrectType(size_t) +# 2100| Block 0 +# 2100| v2100_1(void) = EnterFunction : +# 2100| m2100_2(unknown) = AliasedDefinition : +# 2100| m2100_3(unknown) = InitializeNonLocal : +# 2100| m2100_4(unknown) = Chi : total:m2100_2, partial:m2100_3 +# 2100| r2100_5(glval) = VariableAddress[n] : +# 2100| m2100_6(unsigned long) = InitializeParameter[n] : &:r2100_5 # 2101| r2101_1(glval) = FunctionAddress[operator new[]] : # 2101| r2101_2(glval) = VariableAddress[n] : -# 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, m2098_6 -# 2101| r2101_4(unsigned long) = Constant[8] : +# 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, m2100_6 +# 2101| r2101_4(unsigned long) = Constant[4] : # 2101| r2101_5(unsigned long) = Mul : r2101_3, r2101_4 # 2101| r2101_6(void *) = Call[operator new[]] : func:r2101_1, 0:r2101_5 -# 2101| m2101_7(unknown) = ^CallSideEffect : ~m2100_9 -# 2101| m2101_8(unknown) = Chi : total:m2100_9, partial:m2101_7 +# 2101| m2101_7(unknown) = ^CallSideEffect : ~m2100_4 +# 2101| m2101_8(unknown) = Chi : total:m2100_4, partial:m2101_7 # 2101| m2101_9(unknown) = ^InitializeDynamicAllocation : &:r2101_6 -# 2101| r2101_10(String *) = Convert : r2101_6 +# 2101| r2101_10(int *) = Convert : r2101_6 # 2102| r2102_1(glval) = FunctionAddress[operator new[]] : # 2102| r2102_2(glval) = VariableAddress[n] : -# 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, m2098_6 -# 2102| r2102_4(unsigned long) = Constant[256] : +# 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, m2100_6 +# 2102| r2102_4(unsigned long) = Constant[4] : # 2102| r2102_5(unsigned long) = Mul : r2102_3, r2102_4 -# 2102| r2102_6(align_val_t) = Constant[128] : +# 2102| r2102_6(float) = Constant[1.0] : # 2102| r2102_7(void *) = Call[operator new[]] : func:r2102_1, 0:r2102_5, 1:r2102_6 # 2102| m2102_8(unknown) = ^CallSideEffect : ~m2101_8 # 2102| m2102_9(unknown) = Chi : total:m2101_8, partial:m2102_8 # 2102| m2102_10(unknown) = ^InitializeDynamicAllocation : &:r2102_7 -# 2102| r2102_11(Overaligned *) = Convert : r2102_7 +# 2102| r2102_11(int *) = Convert : r2102_7 # 2103| r2103_1(glval) = FunctionAddress[operator new[]] : # 2103| r2103_2(glval) = VariableAddress[n] : -# 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, m2098_6 -# 2103| r2103_4(unsigned long) = Constant[1] : +# 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, m2100_6 +# 2103| r2103_4(unsigned long) = Constant[8] : # 2103| r2103_5(unsigned long) = Mul : r2103_3, r2103_4 # 2103| r2103_6(void *) = Call[operator new[]] : func:r2103_1, 0:r2103_5 # 2103| m2103_7(unknown) = ^CallSideEffect : ~m2102_9 # 2103| m2103_8(unknown) = Chi : total:m2102_9, partial:m2103_7 # 2103| m2103_9(unknown) = ^InitializeDynamicAllocation : &:r2103_6 -# 2103| r2103_10(DefaultCtorWithDefaultParam *) = Convert : r2103_6 +# 2103| r2103_10(String *) = Convert : r2103_6 # 2104| r2104_1(glval) = FunctionAddress[operator new[]] : # 2104| r2104_2(glval) = VariableAddress[n] : -# 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, m2098_6 -# 2104| r2104_4(unsigned long) = Constant[4] : +# 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, m2100_6 +# 2104| r2104_4(unsigned long) = Constant[256] : # 2104| r2104_5(unsigned long) = Mul : r2104_3, r2104_4 -# 2104| r2104_6(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5 -# 2104| m2104_7(unknown) = ^CallSideEffect : ~m2103_8 -# 2104| m2104_8(unknown) = Chi : total:m2103_8, partial:m2104_7 -# 2104| m2104_9(unknown) = ^InitializeDynamicAllocation : &:r2104_6 -# 2104| r2104_10(int *) = Convert : r2104_6 -# 2105| v2105_1(void) = NoOp : -# 2098| v2098_7(void) = ReturnVoid : -# 2098| v2098_8(void) = AliasedUse : ~m2104_8 -# 2098| v2098_9(void) = ExitFunction : +# 2104| r2104_6(align_val_t) = Constant[128] : +# 2104| r2104_7(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5, 1:r2104_6 +# 2104| m2104_8(unknown) = ^CallSideEffect : ~m2103_8 +# 2104| m2104_9(unknown) = Chi : total:m2103_8, partial:m2104_8 +# 2104| m2104_10(unknown) = ^InitializeDynamicAllocation : &:r2104_7 +# 2104| r2104_11(Overaligned *) = Convert : r2104_7 +# 2105| r2105_1(glval) = FunctionAddress[operator new[]] : +# 2105| r2105_2(glval) = VariableAddress[n] : +# 2105| r2105_3(unsigned long) = Load[n] : &:r2105_2, m2100_6 +# 2105| r2105_4(unsigned long) = Constant[1] : +# 2105| r2105_5(unsigned long) = Mul : r2105_3, r2105_4 +# 2105| r2105_6(void *) = Call[operator new[]] : func:r2105_1, 0:r2105_5 +# 2105| m2105_7(unknown) = ^CallSideEffect : ~m2104_9 +# 2105| m2105_8(unknown) = Chi : total:m2104_9, partial:m2105_7 +# 2105| m2105_9(unknown) = ^InitializeDynamicAllocation : &:r2105_6 +# 2105| r2105_10(DefaultCtorWithDefaultParam *) = Convert : r2105_6 +# 2106| r2106_1(glval) = FunctionAddress[operator new[]] : +# 2106| r2106_2(glval) = VariableAddress[n] : +# 2106| r2106_3(unsigned long) = Load[n] : &:r2106_2, m2100_6 +# 2106| r2106_4(unsigned long) = Constant[4] : +# 2106| r2106_5(unsigned long) = Mul : r2106_3, r2106_4 +# 2106| r2106_6(void *) = Call[operator new[]] : func:r2106_1, 0:r2106_5 +# 2106| m2106_7(unknown) = ^CallSideEffect : ~m2105_8 +# 2106| m2106_8(unknown) = Chi : total:m2105_8, partial:m2106_7 +# 2106| m2106_9(unknown) = ^InitializeDynamicAllocation : &:r2106_6 +# 2106| r2106_10(int *) = Convert : r2106_6 +# 2107| v2107_1(void) = NoOp : +# 2100| v2100_7(void) = ReturnVoid : +# 2100| v2100_8(void) = AliasedUse : ~m2106_8 +# 2100| v2100_9(void) = ExitFunction : -# 2109| char* test_strtod(char*) -# 2109| Block 0 -# 2109| v2109_1(void) = EnterFunction : -# 2109| m2109_2(unknown) = AliasedDefinition : -# 2109| m2109_3(unknown) = InitializeNonLocal : -# 2109| m2109_4(unknown) = Chi : total:m2109_2, partial:m2109_3 -# 2109| r2109_5(glval) = VariableAddress[s] : -# 2109| m2109_6(char *) = InitializeParameter[s] : &:r2109_5 -# 2109| r2109_7(char *) = Load[s] : &:r2109_5, m2109_6 -# 2109| m2109_8(unknown) = InitializeIndirection[s] : &:r2109_7 -# 2110| r2110_1(glval) = VariableAddress[end] : -# 2110| m2110_2(char *) = Uninitialized[end] : &:r2110_1 -# 2111| r2111_1(glval) = VariableAddress[d] : -# 2111| r2111_2(glval) = FunctionAddress[strtod] : -# 2111| r2111_3(glval) = VariableAddress[s] : -# 2111| r2111_4(char *) = Load[s] : &:r2111_3, m2109_6 -# 2111| r2111_5(char *) = Convert : r2111_4 -# 2111| r2111_6(glval) = VariableAddress[end] : -# 2111| r2111_7(char **) = CopyValue : r2111_6 -# 2111| r2111_8(double) = Call[strtod] : func:r2111_2, 0:r2111_5, 1:r2111_7 -# 2111| v2111_9(void) = ^BufferReadSideEffect[0] : &:r2111_5, ~m2109_8 -# 2111| m2111_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2111_7 -# 2111| m2111_11(char *) = Chi : total:m2110_2, partial:m2111_10 -# 2111| m2111_12(double) = Store[d] : &:r2111_1, r2111_8 -# 2112| r2112_1(glval) = VariableAddress[#return] : -# 2112| r2112_2(glval) = VariableAddress[end] : -# 2112| r2112_3(char *) = Load[end] : &:r2112_2, m2111_11 -# 2112| m2112_4(char *) = Store[#return] : &:r2112_1, r2112_3 -# 2109| v2109_9(void) = ReturnIndirection[s] : &:r2109_7, m2109_8 -# 2109| r2109_10(glval) = VariableAddress[#return] : -# 2109| v2109_11(void) = ReturnValue : &:r2109_10, m2112_4 -# 2109| v2109_12(void) = AliasedUse : m2109_3 -# 2109| v2109_13(void) = ExitFunction : +# 2111| char* test_strtod(char*) +# 2111| Block 0 +# 2111| v2111_1(void) = EnterFunction : +# 2111| m2111_2(unknown) = AliasedDefinition : +# 2111| m2111_3(unknown) = InitializeNonLocal : +# 2111| m2111_4(unknown) = Chi : total:m2111_2, partial:m2111_3 +# 2111| r2111_5(glval) = VariableAddress[s] : +# 2111| m2111_6(char *) = InitializeParameter[s] : &:r2111_5 +# 2111| r2111_7(char *) = Load[s] : &:r2111_5, m2111_6 +# 2111| m2111_8(unknown) = InitializeIndirection[s] : &:r2111_7 +# 2112| r2112_1(glval) = VariableAddress[end] : +# 2112| m2112_2(char *) = Uninitialized[end] : &:r2112_1 +# 2113| r2113_1(glval) = VariableAddress[d] : +# 2113| r2113_2(glval) = FunctionAddress[strtod] : +# 2113| r2113_3(glval) = VariableAddress[s] : +# 2113| r2113_4(char *) = Load[s] : &:r2113_3, m2111_6 +# 2113| r2113_5(char *) = Convert : r2113_4 +# 2113| r2113_6(glval) = VariableAddress[end] : +# 2113| r2113_7(char **) = CopyValue : r2113_6 +# 2113| r2113_8(double) = Call[strtod] : func:r2113_2, 0:r2113_5, 1:r2113_7 +# 2113| v2113_9(void) = ^BufferReadSideEffect[0] : &:r2113_5, ~m2111_8 +# 2113| m2113_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2113_7 +# 2113| m2113_11(char *) = Chi : total:m2112_2, partial:m2113_10 +# 2113| m2113_12(double) = Store[d] : &:r2113_1, r2113_8 +# 2114| r2114_1(glval) = VariableAddress[#return] : +# 2114| r2114_2(glval) = VariableAddress[end] : +# 2114| r2114_3(char *) = Load[end] : &:r2114_2, m2113_11 +# 2114| m2114_4(char *) = Store[#return] : &:r2114_1, r2114_3 +# 2111| v2111_9(void) = ReturnIndirection[s] : &:r2111_7, m2111_8 +# 2111| r2111_10(glval) = VariableAddress[#return] : +# 2111| v2111_11(void) = ReturnValue : &:r2111_10, m2114_4 +# 2111| v2111_12(void) = AliasedUse : m2111_3 +# 2111| v2111_13(void) = ExitFunction : + +# 2121| void call_as_child_of_ConditionDeclExpr() +# 2121| Block 0 +# 2121| v2121_1(void) = EnterFunction : +# 2121| m2121_2(unknown) = AliasedDefinition : +# 2121| m2121_3(unknown) = InitializeNonLocal : +# 2121| m2121_4(unknown) = Chi : total:m2121_2, partial:m2121_3 +# 2122| r2122_1(glval) = VariableAddress[b] : +# 2122| r2122_2(HasOperatorBool) = Constant[0] : +# 2122| m2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 +# 2122| r2122_4(glval) = VariableAddress[b] : +# 2122| r2122_5(glval) = FunctionAddress[operator bool] : +# 2122| r2122_6(bool) = Call[operator bool] : func:r2122_5, this:r2122_4 +# 2122| m2122_7(unknown) = ^CallSideEffect : ~m2121_4 +# 2122| m2122_8(unknown) = Chi : total:m2121_4, partial:m2122_7 +# 2122| v2122_9(void) = ^IndirectReadSideEffect[-1] : &:r2122_4, m2122_3 +# 2122| m2122_10(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2122_4 +# 2122| m2122_11(HasOperatorBool) = Chi : total:m2122_3, partial:m2122_10 +# 2122| r2122_12(bool) = CopyValue : r2122_6 +# 2122| v2122_13(void) = ConditionalBranch : r2122_12 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2122| Block 1 +# 2122| v2122_14(void) = NoOp : +#-----| Goto -> Block 2 + +# 2123| Block 2 +# 2123| v2123_1(void) = NoOp : +# 2121| v2121_5(void) = ReturnVoid : +# 2121| v2121_6(void) = AliasedUse : ~m2122_8 +# 2121| v2121_7(void) = ExitFunction : + +# 2125| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2125| Block 0 +# 2125| v2125_1(void) = EnterFunction : +# 2125| m2125_2(unknown) = AliasedDefinition : +# 2125| m2125_3(unknown) = InitializeNonLocal : +# 2125| m2125_4(unknown) = Chi : total:m2125_2, partial:m2125_3 +# 2125| r2125_5(glval) = VariableAddress[#this] : +# 2125| m2125_6(glval) = InitializeParameter[#this] : &:r2125_5 +# 2125| r2125_7(glval) = Load[#this] : &:r2125_5, m2125_6 +# 2125| m2125_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2125_7 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| m0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, m0_2 +#-----| m0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 2125| r2125_9(glval) = FieldAddress[x] : m2125_6 +# 2125| r2125_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 2125| r2125_11(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_10, m0_2 +# 2125| r2125_12(glval) = CopyValue : r2125_11 +# 2125| r2125_13(glval) = FieldAddress[x] : r2125_12 +# 2125| r2125_14(char *) = Load[?] : &:r2125_13, ~m0_4 +# 2125| m2125_15(char *) = Store[?] : &:r2125_9, r2125_14 +# 2125| m2125_16(unknown) = Chi : total:m2125_8, partial:m2125_15 +# 2125| v2125_17(void) = NoOp : +# 2125| v2125_18(void) = ReturnIndirection[#this] : &:r2125_7, m2125_16 +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, m0_4 +# 2125| v2125_19(void) = ReturnVoid : +# 2125| v2125_20(void) = AliasedUse : m2125_3 +# 2125| v2125_21(void) = ExitFunction : + +# 2128| void ClassWithDestructor::ClassWithDestructor() +# 2128| Block 0 +# 2128| v2128_1(void) = EnterFunction : +# 2128| m2128_2(unknown) = AliasedDefinition : +# 2128| m2128_3(unknown) = InitializeNonLocal : +# 2128| m2128_4(unknown) = Chi : total:m2128_2, partial:m2128_3 +# 2128| r2128_5(glval) = VariableAddress[#this] : +# 2128| m2128_6(glval) = InitializeParameter[#this] : &:r2128_5 +# 2128| r2128_7(glval) = Load[#this] : &:r2128_5, m2128_6 +# 2128| m2128_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_7 +# 2128| r2128_9(glval) = FunctionAddress[operator new] : +# 2128| r2128_10(unsigned long) = Constant[1] : +# 2128| r2128_11(void *) = Call[operator new] : func:r2128_9, 0:r2128_10 +# 2128| m2128_12(unknown) = ^CallSideEffect : ~m2128_4 +# 2128| m2128_13(unknown) = Chi : total:m2128_4, partial:m2128_12 +# 2128| m2128_14(unknown) = ^InitializeDynamicAllocation : &:r2128_11 +# 2128| r2128_15(char *) = Convert : r2128_11 +# 2128| r2128_16(glval) = VariableAddress[#this] : +# 2128| r2128_17(ClassWithDestructor *) = Load[#this] : &:r2128_16, m2128_6 +# 2128| r2128_18(glval) = FieldAddress[x] : r2128_17 +# 2128| m2128_19(char *) = Store[?] : &:r2128_18, r2128_15 +# 2128| m2128_20(unknown) = Chi : total:m2128_8, partial:m2128_19 +# 2128| v2128_21(void) = NoOp : +# 2128| v2128_22(void) = ReturnIndirection[#this] : &:r2128_7, m2128_20 +# 2128| v2128_23(void) = ReturnVoid : +# 2128| v2128_24(void) = AliasedUse : ~m2128_13 +# 2128| v2128_25(void) = ExitFunction : + +# 2129| void ClassWithDestructor::~ClassWithDestructor() +# 2129| Block 0 +# 2129| v2129_1(void) = EnterFunction : +# 2129| m2129_2(unknown) = AliasedDefinition : +# 2129| m2129_3(unknown) = InitializeNonLocal : +# 2129| m2129_4(unknown) = Chi : total:m2129_2, partial:m2129_3 +# 2129| r2129_5(glval) = VariableAddress[#this] : +# 2129| m2129_6(glval) = InitializeParameter[#this] : &:r2129_5 +# 2129| r2129_7(glval) = Load[#this] : &:r2129_5, m2129_6 +# 2129| m2129_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_7 +# 2129| r2129_9(glval) = FunctionAddress[operator delete] : +# 2129| r2129_10(glval) = VariableAddress[#this] : +# 2129| r2129_11(ClassWithDestructor *) = Load[#this] : &:r2129_10, m2129_6 +# 2129| r2129_12(glval) = FieldAddress[x] : r2129_11 +# 2129| r2129_13(char *) = Load[?] : &:r2129_12, ~m2129_8 +# 2129| v2129_14(void) = Call[operator delete] : func:r2129_9, 0:r2129_13 +# 2129| m2129_15(unknown) = ^CallSideEffect : ~m2129_4 +# 2129| m2129_16(unknown) = Chi : total:m2129_4, partial:m2129_15 +# 2129| v2129_17(void) = NoOp : +# 2129| v2129_18(void) = ReturnIndirection[#this] : &:r2129_7, m2129_8 +# 2129| v2129_19(void) = ReturnVoid : +# 2129| v2129_20(void) = AliasedUse : ~m2129_16 +# 2129| v2129_21(void) = ExitFunction : + +# 2131| void ClassWithDestructor::set_x(char) +# 2131| Block 0 +# 2131| v2131_1(void) = EnterFunction : +# 2131| m2131_2(unknown) = AliasedDefinition : +# 2131| m2131_3(unknown) = InitializeNonLocal : +# 2131| m2131_4(unknown) = Chi : total:m2131_2, partial:m2131_3 +# 2131| r2131_5(glval) = VariableAddress[#this] : +# 2131| m2131_6(glval) = InitializeParameter[#this] : &:r2131_5 +# 2131| r2131_7(glval) = Load[#this] : &:r2131_5, m2131_6 +# 2131| m2131_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_7 +# 2131| r2131_9(glval) = VariableAddress[y] : +# 2131| m2131_10(char) = InitializeParameter[y] : &:r2131_9 +# 2131| r2131_11(glval) = VariableAddress[y] : +# 2131| r2131_12(char) = Load[y] : &:r2131_11, m2131_10 +# 2131| r2131_13(glval) = VariableAddress[#this] : +# 2131| r2131_14(ClassWithDestructor *) = Load[#this] : &:r2131_13, m2131_6 +# 2131| r2131_15(glval) = FieldAddress[x] : r2131_14 +# 2131| r2131_16(char *) = Load[?] : &:r2131_15, ~m2131_8 +# 2131| r2131_17(glval) = CopyValue : r2131_16 +# 2131| m2131_18(char) = Store[?] : &:r2131_17, r2131_12 +# 2131| m2131_19(unknown) = Chi : total:m2131_4, partial:m2131_18 +# 2131| v2131_20(void) = NoOp : +# 2131| v2131_21(void) = ReturnIndirection[#this] : &:r2131_7, m2131_8 +# 2131| v2131_22(void) = ReturnVoid : +# 2131| v2131_23(void) = AliasedUse : ~m2131_19 +# 2131| v2131_24(void) = ExitFunction : + +# 2132| char ClassWithDestructor::get_x() +# 2132| Block 0 +# 2132| v2132_1(void) = EnterFunction : +# 2132| m2132_2(unknown) = AliasedDefinition : +# 2132| m2132_3(unknown) = InitializeNonLocal : +# 2132| m2132_4(unknown) = Chi : total:m2132_2, partial:m2132_3 +# 2132| r2132_5(glval) = VariableAddress[#this] : +# 2132| m2132_6(glval) = InitializeParameter[#this] : &:r2132_5 +# 2132| r2132_7(glval) = Load[#this] : &:r2132_5, m2132_6 +# 2132| m2132_8(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_7 +# 2132| r2132_9(glval) = VariableAddress[#return] : +# 2132| r2132_10(glval) = VariableAddress[#this] : +# 2132| r2132_11(ClassWithDestructor *) = Load[#this] : &:r2132_10, m2132_6 +# 2132| r2132_12(glval) = FieldAddress[x] : r2132_11 +# 2132| r2132_13(char *) = Load[?] : &:r2132_12, ~m2132_8 +# 2132| r2132_14(char) = Load[?] : &:r2132_13, ~m2132_4 +# 2132| m2132_15(char) = Store[#return] : &:r2132_9, r2132_14 +# 2132| v2132_16(void) = ReturnIndirection[#this] : &:r2132_7, m2132_8 +# 2132| r2132_17(glval) = VariableAddress[#return] : +# 2132| v2132_18(void) = ReturnValue : &:r2132_17, m2132_15 +# 2132| v2132_19(void) = AliasedUse : m2132_3 +# 2132| v2132_20(void) = ExitFunction : + +# 2135| bool initialization_with_destructor_bool +# 2135| Block 0 +# 2135| v2135_1(void) = EnterFunction : +# 2135| m2135_2(unknown) = AliasedDefinition : +# 2135| r2135_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2135| r2135_4(bool) = Constant[1] : +# 2135| m2135_5(bool) = Store[initialization_with_destructor_bool] : &:r2135_3, r2135_4 +# 2135| m2135_6(unknown) = Chi : total:m2135_2, partial:m2135_5 +# 2135| v2135_7(void) = ReturnVoid : +# 2135| v2135_8(void) = AliasedUse : ~m2135_6 +# 2135| v2135_9(void) = ExitFunction : + +# 2137| void initialization_with_destructor(bool, char) +# 2137| Block 0 +# 2137| v2137_1(void) = EnterFunction : +# 2137| m2137_2(unknown) = AliasedDefinition : +# 2137| m2137_3(unknown) = InitializeNonLocal : +# 2137| m2137_4(unknown) = Chi : total:m2137_2, partial:m2137_3 +# 2137| r2137_5(glval) = VariableAddress[b] : +# 2137| m2137_6(bool) = InitializeParameter[b] : &:r2137_5 +# 2137| r2137_7(glval) = VariableAddress[c] : +# 2137| m2137_8(char) = InitializeParameter[c] : &:r2137_7 +# 2138| r2138_1(glval) = VariableAddress[x] : +# 2138| m2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 +# 2138| r2138_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2138| v2138_4(void) = Call[ClassWithDestructor] : func:r2138_3, this:r2138_1 +# 2138| m2138_5(unknown) = ^CallSideEffect : ~m2137_4 +# 2138| m2138_6(unknown) = Chi : total:m2137_4, partial:m2138_5 +# 2138| m2138_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 +# 2138| m2138_8(ClassWithDestructor) = Chi : total:m2138_2, partial:m2138_7 +# 2138| r2138_9(glval) = VariableAddress[b] : +# 2138| r2138_10(bool) = Load[b] : &:r2138_9, m2137_6 +# 2138| v2138_11(void) = ConditionalBranch : r2138_10 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2137| Block 1 +# 2137| m2137_9(unknown) = Phi : from 14:~m2159_5, from 19:~m2163_54, from 20:~m2163_38 +# 2137| v2137_10(void) = ReturnVoid : +# 2137| v2137_11(void) = AliasedUse : ~m2137_9 +# 2137| v2137_12(void) = ExitFunction : + +# 2139| Block 2 +# 2139| r2139_1(glval) = VariableAddress[x] : +# 2139| r2139_2(glval) = FunctionAddress[set_x] : +# 2139| r2139_3(char) = Constant[97] : +# 2139| v2139_4(void) = Call[set_x] : func:r2139_2, this:r2139_1, 0:r2139_3 +# 2139| m2139_5(unknown) = ^CallSideEffect : ~m2138_6 +# 2139| m2139_6(unknown) = Chi : total:m2138_6, partial:m2139_5 +# 2139| v2139_7(void) = ^IndirectReadSideEffect[-1] : &:r2139_1, m2138_8 +# 2139| m2139_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_1 +# 2139| m2139_9(ClassWithDestructor) = Chi : total:m2138_8, partial:m2139_8 +#-----| Goto -> Block 3 + +# 2141| Block 3 +# 2141| m2141_1(unknown) = Phi : from 0:~m2138_6, from 2:~m2139_6 +# 2141| r2141_2(glval) = VariableAddress[x] : +# 2141| m2141_3(ClassWithDestructor) = Uninitialized[x] : &:r2141_2 +# 2141| r2141_4(glval) = FunctionAddress[ClassWithDestructor] : +# 2141| v2141_5(void) = Call[ClassWithDestructor] : func:r2141_4, this:r2141_2 +# 2141| m2141_6(unknown) = ^CallSideEffect : ~m2141_1 +# 2141| m2141_7(unknown) = Chi : total:m2141_1, partial:m2141_6 +# 2141| m2141_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_2 +# 2141| m2141_9(ClassWithDestructor) = Chi : total:m2141_3, partial:m2141_8 +# 2141| r2141_10(bool) = Constant[1] : +# 2141| v2141_11(void) = ConditionalBranch : r2141_10 +#-----| False -> Block 21 +#-----| True -> Block 4 + +# 2142| Block 4 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(glval) = FunctionAddress[set_x] : +# 2142| r2142_3(char) = Constant[97] : +# 2142| v2142_4(void) = Call[set_x] : func:r2142_2, this:r2142_1, 0:r2142_3 +# 2142| m2142_5(unknown) = ^CallSideEffect : ~m2141_7 +# 2142| m2142_6(unknown) = Chi : total:m2141_7, partial:m2142_5 +# 2142| v2142_7(void) = ^IndirectReadSideEffect[-1] : &:r2142_1, m2141_9 +# 2142| m2142_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2142_1 +# 2142| m2142_9(ClassWithDestructor) = Chi : total:m2141_9, partial:m2142_8 +# 2144| r2144_1(glval) = VariableAddress[x] : +# 2144| m2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 +# 2144| r2144_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2144| v2144_4(void) = Call[ClassWithDestructor] : func:r2144_3, this:r2144_1 +# 2144| m2144_5(unknown) = ^CallSideEffect : ~m2142_6 +# 2144| m2144_6(unknown) = Chi : total:m2142_6, partial:m2144_5 +# 2144| m2144_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 +# 2144| m2144_8(ClassWithDestructor) = Chi : total:m2144_2, partial:m2144_7 +# 2144| r2144_9(glval) = VariableAddress[c] : +# 2144| r2144_10(char) = Load[c] : &:r2144_9, m2137_8 +# 2144| r2144_11(int) = Convert : r2144_10 +# 2144| v2144_12(void) = Switch : r2144_11 +#-----| Case[97] -> Block 5 +#-----| Default -> Block 6 + +# 2145| Block 5 +# 2145| v2145_1(void) = NoOp : +# 2146| r2146_1(glval) = VariableAddress[x] : +# 2146| r2146_2(glval) = FunctionAddress[set_x] : +# 2146| r2146_3(char) = Constant[97] : +# 2146| v2146_4(void) = Call[set_x] : func:r2146_2, this:r2146_1, 0:r2146_3 +# 2146| m2146_5(unknown) = ^CallSideEffect : ~m2144_6 +# 2146| m2146_6(unknown) = Chi : total:m2144_6, partial:m2146_5 +# 2146| v2146_7(void) = ^IndirectReadSideEffect[-1] : &:r2146_1, m2144_8 +# 2146| m2146_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 +# 2146| m2146_9(ClassWithDestructor) = Chi : total:m2144_8, partial:m2146_8 +# 2147| v2147_1(void) = NoOp : +#-----| Goto -> Block 7 + +# 2148| Block 6 +# 2148| v2148_1(void) = NoOp : +# 2149| r2149_1(glval) = VariableAddress[x] : +# 2149| r2149_2(glval) = FunctionAddress[set_x] : +# 2149| r2149_3(char) = Constant[98] : +# 2149| v2149_4(void) = Call[set_x] : func:r2149_2, this:r2149_1, 0:r2149_3 +# 2149| m2149_5(unknown) = ^CallSideEffect : ~m2144_6 +# 2149| m2149_6(unknown) = Chi : total:m2144_6, partial:m2149_5 +# 2149| v2149_7(void) = ^IndirectReadSideEffect[-1] : &:r2149_1, m2144_8 +# 2149| m2149_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 +# 2149| m2149_9(ClassWithDestructor) = Chi : total:m2144_8, partial:m2149_8 +# 2150| v2150_1(void) = NoOp : +#-----| Goto -> Block 7 + +# 2151| Block 7 +# 2151| m2151_1(unknown) = Phi : from 5:~m2146_6, from 6:~m2149_6 +# 2151| v2151_2(void) = NoOp : +# 2153| r2153_1(glval) = VariableAddress[x] : +# 2153| m2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 +# 2153| r2153_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2153| v2153_4(void) = Call[ClassWithDestructor] : func:r2153_3, this:r2153_1 +# 2153| m2153_5(unknown) = ^CallSideEffect : ~m2151_1 +# 2153| m2153_6(unknown) = Chi : total:m2151_1, partial:m2153_5 +# 2153| m2153_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 +# 2153| m2153_8(ClassWithDestructor) = Chi : total:m2153_2, partial:m2153_7 +# 2154| r2154_1(glval>) = VariableAddress[ys] : +# 2154| m2154_2(vector) = Uninitialized[ys] : &:r2154_1 +# 2154| r2154_3(glval) = FunctionAddress[vector] : +# 2154| r2154_4(glval) = VariableAddress[#temp2154:40] : +# 2154| r2154_5(glval) = VariableAddress[x] : +# 2154| r2154_6(ClassWithDestructor) = Load[x] : &:r2154_5, m2153_8 +# 2154| m2154_7(ClassWithDestructor) = Store[#temp2154:40] : &:r2154_4, r2154_6 +# 2154| r2154_8(ClassWithDestructor) = Load[#temp2154:40] : &:r2154_4, m2154_7 +# 2154| v2154_9(void) = Call[vector] : func:r2154_3, this:r2154_1, 0:r2154_8 +# 2154| m2154_10(unknown) = ^CallSideEffect : ~m2153_6 +# 2154| m2154_11(unknown) = Chi : total:m2153_6, partial:m2154_10 +# 2154| m2154_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 +# 2154| m2154_13(vector) = Chi : total:m2154_2, partial:m2154_12 +# 2154| r2154_14(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_15(glval>) = VariableAddress[ys] : +# 2154| r2154_16(vector &) = CopyValue : r2154_15 +# 2154| m2154_17(vector &) = Store[(__range)] : &:r2154_14, r2154_16 +# 2154| r2154_18(glval) = VariableAddress[(__begin)] : +# 2154| r2154_19(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_20(vector &) = Load[(__range)] : &:r2154_19, m2154_17 +#-----| r0_1(glval>) = CopyValue : r2154_20 +#-----| r0_2(glval>) = Convert : r0_1 +# 2154| r2154_21(glval) = FunctionAddress[begin] : +# 2154| r2154_22(iterator) = Call[begin] : func:r2154_21, this:r0_2 +# 2154| m2154_23(unknown) = ^CallSideEffect : ~m2154_11 +# 2154| m2154_24(unknown) = Chi : total:m2154_11, partial:m2154_23 +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, m2154_13 +# 2154| m2154_25(iterator) = Store[(__begin)] : &:r2154_18, r2154_22 +# 2154| r2154_26(glval) = VariableAddress[(__end)] : +# 2154| r2154_27(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_28(vector &) = Load[(__range)] : &:r2154_27, m2154_17 +#-----| r0_4(glval>) = CopyValue : r2154_28 +#-----| r0_5(glval>) = Convert : r0_4 +# 2154| r2154_29(glval) = FunctionAddress[end] : +# 2154| r2154_30(iterator) = Call[end] : func:r2154_29, this:r0_5 +# 2154| m2154_31(unknown) = ^CallSideEffect : ~m2154_24 +# 2154| m2154_32(unknown) = Chi : total:m2154_24, partial:m2154_31 +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, m2154_13 +# 2154| m2154_33(iterator) = Store[(__end)] : &:r2154_26, r2154_30 +#-----| Goto -> Block 8 + +# 2154| Block 8 +# 2154| m2154_34(iterator) = Phi : from 7:m2154_25, from 9:m2154_59 +# 2154| m2154_35(unknown) = Phi : from 7:~m2154_32, from 9:~m2154_56 +# 2154| r2154_36(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2154_36 +# 2154| r2154_37(glval) = FunctionAddress[operator!=] : +# 2154| r2154_38(glval) = VariableAddress[(__end)] : +# 2154| r2154_39(iterator) = Load[(__end)] : &:r2154_38, m2154_33 +# 2154| r2154_40(bool) = Call[operator!=] : func:r2154_37, this:r0_7, 0:r2154_39 +# 2154| m2154_41(unknown) = ^CallSideEffect : ~m2154_35 +# 2154| m2154_42(unknown) = Chi : total:m2154_35, partial:m2154_41 +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, m2154_34 +# 2154| v2154_43(void) = ConditionalBranch : r2154_40 +#-----| False -> Block 10 +#-----| True -> Block 9 + +# 2154| Block 9 +# 2154| r2154_44(glval) = VariableAddress[y] : +# 2154| r2154_45(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2154_45 +# 2154| r2154_46(glval) = FunctionAddress[operator*] : +# 2154| r2154_47(ClassWithDestructor &) = Call[operator*] : func:r2154_46, this:r0_9 +# 2154| m2154_48(unknown) = ^CallSideEffect : ~m2154_42 +# 2154| m2154_49(unknown) = Chi : total:m2154_42, partial:m2154_48 +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, m2154_34 +# 2154| r2154_50(ClassWithDestructor) = Load[?] : &:r2154_47, ~m2154_49 +# 2154| m2154_51(ClassWithDestructor) = Store[y] : &:r2154_44, r2154_50 +# 2155| r2155_1(glval) = VariableAddress[y] : +# 2155| r2155_2(glval) = FunctionAddress[set_x] : +# 2155| r2155_3(char) = Constant[97] : +# 2155| v2155_4(void) = Call[set_x] : func:r2155_2, this:r2155_1, 0:r2155_3 +# 2155| m2155_5(unknown) = ^CallSideEffect : ~m2154_49 +# 2155| m2155_6(unknown) = Chi : total:m2154_49, partial:m2155_5 +# 2155| v2155_7(void) = ^IndirectReadSideEffect[-1] : &:r2155_1, m2154_51 +# 2155| m2155_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 +# 2155| m2155_9(ClassWithDestructor) = Chi : total:m2154_51, partial:m2155_8 +# 2154| r2154_52(glval) = VariableAddress[(__begin)] : +# 2154| r2154_53(glval) = FunctionAddress[operator++] : +# 2154| r2154_54(iterator &) = Call[operator++] : func:r2154_53, this:r2154_52 +# 2154| m2154_55(unknown) = ^CallSideEffect : ~m2155_6 +# 2154| m2154_56(unknown) = Chi : total:m2155_6, partial:m2154_55 +# 2154| v2154_57(void) = ^IndirectReadSideEffect[-1] : &:r2154_52, m2154_34 +# 2154| m2154_58(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2154_52 +# 2154| m2154_59(iterator) = Chi : total:m2154_34, partial:m2154_58 +# 2154| r2154_60(glval) = CopyValue : r2154_54 +#-----| Goto (back edge) -> Block 8 + +# 2157| Block 10 +# 2157| r2157_1(glval>) = VariableAddress[ys] : +# 2157| m2157_2(vector) = Uninitialized[ys] : &:r2157_1 +# 2157| r2157_3(glval) = FunctionAddress[vector] : +# 2157| r2157_4(glval) = VariableAddress[#temp2157:40] : +# 2157| r2157_5(glval) = VariableAddress[x] : +# 2157| r2157_6(ClassWithDestructor) = Load[x] : &:r2157_5, m2153_8 +# 2157| m2157_7(ClassWithDestructor) = Store[#temp2157:40] : &:r2157_4, r2157_6 +# 2157| r2157_8(ClassWithDestructor) = Load[#temp2157:40] : &:r2157_4, m2157_7 +# 2157| v2157_9(void) = Call[vector] : func:r2157_3, this:r2157_1, 0:r2157_8 +# 2157| m2157_10(unknown) = ^CallSideEffect : ~m2154_42 +# 2157| m2157_11(unknown) = Chi : total:m2154_42, partial:m2157_10 +# 2157| m2157_12(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 +# 2157| m2157_13(vector) = Chi : total:m2157_2, partial:m2157_12 +# 2157| r2157_14(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_15(glval>) = VariableAddress[ys] : +# 2157| r2157_16(vector &) = CopyValue : r2157_15 +# 2157| m2157_17(vector &) = Store[(__range)] : &:r2157_14, r2157_16 +# 2157| r2157_18(glval) = VariableAddress[(__begin)] : +# 2157| r2157_19(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_20(vector &) = Load[(__range)] : &:r2157_19, m2157_17 +#-----| r0_11(glval>) = CopyValue : r2157_20 +#-----| r0_12(glval>) = Convert : r0_11 +# 2157| r2157_21(glval) = FunctionAddress[begin] : +# 2157| r2157_22(iterator) = Call[begin] : func:r2157_21, this:r0_12 +# 2157| m2157_23(unknown) = ^CallSideEffect : ~m2157_11 +# 2157| m2157_24(unknown) = Chi : total:m2157_11, partial:m2157_23 +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, m2157_13 +# 2157| m2157_25(iterator) = Store[(__begin)] : &:r2157_18, r2157_22 +# 2157| r2157_26(glval) = VariableAddress[(__end)] : +# 2157| r2157_27(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_28(vector &) = Load[(__range)] : &:r2157_27, m2157_17 +#-----| r0_14(glval>) = CopyValue : r2157_28 +#-----| r0_15(glval>) = Convert : r0_14 +# 2157| r2157_29(glval) = FunctionAddress[end] : +# 2157| r2157_30(iterator) = Call[end] : func:r2157_29, this:r0_15 +# 2157| m2157_31(unknown) = ^CallSideEffect : ~m2157_24 +# 2157| m2157_32(unknown) = Chi : total:m2157_24, partial:m2157_31 +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, m2157_13 +# 2157| m2157_33(iterator) = Store[(__end)] : &:r2157_26, r2157_30 +#-----| Goto -> Block 11 + +# 2157| Block 11 +# 2157| m2157_34(iterator) = Phi : from 10:m2157_25, from 12:m2157_51 +# 2157| m2157_35(unknown) = Phi : from 10:~m2157_32, from 12:~m2157_48 +# 2157| r2157_36(glval) = VariableAddress[(__begin)] : +#-----| r0_17(glval) = Convert : r2157_36 +# 2157| r2157_37(glval) = FunctionAddress[operator!=] : +# 2157| r2157_38(glval) = VariableAddress[(__end)] : +# 2157| r2157_39(iterator) = Load[(__end)] : &:r2157_38, m2157_33 +# 2157| r2157_40(bool) = Call[operator!=] : func:r2157_37, this:r0_17, 0:r2157_39 +# 2157| m2157_41(unknown) = ^CallSideEffect : ~m2157_35 +# 2157| m2157_42(unknown) = Chi : total:m2157_35, partial:m2157_41 +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, m2157_34 +# 2157| v2157_43(void) = ConditionalBranch : r2157_40 +#-----| False -> Block 15 +#-----| True -> Block 13 + +# 2157| Block 12 +# 2157| r2157_44(glval) = VariableAddress[(__begin)] : +# 2157| r2157_45(glval) = FunctionAddress[operator++] : +# 2157| r2157_46(iterator &) = Call[operator++] : func:r2157_45, this:r2157_44 +# 2157| m2157_47(unknown) = ^CallSideEffect : ~m2159_5 +# 2157| m2157_48(unknown) = Chi : total:m2159_5, partial:m2157_47 +# 2157| v2157_49(void) = ^IndirectReadSideEffect[-1] : &:r2157_44, m2157_34 +# 2157| m2157_50(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2157_44 +# 2157| m2157_51(iterator) = Chi : total:m2157_34, partial:m2157_50 +# 2157| r2157_52(glval) = CopyValue : r2157_46 +#-----| Goto (back edge) -> Block 11 + +# 2157| Block 13 +# 2157| r2157_53(glval) = VariableAddress[y] : +# 2157| r2157_54(glval) = VariableAddress[(__begin)] : +#-----| r0_19(glval) = Convert : r2157_54 +# 2157| r2157_55(glval) = FunctionAddress[operator*] : +# 2157| r2157_56(ClassWithDestructor &) = Call[operator*] : func:r2157_55, this:r0_19 +# 2157| m2157_57(unknown) = ^CallSideEffect : ~m2157_42 +# 2157| m2157_58(unknown) = Chi : total:m2157_42, partial:m2157_57 +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, m2157_34 +# 2157| r2157_59(ClassWithDestructor) = Load[?] : &:r2157_56, ~m2157_58 +# 2157| m2157_60(ClassWithDestructor) = Store[y] : &:r2157_53, r2157_59 +# 2158| r2158_1(glval) = VariableAddress[y] : +# 2158| r2158_2(glval) = FunctionAddress[set_x] : +# 2158| r2158_3(char) = Constant[97] : +# 2158| v2158_4(void) = Call[set_x] : func:r2158_2, this:r2158_1, 0:r2158_3 +# 2158| m2158_5(unknown) = ^CallSideEffect : ~m2157_58 +# 2158| m2158_6(unknown) = Chi : total:m2157_58, partial:m2158_5 +# 2158| v2158_7(void) = ^IndirectReadSideEffect[-1] : &:r2158_1, m2157_60 +# 2158| m2158_8(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 +# 2158| m2158_9(ClassWithDestructor) = Chi : total:m2157_60, partial:m2158_8 +# 2159| r2159_1(glval) = VariableAddress[y] : +# 2159| r2159_2(glval) = FunctionAddress[get_x] : +# 2159| r2159_3(char) = Call[get_x] : func:r2159_2, this:r2159_1 +# 2159| m2159_4(unknown) = ^CallSideEffect : ~m2158_6 +# 2159| m2159_5(unknown) = Chi : total:m2158_6, partial:m2159_4 +# 2159| v2159_6(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, m2158_9 +# 2159| m2159_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 +# 2159| m2159_8(ClassWithDestructor) = Chi : total:m2158_9, partial:m2159_7 +# 2159| r2159_9(int) = Convert : r2159_3 +# 2159| r2159_10(int) = Constant[98] : +# 2159| r2159_11(bool) = CompareEQ : r2159_9, r2159_10 +# 2159| v2159_12(void) = ConditionalBranch : r2159_11 +#-----| False -> Block 12 +#-----| True -> Block 14 + +# 2160| Block 14 +# 2160| v2160_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2163| Block 15 +# 2163| r2163_1(glval>) = VariableAddress[ys] : +# 2163| m2163_2(vector) = Uninitialized[ys] : &:r2163_1 +# 2163| r2163_3(glval) = FunctionAddress[vector] : +# 2163| r2163_4(int) = Constant[1] : +# 2163| v2163_5(void) = Call[vector] : func:r2163_3, this:r2163_1, 0:r2163_4 +# 2163| m2163_6(unknown) = ^CallSideEffect : ~m2157_42 +# 2163| m2163_7(unknown) = Chi : total:m2157_42, partial:m2163_6 +# 2163| m2163_8(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 +# 2163| m2163_9(vector) = Chi : total:m2163_2, partial:m2163_8 +# 2163| r2163_10(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_11(glval>) = VariableAddress[ys] : +# 2163| r2163_12(vector &) = CopyValue : r2163_11 +# 2163| m2163_13(vector &) = Store[(__range)] : &:r2163_10, r2163_12 +# 2163| r2163_14(glval) = VariableAddress[(__begin)] : +# 2163| r2163_15(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_16(vector &) = Load[(__range)] : &:r2163_15, m2163_13 +#-----| r0_21(glval>) = CopyValue : r2163_16 +#-----| r0_22(glval>) = Convert : r0_21 +# 2163| r2163_17(glval) = FunctionAddress[begin] : +# 2163| r2163_18(iterator) = Call[begin] : func:r2163_17, this:r0_22 +# 2163| m2163_19(unknown) = ^CallSideEffect : ~m2163_7 +# 2163| m2163_20(unknown) = Chi : total:m2163_7, partial:m2163_19 +#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_22, m2163_9 +# 2163| m2163_21(iterator) = Store[(__begin)] : &:r2163_14, r2163_18 +# 2163| r2163_22(glval) = VariableAddress[(__end)] : +# 2163| r2163_23(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_24(vector &) = Load[(__range)] : &:r2163_23, m2163_13 +#-----| r0_24(glval>) = CopyValue : r2163_24 +#-----| r0_25(glval>) = Convert : r0_24 +# 2163| r2163_25(glval) = FunctionAddress[end] : +# 2163| r2163_26(iterator) = Call[end] : func:r2163_25, this:r0_25 +# 2163| m2163_27(unknown) = ^CallSideEffect : ~m2163_20 +# 2163| m2163_28(unknown) = Chi : total:m2163_20, partial:m2163_27 +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, m2163_9 +# 2163| m2163_29(iterator) = Store[(__end)] : &:r2163_22, r2163_26 +#-----| Goto -> Block 16 + +# 2163| Block 16 +# 2163| m2163_30(iterator) = Phi : from 15:m2163_21, from 17:m2163_47 +# 2163| m2163_31(unknown) = Phi : from 15:~m2163_28, from 17:~m2163_44 +# 2163| r2163_32(glval) = VariableAddress[(__begin)] : +#-----| r0_27(glval) = Convert : r2163_32 +# 2163| r2163_33(glval) = FunctionAddress[operator!=] : +# 2163| r2163_34(glval) = VariableAddress[(__end)] : +# 2163| r2163_35(iterator) = Load[(__end)] : &:r2163_34, m2163_29 +# 2163| r2163_36(bool) = Call[operator!=] : func:r2163_33, this:r0_27, 0:r2163_35 +# 2163| m2163_37(unknown) = ^CallSideEffect : ~m2163_31 +# 2163| m2163_38(unknown) = Chi : total:m2163_31, partial:m2163_37 +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, m2163_30 +# 2163| v2163_39(void) = ConditionalBranch : r2163_36 +#-----| False -> Block 20 +#-----| True -> Block 18 + +# 2163| Block 17 +# 2163| r2163_40(glval) = VariableAddress[(__begin)] : +# 2163| r2163_41(glval) = FunctionAddress[operator++] : +# 2163| r2163_42(iterator &) = Call[operator++] : func:r2163_41, this:r2163_40 +# 2163| m2163_43(unknown) = ^CallSideEffect : ~m2163_54 +# 2163| m2163_44(unknown) = Chi : total:m2163_54, partial:m2163_43 +# 2163| v2163_45(void) = ^IndirectReadSideEffect[-1] : &:r2163_40, m2163_30 +# 2163| m2163_46(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2163_40 +# 2163| m2163_47(iterator) = Chi : total:m2163_30, partial:m2163_46 +# 2163| r2163_48(glval) = CopyValue : r2163_42 +#-----| Goto (back edge) -> Block 16 + +# 2163| Block 18 +# 2163| r2163_49(glval) = VariableAddress[y] : +# 2163| r2163_50(glval) = VariableAddress[(__begin)] : +#-----| r0_29(glval) = Convert : r2163_50 +# 2163| r2163_51(glval) = FunctionAddress[operator*] : +# 2163| r2163_52(int &) = Call[operator*] : func:r2163_51, this:r0_29 +# 2163| m2163_53(unknown) = ^CallSideEffect : ~m2163_38 +# 2163| m2163_54(unknown) = Chi : total:m2163_38, partial:m2163_53 +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, m2163_30 +# 2163| r2163_55(int) = Load[?] : &:r2163_52, ~m2163_54 +# 2163| m2163_56(int) = Store[y] : &:r2163_49, r2163_55 +# 2164| r2164_1(glval) = VariableAddress[y] : +# 2164| r2164_2(int) = Load[y] : &:r2164_1, m2163_56 +# 2164| r2164_3(int) = Constant[1] : +# 2164| r2164_4(bool) = CompareEQ : r2164_2, r2164_3 +# 2164| v2164_5(void) = ConditionalBranch : r2164_4 +#-----| False -> Block 17 +#-----| True -> Block 19 + +# 2165| Block 19 +# 2165| v2165_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2167| Block 20 +# 2167| v2167_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2137| Block 21 +# 2137| v2137_13(void) = Unreached : perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected index 79887fffc1f..b93c7d2649f 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency.expected @@ -12,7 +12,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -24,8 +28,4 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected index 79887fffc1f..b93c7d2649f 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ssa_consistency_unsound.expected @@ -12,7 +12,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -24,8 +28,4 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index adaae6b7e59..4d44f118c86 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -1065,6 +1065,8 @@ struct vector { bool operator!=(iterator right) const; }; + vector(T); + ~vector(); iterator begin() const; iterator end() const; }; @@ -2112,4 +2114,56 @@ char* test_strtod(char *s) { return end; } -// semmle-extractor-options: -std=c++17 --clang +struct HasOperatorBool { + operator bool(); +}; + +void call_as_child_of_ConditionDeclExpr() { + if(HasOperatorBool b = HasOperatorBool()) {} +} + +class ClassWithDestructor { + char *x; +public: + ClassWithDestructor() { x = new char; } + ~ClassWithDestructor() { delete x; } + + void set_x(char y) { *x = y; } + char get_x() { return *x; } +}; + +constexpr bool initialization_with_destructor_bool = true; + +void initialization_with_destructor(bool b, char c) { + if (ClassWithDestructor x; b) + x.set_x('a'); + + if constexpr (ClassWithDestructor x; initialization_with_destructor_bool) + x.set_x('a'); + + switch(ClassWithDestructor x; c) { + case 'a': + x.set_x('a'); + break; + default: + x.set_x('b'); + break; + } + + ClassWithDestructor x; + for(vector ys(x); ClassWithDestructor y : ys) + y.set_x('a'); + + for(vector ys(x); ClassWithDestructor y : ys) { + y.set_x('a'); + if (y.get_x() == 'b') + return; + } + + for(vector ys(1); int y : ys) { + if (y == 1) + return; + } +} + +// semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected index 1a3da84e78f..c42cb501cde 100644 --- a/cpp/ql/test/library-tests/ir/ir/operand_locations.expected +++ b/cpp/ql/test/library-tests/ir/ir/operand_locations.expected @@ -688,6 +688,9 @@ | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | | file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_1 | +| file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_2 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | @@ -720,6 +723,8 @@ | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | +| file://:0:0:0:0 | Address | &:r0_3 | | file://:0:0:0:0 | Address | &:r0_4 | | file://:0:0:0:0 | Address | &:r0_4 | | file://:0:0:0:0 | Address | &:r0_5 | @@ -732,12 +737,14 @@ | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_5 | +| file://:0:0:0:0 | Address | &:r0_5 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_6 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_7 | +| file://:0:0:0:0 | Address | &:r0_7 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_8 | @@ -747,12 +754,14 @@ | file://:0:0:0:0 | Address | &:r0_8 | | file://:0:0:0:0 | Address | &:r0_9 | | file://:0:0:0:0 | Address | &:r0_9 | +| file://:0:0:0:0 | Address | &:r0_9 | | file://:0:0:0:0 | Address | &:r0_10 | | file://:0:0:0:0 | Address | &:r0_10 | | file://:0:0:0:0 | Address | &:r0_10 | | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | | file://:0:0:0:0 | Address | &:r0_11 | +| file://:0:0:0:0 | Address | &:r0_12 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | | file://:0:0:0:0 | Address | &:r0_13 | @@ -760,15 +769,22 @@ | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_15 | +| file://:0:0:0:0 | Address | &:r0_15 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_16 | | file://:0:0:0:0 | Address | &:r0_17 | +| file://:0:0:0:0 | Address | &:r0_17 | | file://:0:0:0:0 | Address | &:r0_18 | | file://:0:0:0:0 | Address | &:r0_18 | | file://:0:0:0:0 | Address | &:r0_19 | | file://:0:0:0:0 | Address | &:r0_19 | +| file://:0:0:0:0 | Address | &:r0_19 | +| file://:0:0:0:0 | Address | &:r0_22 | +| file://:0:0:0:0 | Address | &:r0_25 | +| file://:0:0:0:0 | Address | &:r0_27 | +| file://:0:0:0:0 | Address | &:r0_29 | | file://:0:0:0:0 | Arg(0) | 0:r0_6 | | file://:0:0:0:0 | Arg(0) | 0:r0_8 | | file://:0:0:0:0 | Arg(0) | 0:r0_8 | @@ -794,12 +810,12 @@ | file://:0:0:0:0 | ChiTotal | total:m754_8 | | file://:0:0:0:0 | ChiTotal | total:m763_8 | | file://:0:0:0:0 | ChiTotal | total:m1043_10 | -| file://:0:0:0:0 | ChiTotal | total:m1240_4 | -| file://:0:0:0:0 | ChiTotal | total:m1688_3 | -| file://:0:0:0:0 | ChiTotal | total:m1716_8 | -| file://:0:0:0:0 | ChiTotal | total:m1716_19 | -| file://:0:0:0:0 | ChiTotal | total:m1834_8 | -| file://:0:0:0:0 | ChiTotal | total:m1839_8 | +| file://:0:0:0:0 | ChiTotal | total:m1242_4 | +| file://:0:0:0:0 | ChiTotal | total:m1690_3 | +| file://:0:0:0:0 | ChiTotal | total:m1718_8 | +| file://:0:0:0:0 | ChiTotal | total:m1718_19 | +| file://:0:0:0:0 | ChiTotal | total:m1836_8 | +| file://:0:0:0:0 | ChiTotal | total:m1841_8 | | file://:0:0:0:0 | Left | r0_2 | | file://:0:0:0:0 | Left | r0_4 | | file://:0:0:0:0 | Left | r0_7 | @@ -821,6 +837,7 @@ | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_2 | +| file://:0:0:0:0 | Load | m0_2 | | file://:0:0:0:0 | Load | m0_5 | | file://:0:0:0:0 | Load | m0_8 | | file://:0:0:0:0 | Load | m0_11 | @@ -829,18 +846,18 @@ | file://:0:0:0:0 | Load | m745_6 | | file://:0:0:0:0 | Load | m754_6 | | file://:0:0:0:0 | Load | m763_6 | -| file://:0:0:0:0 | Load | m1466_4 | -| file://:0:0:0:0 | Load | m1466_4 | -| file://:0:0:0:0 | Load | m1685_9 | -| file://:0:0:0:0 | Load | m1714_4 | -| file://:0:0:0:0 | Load | m1834_6 | -| file://:0:0:0:0 | Load | m1834_6 | -| file://:0:0:0:0 | Load | m1839_6 | -| file://:0:0:0:0 | Load | m2013_6 | +| file://:0:0:0:0 | Load | m1468_4 | +| file://:0:0:0:0 | Load | m1468_4 | +| file://:0:0:0:0 | Load | m1687_9 | +| file://:0:0:0:0 | Load | m1716_4 | +| file://:0:0:0:0 | Load | m1836_6 | +| file://:0:0:0:0 | Load | m1836_6 | +| file://:0:0:0:0 | Load | m1841_6 | +| file://:0:0:0:0 | Load | m2015_6 | | file://:0:0:0:0 | Load | ~m0_4 | -| file://:0:0:0:0 | Load | ~m1444_6 | -| file://:0:0:0:0 | Load | ~m1712_10 | -| file://:0:0:0:0 | Load | ~m1712_14 | +| file://:0:0:0:0 | Load | ~m1446_6 | +| file://:0:0:0:0 | Load | ~m1714_10 | +| file://:0:0:0:0 | Load | ~m1714_14 | | file://:0:0:0:0 | Right | r0_3 | | file://:0:0:0:0 | Right | r0_5 | | file://:0:0:0:0 | Right | r0_8 | @@ -859,11 +876,24 @@ | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_4 | +| file://:0:0:0:0 | SideEffect | m0_4 | | file://:0:0:0:0 | SideEffect | m0_14 | -| file://:0:0:0:0 | SideEffect | m1078_23 | -| file://:0:0:0:0 | SideEffect | m1078_23 | -| file://:0:0:0:0 | SideEffect | m1084_23 | -| file://:0:0:0:0 | SideEffect | m1084_23 | +| file://:0:0:0:0 | SideEffect | m1080_23 | +| file://:0:0:0:0 | SideEffect | m1080_23 | +| file://:0:0:0:0 | SideEffect | m1086_23 | +| file://:0:0:0:0 | SideEffect | m1086_23 | +| file://:0:0:0:0 | SideEffect | m2154_13 | +| file://:0:0:0:0 | SideEffect | m2154_13 | +| file://:0:0:0:0 | SideEffect | m2154_34 | +| file://:0:0:0:0 | SideEffect | m2154_34 | +| file://:0:0:0:0 | SideEffect | m2157_13 | +| file://:0:0:0:0 | SideEffect | m2157_13 | +| file://:0:0:0:0 | SideEffect | m2157_34 | +| file://:0:0:0:0 | SideEffect | m2157_34 | +| file://:0:0:0:0 | SideEffect | m2163_9 | +| file://:0:0:0:0 | SideEffect | m2163_9 | +| file://:0:0:0:0 | SideEffect | m2163_30 | +| file://:0:0:0:0 | SideEffect | m2163_30 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | | file://:0:0:0:0 | SideEffect | ~m0_4 | @@ -873,13 +903,13 @@ | file://:0:0:0:0 | SideEffect | ~m96_8 | | file://:0:0:0:0 | SideEffect | ~m754_8 | | file://:0:0:0:0 | SideEffect | ~m763_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1077_8 | -| file://:0:0:0:0 | SideEffect | ~m1240_4 | -| file://:0:0:0:0 | SideEffect | ~m1447_6 | -| file://:0:0:0:0 | SideEffect | ~m1839_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1079_8 | +| file://:0:0:0:0 | SideEffect | ~m1242_4 | +| file://:0:0:0:0 | SideEffect | ~m1449_6 | +| file://:0:0:0:0 | SideEffect | ~m1841_8 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | | file://:0:0:0:0 | StoreValue | r0_1 | @@ -909,8 +939,10 @@ | file://:0:0:0:0 | StoreValue | r0_22 | | file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_1 | +| file://:0:0:0:0 | Unary | r0_1 | | file://:0:0:0:0 | Unary | r0_2 | | file://:0:0:0:0 | Unary | r0_3 | +| file://:0:0:0:0 | Unary | r0_4 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_5 | | file://:0:0:0:0 | Unary | r0_6 | @@ -933,9 +965,11 @@ | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_10 | | file://:0:0:0:0 | Unary | r0_11 | +| file://:0:0:0:0 | Unary | r0_11 | | file://:0:0:0:0 | Unary | r0_12 | | file://:0:0:0:0 | Unary | r0_14 | | file://:0:0:0:0 | Unary | r0_14 | +| file://:0:0:0:0 | Unary | r0_14 | | file://:0:0:0:0 | Unary | r0_17 | | file://:0:0:0:0 | Unary | r0_18 | | file://:0:0:0:0 | Unary | r0_18 | @@ -944,6 +978,8 @@ | file://:0:0:0:0 | Unary | r0_20 | | file://:0:0:0:0 | Unary | r0_21 | | file://:0:0:0:0 | Unary | r0_21 | +| file://:0:0:0:0 | Unary | r0_21 | +| file://:0:0:0:0 | Unary | r0_24 | | ir.c:7:6:7:17 | ChiPartial | partial:m7_3 | | ir.c:7:6:7:17 | ChiTotal | total:m7_2 | | ir.c:7:6:7:17 | SideEffect | ~m10_6 | @@ -5525,4551 +5561,5034 @@ | ir.cpp:1055:15:1055:15 | ChiTotal | total:m1052_7 | | ir.cpp:1055:15:1055:15 | SideEffect | ~m1052_7 | | ir.cpp:1055:16:1055:16 | Arg(0) | 0:r1055_4 | -| ir.cpp:1077:6:1077:18 | ChiPartial | partial:m1077_3 | -| ir.cpp:1077:6:1077:18 | ChiTotal | total:m1077_2 | -| ir.cpp:1077:6:1077:18 | SideEffect | ~m1088_1 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_5 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_5 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_7 | -| ir.cpp:1077:39:1077:39 | Address | &:r1077_7 | -| ir.cpp:1077:39:1077:39 | Load | m1077_6 | -| ir.cpp:1077:39:1077:39 | SideEffect | m1077_8 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_1 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_7 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_15 | -| ir.cpp:1078:5:1082:5 | Address | &:r1078_33 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_2 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_8 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_16 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_27 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_36 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_42 | -| ir.cpp:1078:18:1078:18 | Address | &:r1078_42 | -| ir.cpp:1078:18:1078:18 | Arg(0) | 0:r1078_28 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_1 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_3 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_5 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r0_7 | -| ir.cpp:1078:18:1078:18 | Arg(this) | this:r1078_42 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_10 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_18 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_26 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_35 | -| ir.cpp:1078:18:1078:18 | CallTarget | func:r1078_43 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_12 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_20 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_30 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_37 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_45 | -| ir.cpp:1078:18:1078:18 | ChiPartial | partial:m1078_48 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1077_4 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_13 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_23 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_24 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_31 | -| ir.cpp:1078:18:1078:18 | ChiTotal | total:m1078_38 | -| ir.cpp:1078:18:1078:18 | Condition | r1078_29 | -| ir.cpp:1078:18:1078:18 | Load | m1077_6 | -| ir.cpp:1078:18:1078:18 | Load | m1078_6 | -| ir.cpp:1078:18:1078:18 | Load | m1078_6 | -| ir.cpp:1078:18:1078:18 | Load | m1078_22 | -| ir.cpp:1078:18:1078:18 | Phi | from 0:m1078_14 | -| ir.cpp:1078:18:1078:18 | Phi | from 0:~m1078_21 | -| ir.cpp:1078:18:1078:18 | Phi | from 4:m1078_49 | -| ir.cpp:1078:18:1078:18 | Phi | from 4:~m1078_46 | -| ir.cpp:1078:18:1078:18 | SideEffect | m1078_23 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1077_4 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_13 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_24 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_31 | -| ir.cpp:1078:18:1078:18 | SideEffect | ~m1078_38 | -| ir.cpp:1078:18:1078:18 | StoreValue | r1078_5 | -| ir.cpp:1078:18:1078:18 | StoreValue | r1078_11 | -| ir.cpp:1078:18:1078:18 | StoreValue | r1078_19 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_3 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_4 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_9 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_17 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_25 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_34 | -| ir.cpp:1078:18:1078:18 | Unary | r1078_44 | -| ir.cpp:1078:18:1078:19 | Load | ~m1078_38 | -| ir.cpp:1078:18:1078:19 | StoreValue | r1078_39 | -| ir.cpp:1079:13:1079:13 | Address | &:r1079_1 | -| ir.cpp:1079:13:1079:13 | Left | r1079_2 | -| ir.cpp:1079:13:1079:13 | Load | m1078_40 | -| ir.cpp:1079:13:1079:17 | Condition | r1079_4 | -| ir.cpp:1079:17:1079:17 | Right | r1079_3 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_1 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_7 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_15 | -| ir.cpp:1084:5:1088:5 | Address | &:r1084_42 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_2 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_8 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_16 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_27 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_33 | -| ir.cpp:1084:25:1084:25 | Address | &:r1084_33 | -| ir.cpp:1084:25:1084:25 | Arg(0) | 0:r1084_28 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_9 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_11 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_13 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r0_15 | -| ir.cpp:1084:25:1084:25 | Arg(this) | this:r1084_33 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_10 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_18 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_26 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_34 | -| ir.cpp:1084:25:1084:25 | CallTarget | func:r1084_44 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_12 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_20 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_30 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_36 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_39 | -| ir.cpp:1084:25:1084:25 | ChiPartial | partial:m1084_46 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1078_31 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_13 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_23 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_24 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_31 | -| ir.cpp:1084:25:1084:25 | ChiTotal | total:m1084_47 | -| ir.cpp:1084:25:1084:25 | Condition | r1084_29 | -| ir.cpp:1084:25:1084:25 | Load | m1077_6 | -| ir.cpp:1084:25:1084:25 | Load | m1084_6 | -| ir.cpp:1084:25:1084:25 | Load | m1084_6 | -| ir.cpp:1084:25:1084:25 | Load | m1084_22 | -| ir.cpp:1084:25:1084:25 | Phi | from 5:m1084_14 | -| ir.cpp:1084:25:1084:25 | Phi | from 5:~m1084_21 | -| ir.cpp:1084:25:1084:25 | Phi | from 7:m1084_40 | -| ir.cpp:1084:25:1084:25 | Phi | from 7:~m1084_37 | -| ir.cpp:1084:25:1084:25 | SideEffect | m1084_23 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1078_31 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_13 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_24 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_31 | -| ir.cpp:1084:25:1084:25 | SideEffect | ~m1084_47 | -| ir.cpp:1084:25:1084:25 | StoreValue | r1084_5 | -| ir.cpp:1084:25:1084:25 | StoreValue | r1084_11 | -| ir.cpp:1084:25:1084:25 | StoreValue | r1084_19 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_3 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_4 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_9 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_17 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_25 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_35 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_43 | -| ir.cpp:1084:25:1084:25 | Unary | r1084_45 | -| ir.cpp:1084:25:1084:26 | StoreValue | r1084_50 | -| ir.cpp:1084:25:1084:26 | Unary | r1084_48 | -| ir.cpp:1084:25:1084:26 | Unary | r1084_49 | -| ir.cpp:1085:13:1085:13 | Address | &:r1085_1 | -| ir.cpp:1085:13:1085:13 | Address | &:r1085_2 | -| ir.cpp:1085:13:1085:13 | Left | r1085_3 | -| ir.cpp:1085:13:1085:13 | Load | m1084_51 | -| ir.cpp:1085:13:1085:13 | Load | ~m1084_47 | -| ir.cpp:1085:13:1085:17 | Condition | r1085_5 | -| ir.cpp:1085:17:1085:17 | Right | r1085_4 | -| ir.cpp:1088:5:1088:5 | Phi | from 6:~m1084_31 | -| ir.cpp:1088:5:1088:5 | Phi | from 9:~m1084_47 | -| ir.cpp:1108:5:1108:11 | Address | &:r1108_7 | -| ir.cpp:1108:5:1108:11 | ChiPartial | partial:m1108_3 | -| ir.cpp:1108:5:1108:11 | ChiTotal | total:m1108_2 | -| ir.cpp:1108:5:1108:11 | Load | m1110_4 | -| ir.cpp:1108:5:1108:11 | SideEffect | ~m1109_2 | -| ir.cpp:1108:17:1108:17 | Address | &:r1108_5 | -| ir.cpp:1109:3:1109:14 | ChiPartial | partial:m1109_1 | -| ir.cpp:1109:3:1109:14 | ChiTotal | total:m1108_4 | -| ir.cpp:1109:3:1109:14 | SideEffect | ~m1108_4 | -| ir.cpp:1110:3:1110:11 | Address | &:r1110_1 | -| ir.cpp:1110:10:1110:10 | Address | &:r1110_2 | -| ir.cpp:1110:10:1110:10 | Load | m1108_6 | -| ir.cpp:1110:10:1110:10 | StoreValue | r1110_3 | -| ir.cpp:1113:13:1113:30 | ChiPartial | partial:m1113_3 | -| ir.cpp:1113:13:1113:30 | ChiTotal | total:m1113_2 | -| ir.cpp:1113:13:1113:30 | SideEffect | ~m1115_2 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_5 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_5 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_7 | -| ir.cpp:1113:46:1113:46 | Address | &:r1113_7 | -| ir.cpp:1113:46:1113:46 | Load | m1113_6 | -| ir.cpp:1113:46:1113:46 | SideEffect | m1113_8 | -| ir.cpp:1113:62:1113:62 | Address | &:r1113_9 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_11 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_11 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_13 | -| ir.cpp:1113:79:1113:79 | Address | &:r1113_13 | -| ir.cpp:1113:79:1113:79 | Load | m1113_12 | -| ir.cpp:1113:79:1113:79 | SideEffect | m1113_14 | -| ir.cpp:1113:95:1113:95 | Address | &:r1113_15 | -| ir.cpp:1115:3:1119:6 | ChiPartial | partial:m1115_1 | -| ir.cpp:1115:3:1119:6 | ChiTotal | total:m1113_4 | -| ir.cpp:1115:3:1119:6 | SideEffect | ~m1113_4 | -| ir.cpp:1118:13:1118:13 | Address | &:r1118_1 | -| ir.cpp:1118:13:1118:13 | AsmOperand(0) | 0:r1118_3 | -| ir.cpp:1118:13:1118:13 | Load | m1113_6 | -| ir.cpp:1118:13:1118:13 | Unary | r1118_2 | -| ir.cpp:1118:23:1118:23 | AsmOperand(1) | 1:r1118_4 | -| ir.cpp:1118:33:1118:33 | Address | &:r1118_5 | -| ir.cpp:1118:33:1118:33 | Address | &:r1118_6 | -| ir.cpp:1118:33:1118:33 | AsmOperand(2) | 2:r1118_7 | -| ir.cpp:1118:33:1118:33 | Load | m1113_12 | -| ir.cpp:1118:33:1118:33 | Load | ~m1113_14 | -| ir.cpp:1118:42:1118:42 | Address | &:r1118_8 | -| ir.cpp:1118:42:1118:42 | AsmOperand(3) | 3:r1118_9 | -| ir.cpp:1118:42:1118:42 | Load | m1113_16 | -| ir.cpp:1122:6:1122:23 | ChiPartial | partial:m1122_3 | -| ir.cpp:1122:6:1122:23 | ChiTotal | total:m1122_2 | -| ir.cpp:1122:6:1122:23 | SideEffect | m1122_3 | -| ir.cpp:1125:9:1125:9 | Address | &:r1125_1 | -| ir.cpp:1126:9:1126:9 | Address | &:r1126_1 | -| ir.cpp:1127:29:1127:29 | Address | &:r1127_1 | -| ir.cpp:1137:6:1137:30 | ChiPartial | partial:m1137_3 | -| ir.cpp:1137:6:1137:30 | ChiTotal | total:m1137_2 | -| ir.cpp:1137:6:1137:30 | SideEffect | m1137_3 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_1 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_5 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_10 | -| ir.cpp:1139:5:1139:20 | Address | &:r1139_10 | -| ir.cpp:1139:5:1139:20 | Condition | r1139_8 | -| ir.cpp:1139:5:1139:20 | Left | r1139_6 | -| ir.cpp:1139:5:1139:20 | Left | r1139_11 | -| ir.cpp:1139:5:1139:20 | Load | m1139_4 | -| ir.cpp:1139:5:1139:20 | Load | m1139_4 | -| ir.cpp:1139:5:1139:20 | Phi | from 0:m1139_3 | -| ir.cpp:1139:5:1139:20 | Phi | from 2:m1139_14 | -| ir.cpp:1139:5:1139:20 | Right | r1139_7 | -| ir.cpp:1139:5:1139:20 | Right | r1139_12 | -| ir.cpp:1139:5:1139:20 | StoreValue | r1139_2 | -| ir.cpp:1139:5:1139:20 | StoreValue | r1139_13 | -| ir.cpp:1142:6:1142:23 | ChiPartial | partial:m1142_3 | -| ir.cpp:1142:6:1142:23 | ChiTotal | total:m1142_2 | -| ir.cpp:1142:6:1142:23 | Phi | from 2:~m1142_10 | -| ir.cpp:1142:6:1142:23 | Phi | from 7:~m1154_8 | -| ir.cpp:1142:6:1142:23 | Phi | from 8:~m1142_4 | -| ir.cpp:1142:6:1142:23 | Phi | from 10:~m1142_4 | -| ir.cpp:1142:6:1142:23 | SideEffect | ~m1142_7 | -| ir.cpp:1142:30:1142:30 | Address | &:r1142_5 | -| ir.cpp:1144:9:1144:9 | Address | &:r1144_1 | -| ir.cpp:1144:12:1144:13 | StoreValue | r1144_2 | -| ir.cpp:1145:9:1145:9 | Address | &:r1145_1 | -| ir.cpp:1145:9:1145:9 | Condition | r1145_2 | -| ir.cpp:1145:9:1145:9 | Load | m1142_6 | -| ir.cpp:1146:7:1146:28 | Address | &:r1146_1 | -| ir.cpp:1146:7:1146:28 | Address | &:r1146_1 | -| ir.cpp:1146:7:1146:28 | Load | m1146_4 | -| ir.cpp:1146:13:1146:28 | StoreValue | r1146_3 | -| ir.cpp:1146:13:1146:28 | Unary | r1146_2 | -| ir.cpp:1148:14:1148:14 | Address | &:r1148_1 | -| ir.cpp:1148:14:1148:14 | Left | r1148_2 | -| ir.cpp:1148:14:1148:14 | Load | m1144_3 | -| ir.cpp:1148:14:1148:18 | Condition | r1148_4 | -| ir.cpp:1148:18:1148:18 | Right | r1148_3 | -| ir.cpp:1151:5:1151:5 | Address | &:r1151_2 | -| ir.cpp:1151:9:1151:9 | StoreValue | r1151_1 | -| ir.cpp:1153:22:1153:22 | Address | &:r1153_2 | -| ir.cpp:1153:22:1153:22 | Address | &:r1153_2 | -| ir.cpp:1153:22:1153:22 | Address | &:r1153_4 | -| ir.cpp:1153:22:1153:22 | Load | m1153_3 | -| ir.cpp:1154:5:1154:19 | Address | &:r1154_1 | -| ir.cpp:1154:5:1154:19 | Address | &:r1154_1 | -| ir.cpp:1154:5:1154:19 | Address | &:r1154_1 | -| ir.cpp:1154:5:1154:19 | Arg(this) | this:r1154_1 | -| ir.cpp:1154:5:1154:19 | CallTarget | func:r1154_3 | -| ir.cpp:1154:5:1154:19 | ChiPartial | partial:m1154_7 | -| ir.cpp:1154:5:1154:19 | ChiPartial | partial:m1154_10 | -| ir.cpp:1154:5:1154:19 | ChiTotal | total:m1142_4 | -| ir.cpp:1154:5:1154:19 | ChiTotal | total:m1154_2 | -| ir.cpp:1154:5:1154:19 | Load | m1154_11 | -| ir.cpp:1154:5:1154:19 | SideEffect | ~m1142_4 | -| ir.cpp:1154:18:1154:18 | Address | &:r1154_4 | -| ir.cpp:1154:18:1154:18 | Address | &:r1154_5 | -| ir.cpp:1154:18:1154:18 | Arg(0) | 0:r1154_5 | -| ir.cpp:1154:18:1154:18 | Load | m1153_3 | -| ir.cpp:1154:18:1154:18 | SideEffect | ~m1153_5 | -| ir.cpp:1156:24:1156:24 | Address | &:r1156_2 | -| ir.cpp:1156:24:1156:24 | Address | &:r1156_2 | -| ir.cpp:1156:24:1156:24 | Address | &:r1156_4 | -| ir.cpp:1156:24:1156:24 | Load | m1156_3 | -| ir.cpp:1162:6:1162:16 | ChiPartial | partial:m1162_3 | -| ir.cpp:1162:6:1162:16 | ChiTotal | total:m1162_2 | -| ir.cpp:1162:6:1162:16 | SideEffect | m1162_3 | -| ir.cpp:1162:22:1162:22 | Address | &:r1162_5 | -| ir.cpp:1163:18:1163:20 | Address | &:r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:18:1163:20 | Left | r1163_1 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_4 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_9 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_14 | -| ir.cpp:1163:23:1163:37 | Address | &:r1163_19 | -| ir.cpp:1163:23:1163:37 | Right | r1163_3 | -| ir.cpp:1163:23:1163:37 | Right | r1163_8 | -| ir.cpp:1163:23:1163:37 | Right | r1163_13 | -| ir.cpp:1163:23:1163:37 | Right | r1163_18 | -| ir.cpp:1163:26:1163:26 | ChiPartial | partial:m1163_6 | -| ir.cpp:1163:26:1163:26 | ChiTotal | total:m1163_2 | -| ir.cpp:1163:26:1163:26 | StoreValue | r1163_5 | -| ir.cpp:1163:29:1163:29 | ChiPartial | partial:m1163_11 | -| ir.cpp:1163:29:1163:29 | ChiTotal | total:m1163_7 | -| ir.cpp:1163:29:1163:29 | StoreValue | r1163_10 | -| ir.cpp:1163:32:1163:32 | ChiPartial | partial:m1163_16 | -| ir.cpp:1163:32:1163:32 | ChiTotal | total:m1163_12 | -| ir.cpp:1163:32:1163:32 | StoreValue | r1163_15 | -| ir.cpp:1163:35:1163:35 | ChiPartial | partial:m1163_21 | -| ir.cpp:1163:35:1163:35 | ChiTotal | total:m1163_17 | -| ir.cpp:1163:35:1163:35 | StoreValue | r1163_20 | -| ir.cpp:1164:7:1164:7 | Address | &:r1164_1 | -| ir.cpp:1164:11:1164:13 | Left | r1164_2 | -| ir.cpp:1164:11:1164:16 | Address | &:r1164_5 | -| ir.cpp:1164:11:1164:16 | Load | ~m1163_22 | -| ir.cpp:1164:11:1164:16 | StoreValue | r1164_6 | -| ir.cpp:1164:15:1164:15 | Address | &:r1164_3 | -| ir.cpp:1164:15:1164:15 | Load | m1162_6 | -| ir.cpp:1164:15:1164:15 | Right | r1164_4 | -| ir.cpp:1165:3:1165:5 | Left | r1165_3 | -| ir.cpp:1165:3:1165:8 | Address | &:r1165_6 | -| ir.cpp:1165:3:1165:12 | ChiPartial | partial:m1165_7 | -| ir.cpp:1165:3:1165:12 | ChiTotal | total:m1163_22 | -| ir.cpp:1165:7:1165:7 | Address | &:r1165_4 | -| ir.cpp:1165:7:1165:7 | Load | m1162_6 | -| ir.cpp:1165:7:1165:7 | Right | r1165_5 | -| ir.cpp:1165:12:1165:12 | Address | &:r1165_1 | -| ir.cpp:1165:12:1165:12 | Load | m1164_7 | -| ir.cpp:1165:12:1165:12 | StoreValue | r1165_2 | -| ir.cpp:1166:18:1166:28 | Address | &:r1166_1 | -| ir.cpp:1166:32:1166:78 | Arg(2) | 2:r1166_6 | -| ir.cpp:1166:32:1166:78 | StoreValue | r1166_10 | -| ir.cpp:1166:56:1166:58 | Address | &:r1166_2 | -| ir.cpp:1166:56:1166:58 | Arg(0) | 0:r1166_3 | -| ir.cpp:1166:56:1166:58 | Load | m1165_8 | -| ir.cpp:1166:61:1166:63 | Address | &:r1166_4 | -| ir.cpp:1166:61:1166:63 | Arg(1) | 1:r1166_5 | -| ir.cpp:1166:61:1166:63 | Load | m1165_8 | -| ir.cpp:1166:71:1166:71 | Arg(3) | 3:r1166_7 | -| ir.cpp:1166:74:1166:74 | Arg(4) | 4:r1166_8 | -| ir.cpp:1166:77:1166:77 | Arg(5) | 5:r1166_9 | -| ir.cpp:1167:3:1167:5 | Address | &:r1167_6 | -| ir.cpp:1167:9:1167:11 | Address | &:r1167_1 | -| ir.cpp:1167:9:1167:11 | Left | r1167_2 | -| ir.cpp:1167:9:1167:11 | Load | m1165_8 | -| ir.cpp:1167:9:1167:25 | StoreValue | r1167_5 | -| ir.cpp:1167:15:1167:25 | Address | &:r1167_3 | -| ir.cpp:1167:15:1167:25 | Load | m1166_11 | -| ir.cpp:1167:15:1167:25 | Right | r1167_4 | -| ir.cpp:1172:5:1172:21 | Address | &:r1172_7 | -| ir.cpp:1172:5:1172:21 | ChiPartial | partial:m1172_3 | -| ir.cpp:1172:5:1172:21 | ChiTotal | total:m1172_2 | -| ir.cpp:1172:5:1172:21 | Load | m1175_4 | -| ir.cpp:1172:5:1172:21 | SideEffect | m1172_3 | -| ir.cpp:1172:27:1172:27 | Address | &:r1172_5 | -| ir.cpp:1173:7:1173:7 | Address | &:r1173_1 | -| ir.cpp:1174:3:1174:8 | CallTarget | func:r1174_1 | -| ir.cpp:1174:10:1174:11 | Address | &:r1174_4 | -| ir.cpp:1174:10:1174:11 | Arg(0) | 0:r1174_4 | -| ir.cpp:1174:10:1174:11 | ChiPartial | partial:m1174_11 | -| ir.cpp:1174:10:1174:11 | ChiTotal | total:m1173_2 | -| ir.cpp:1174:10:1174:11 | Unary | r1174_3 | -| ir.cpp:1174:11:1174:11 | Unary | r1174_2 | -| ir.cpp:1174:14:1174:15 | Address | &:r1174_7 | -| ir.cpp:1174:14:1174:15 | Arg(1) | 1:r1174_7 | -| ir.cpp:1174:14:1174:15 | SideEffect | ~m1172_6 | -| ir.cpp:1174:14:1174:15 | Unary | r1174_6 | -| ir.cpp:1174:15:1174:15 | Unary | r1174_5 | -| ir.cpp:1174:18:1174:28 | Arg(2) | 2:r1174_8 | -| ir.cpp:1174:18:1174:28 | BufferSize | r1174_8 | -| ir.cpp:1174:18:1174:28 | BufferSize | r1174_8 | -| ir.cpp:1175:3:1175:11 | Address | &:r1175_1 | -| ir.cpp:1175:10:1175:10 | Address | &:r1175_2 | -| ir.cpp:1175:10:1175:10 | Load | m1174_12 | -| ir.cpp:1175:10:1175:10 | StoreValue | r1175_3 | -| ir.cpp:1178:8:1178:23 | Address | &:r1178_5 | -| ir.cpp:1178:8:1178:23 | ChiPartial | partial:m1178_3 | -| ir.cpp:1178:8:1178:23 | ChiTotal | total:m1178_2 | -| ir.cpp:1178:8:1178:23 | Load | m1179_11 | -| ir.cpp:1178:8:1178:23 | SideEffect | ~m1179_8 | -| ir.cpp:1179:3:1179:23 | Address | &:r1179_1 | -| ir.cpp:1179:3:1179:23 | Address | &:r1179_1 | -| ir.cpp:1179:3:1179:23 | Arg(this) | this:r1179_1 | -| ir.cpp:1179:3:1179:23 | CallTarget | func:r1179_3 | -| ir.cpp:1179:3:1179:23 | ChiPartial | partial:m1179_7 | -| ir.cpp:1179:3:1179:23 | ChiPartial | partial:m1179_10 | -| ir.cpp:1179:3:1179:23 | ChiTotal | total:m1178_4 | -| ir.cpp:1179:3:1179:23 | ChiTotal | total:m1179_2 | -| ir.cpp:1179:3:1179:23 | SideEffect | ~m1178_4 | -| ir.cpp:1179:17:1179:21 | Address | &:r1179_5 | -| ir.cpp:1179:17:1179:21 | Arg(0) | 0:r1179_5 | -| ir.cpp:1179:17:1179:21 | SideEffect | ~m1178_3 | -| ir.cpp:1179:17:1179:21 | Unary | r1179_4 | -| ir.cpp:1182:6:1182:16 | ChiPartial | partial:m1182_3 | -| ir.cpp:1182:6:1182:16 | ChiTotal | total:m1182_2 | -| ir.cpp:1182:6:1182:16 | SideEffect | m1182_3 | -| ir.cpp:1182:22:1182:22 | Address | &:r1182_5 | -| ir.cpp:1183:9:1183:9 | Address | &:r1183_1 | -| ir.cpp:1183:12:1183:13 | StoreValue | r1183_2 | -| ir.cpp:1184:12:1184:12 | Address | &:r1184_1 | -| ir.cpp:1184:12:1184:12 | Condition | r1184_2 | -| ir.cpp:1184:12:1184:12 | Load | m1182_6 | -| ir.cpp:1186:9:1186:9 | Address | &:r1186_2 | -| ir.cpp:1186:13:1186:13 | StoreValue | r1186_1 | +| ir.cpp:1079:6:1079:18 | ChiPartial | partial:m1079_3 | +| ir.cpp:1079:6:1079:18 | ChiTotal | total:m1079_2 | +| ir.cpp:1079:6:1079:18 | SideEffect | ~m1090_1 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_5 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_5 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_7 | +| ir.cpp:1079:39:1079:39 | Address | &:r1079_7 | +| ir.cpp:1079:39:1079:39 | Load | m1079_6 | +| ir.cpp:1079:39:1079:39 | SideEffect | m1079_8 | +| ir.cpp:1080:5:1080:5 | Address | &:r1080_1 | +| ir.cpp:1080:5:1080:5 | Address | &:r1080_7 | +| ir.cpp:1080:5:1080:5 | Address | &:r1080_15 | +| ir.cpp:1080:14:1080:14 | Address | &:r1080_33 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_2 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_8 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_16 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_27 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_36 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_42 | +| ir.cpp:1080:18:1080:18 | Address | &:r1080_42 | +| ir.cpp:1080:18:1080:18 | Arg(0) | 0:r1080_28 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_1 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_3 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_5 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r0_7 | +| ir.cpp:1080:18:1080:18 | Arg(this) | this:r1080_42 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_10 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_18 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_26 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_35 | +| ir.cpp:1080:18:1080:18 | CallTarget | func:r1080_43 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_12 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_20 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_30 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_37 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_45 | +| ir.cpp:1080:18:1080:18 | ChiPartial | partial:m1080_48 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1079_4 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_13 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_23 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_24 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_31 | +| ir.cpp:1080:18:1080:18 | ChiTotal | total:m1080_38 | +| ir.cpp:1080:18:1080:18 | Condition | r1080_29 | +| ir.cpp:1080:18:1080:18 | Load | m1079_6 | +| ir.cpp:1080:18:1080:18 | Load | m1080_6 | +| ir.cpp:1080:18:1080:18 | Load | m1080_6 | +| ir.cpp:1080:18:1080:18 | Load | m1080_22 | +| ir.cpp:1080:18:1080:18 | Phi | from 0:m1080_14 | +| ir.cpp:1080:18:1080:18 | Phi | from 0:~m1080_21 | +| ir.cpp:1080:18:1080:18 | Phi | from 4:m1080_49 | +| ir.cpp:1080:18:1080:18 | Phi | from 4:~m1080_46 | +| ir.cpp:1080:18:1080:18 | SideEffect | m1080_23 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1079_4 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_13 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_24 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_31 | +| ir.cpp:1080:18:1080:18 | SideEffect | ~m1080_38 | +| ir.cpp:1080:18:1080:18 | StoreValue | r1080_5 | +| ir.cpp:1080:18:1080:18 | StoreValue | r1080_11 | +| ir.cpp:1080:18:1080:18 | StoreValue | r1080_19 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_3 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_4 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_9 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_17 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_25 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_34 | +| ir.cpp:1080:18:1080:18 | Unary | r1080_44 | +| ir.cpp:1080:18:1080:19 | Load | ~m1080_38 | +| ir.cpp:1080:18:1080:19 | StoreValue | r1080_39 | +| ir.cpp:1081:13:1081:13 | Address | &:r1081_1 | +| ir.cpp:1081:13:1081:13 | Left | r1081_2 | +| ir.cpp:1081:13:1081:13 | Load | m1080_40 | +| ir.cpp:1081:13:1081:17 | Condition | r1081_4 | +| ir.cpp:1081:17:1081:17 | Right | r1081_3 | +| ir.cpp:1086:5:1086:5 | Address | &:r1086_1 | +| ir.cpp:1086:5:1086:5 | Address | &:r1086_7 | +| ir.cpp:1086:5:1086:5 | Address | &:r1086_15 | +| ir.cpp:1086:21:1086:21 | Address | &:r1086_42 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_2 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_8 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_16 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_27 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_33 | +| ir.cpp:1086:25:1086:25 | Address | &:r1086_33 | +| ir.cpp:1086:25:1086:25 | Arg(0) | 0:r1086_28 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_9 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_11 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_13 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r0_15 | +| ir.cpp:1086:25:1086:25 | Arg(this) | this:r1086_33 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_10 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_18 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_26 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_34 | +| ir.cpp:1086:25:1086:25 | CallTarget | func:r1086_44 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_12 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_20 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_30 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_36 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_39 | +| ir.cpp:1086:25:1086:25 | ChiPartial | partial:m1086_46 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1080_31 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_13 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_23 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_24 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_31 | +| ir.cpp:1086:25:1086:25 | ChiTotal | total:m1086_47 | +| ir.cpp:1086:25:1086:25 | Condition | r1086_29 | +| ir.cpp:1086:25:1086:25 | Load | m1079_6 | +| ir.cpp:1086:25:1086:25 | Load | m1086_6 | +| ir.cpp:1086:25:1086:25 | Load | m1086_6 | +| ir.cpp:1086:25:1086:25 | Load | m1086_22 | +| ir.cpp:1086:25:1086:25 | Phi | from 5:m1086_14 | +| ir.cpp:1086:25:1086:25 | Phi | from 5:~m1086_21 | +| ir.cpp:1086:25:1086:25 | Phi | from 7:m1086_40 | +| ir.cpp:1086:25:1086:25 | Phi | from 7:~m1086_37 | +| ir.cpp:1086:25:1086:25 | SideEffect | m1086_23 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1080_31 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_13 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_24 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_31 | +| ir.cpp:1086:25:1086:25 | SideEffect | ~m1086_47 | +| ir.cpp:1086:25:1086:25 | StoreValue | r1086_5 | +| ir.cpp:1086:25:1086:25 | StoreValue | r1086_11 | +| ir.cpp:1086:25:1086:25 | StoreValue | r1086_19 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_3 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_4 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_9 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_17 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_25 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_35 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_43 | +| ir.cpp:1086:25:1086:25 | Unary | r1086_45 | +| ir.cpp:1086:25:1086:26 | StoreValue | r1086_50 | +| ir.cpp:1086:25:1086:26 | Unary | r1086_48 | +| ir.cpp:1086:25:1086:26 | Unary | r1086_49 | +| ir.cpp:1087:13:1087:13 | Address | &:r1087_1 | +| ir.cpp:1087:13:1087:13 | Address | &:r1087_2 | +| ir.cpp:1087:13:1087:13 | Left | r1087_3 | +| ir.cpp:1087:13:1087:13 | Load | m1086_51 | +| ir.cpp:1087:13:1087:13 | Load | ~m1086_47 | +| ir.cpp:1087:13:1087:17 | Condition | r1087_5 | +| ir.cpp:1087:17:1087:17 | Right | r1087_4 | +| ir.cpp:1090:5:1090:5 | Phi | from 6:~m1086_31 | +| ir.cpp:1090:5:1090:5 | Phi | from 9:~m1086_47 | +| ir.cpp:1110:5:1110:11 | Address | &:r1110_7 | +| ir.cpp:1110:5:1110:11 | ChiPartial | partial:m1110_3 | +| ir.cpp:1110:5:1110:11 | ChiTotal | total:m1110_2 | +| ir.cpp:1110:5:1110:11 | Load | m1112_4 | +| ir.cpp:1110:5:1110:11 | SideEffect | ~m1111_2 | +| ir.cpp:1110:17:1110:17 | Address | &:r1110_5 | +| ir.cpp:1111:3:1111:14 | ChiPartial | partial:m1111_1 | +| ir.cpp:1111:3:1111:14 | ChiTotal | total:m1110_4 | +| ir.cpp:1111:3:1111:14 | SideEffect | ~m1110_4 | +| ir.cpp:1112:3:1112:11 | Address | &:r1112_1 | +| ir.cpp:1112:10:1112:10 | Address | &:r1112_2 | +| ir.cpp:1112:10:1112:10 | Load | m1110_6 | +| ir.cpp:1112:10:1112:10 | StoreValue | r1112_3 | +| ir.cpp:1115:13:1115:30 | ChiPartial | partial:m1115_3 | +| ir.cpp:1115:13:1115:30 | ChiTotal | total:m1115_2 | +| ir.cpp:1115:13:1115:30 | SideEffect | ~m1117_2 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_5 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_5 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_7 | +| ir.cpp:1115:46:1115:46 | Address | &:r1115_7 | +| ir.cpp:1115:46:1115:46 | Load | m1115_6 | +| ir.cpp:1115:46:1115:46 | SideEffect | m1115_8 | +| ir.cpp:1115:62:1115:62 | Address | &:r1115_9 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_11 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_11 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_13 | +| ir.cpp:1115:79:1115:79 | Address | &:r1115_13 | +| ir.cpp:1115:79:1115:79 | Load | m1115_12 | +| ir.cpp:1115:79:1115:79 | SideEffect | m1115_14 | +| ir.cpp:1115:95:1115:95 | Address | &:r1115_15 | +| ir.cpp:1117:3:1121:6 | ChiPartial | partial:m1117_1 | +| ir.cpp:1117:3:1121:6 | ChiTotal | total:m1115_4 | +| ir.cpp:1117:3:1121:6 | SideEffect | ~m1115_4 | +| ir.cpp:1120:13:1120:13 | Address | &:r1120_1 | +| ir.cpp:1120:13:1120:13 | AsmOperand(0) | 0:r1120_3 | +| ir.cpp:1120:13:1120:13 | Load | m1115_6 | +| ir.cpp:1120:13:1120:13 | Unary | r1120_2 | +| ir.cpp:1120:23:1120:23 | AsmOperand(1) | 1:r1120_4 | +| ir.cpp:1120:33:1120:33 | Address | &:r1120_5 | +| ir.cpp:1120:33:1120:33 | Address | &:r1120_6 | +| ir.cpp:1120:33:1120:33 | AsmOperand(2) | 2:r1120_7 | +| ir.cpp:1120:33:1120:33 | Load | m1115_12 | +| ir.cpp:1120:33:1120:33 | Load | ~m1115_14 | +| ir.cpp:1120:42:1120:42 | Address | &:r1120_8 | +| ir.cpp:1120:42:1120:42 | AsmOperand(3) | 3:r1120_9 | +| ir.cpp:1120:42:1120:42 | Load | m1115_16 | +| ir.cpp:1124:6:1124:23 | ChiPartial | partial:m1124_3 | +| ir.cpp:1124:6:1124:23 | ChiTotal | total:m1124_2 | +| ir.cpp:1124:6:1124:23 | SideEffect | m1124_3 | +| ir.cpp:1127:9:1127:9 | Address | &:r1127_1 | +| ir.cpp:1128:9:1128:9 | Address | &:r1128_1 | +| ir.cpp:1129:29:1129:29 | Address | &:r1129_1 | +| ir.cpp:1139:6:1139:30 | ChiPartial | partial:m1139_3 | +| ir.cpp:1139:6:1139:30 | ChiTotal | total:m1139_2 | +| ir.cpp:1139:6:1139:30 | SideEffect | m1139_3 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_1 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_5 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_10 | +| ir.cpp:1141:5:1141:20 | Address | &:r1141_10 | +| ir.cpp:1141:5:1141:20 | Condition | r1141_8 | +| ir.cpp:1141:5:1141:20 | Left | r1141_6 | +| ir.cpp:1141:5:1141:20 | Left | r1141_11 | +| ir.cpp:1141:5:1141:20 | Load | m1141_4 | +| ir.cpp:1141:5:1141:20 | Load | m1141_4 | +| ir.cpp:1141:5:1141:20 | Phi | from 0:m1141_3 | +| ir.cpp:1141:5:1141:20 | Phi | from 2:m1141_14 | +| ir.cpp:1141:5:1141:20 | Right | r1141_7 | +| ir.cpp:1141:5:1141:20 | Right | r1141_12 | +| ir.cpp:1141:5:1141:20 | StoreValue | r1141_2 | +| ir.cpp:1141:5:1141:20 | StoreValue | r1141_13 | +| ir.cpp:1144:6:1144:23 | ChiPartial | partial:m1144_3 | +| ir.cpp:1144:6:1144:23 | ChiTotal | total:m1144_2 | +| ir.cpp:1144:6:1144:23 | Phi | from 2:~m1144_10 | +| ir.cpp:1144:6:1144:23 | Phi | from 7:~m1156_8 | +| ir.cpp:1144:6:1144:23 | Phi | from 8:~m1144_4 | +| ir.cpp:1144:6:1144:23 | Phi | from 10:~m1144_4 | +| ir.cpp:1144:6:1144:23 | SideEffect | ~m1144_7 | +| ir.cpp:1144:30:1144:30 | Address | &:r1144_5 | +| ir.cpp:1146:9:1146:9 | Address | &:r1146_1 | +| ir.cpp:1146:12:1146:13 | StoreValue | r1146_2 | +| ir.cpp:1147:9:1147:9 | Address | &:r1147_1 | +| ir.cpp:1147:9:1147:9 | Condition | r1147_2 | +| ir.cpp:1147:9:1147:9 | Load | m1144_6 | +| ir.cpp:1148:7:1148:28 | Address | &:r1148_1 | +| ir.cpp:1148:7:1148:28 | Address | &:r1148_1 | +| ir.cpp:1148:7:1148:28 | Load | m1148_4 | +| ir.cpp:1148:13:1148:28 | StoreValue | r1148_3 | +| ir.cpp:1148:13:1148:28 | Unary | r1148_2 | +| ir.cpp:1150:14:1150:14 | Address | &:r1150_1 | +| ir.cpp:1150:14:1150:14 | Left | r1150_2 | +| ir.cpp:1150:14:1150:14 | Load | m1146_3 | +| ir.cpp:1150:14:1150:18 | Condition | r1150_4 | +| ir.cpp:1150:18:1150:18 | Right | r1150_3 | +| ir.cpp:1153:5:1153:5 | Address | &:r1153_2 | +| ir.cpp:1153:9:1153:9 | StoreValue | r1153_1 | +| ir.cpp:1155:22:1155:22 | Address | &:r1155_2 | +| ir.cpp:1155:22:1155:22 | Address | &:r1155_2 | +| ir.cpp:1155:22:1155:22 | Address | &:r1155_4 | +| ir.cpp:1155:22:1155:22 | Load | m1155_3 | +| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | +| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | +| ir.cpp:1156:5:1156:19 | Address | &:r1156_1 | +| ir.cpp:1156:5:1156:19 | Arg(this) | this:r1156_1 | +| ir.cpp:1156:5:1156:19 | CallTarget | func:r1156_3 | +| ir.cpp:1156:5:1156:19 | ChiPartial | partial:m1156_7 | +| ir.cpp:1156:5:1156:19 | ChiPartial | partial:m1156_10 | +| ir.cpp:1156:5:1156:19 | ChiTotal | total:m1144_4 | +| ir.cpp:1156:5:1156:19 | ChiTotal | total:m1156_2 | +| ir.cpp:1156:5:1156:19 | Load | m1156_11 | +| ir.cpp:1156:5:1156:19 | SideEffect | ~m1144_4 | +| ir.cpp:1156:18:1156:18 | Address | &:r1156_4 | +| ir.cpp:1156:18:1156:18 | Address | &:r1156_5 | +| ir.cpp:1156:18:1156:18 | Arg(0) | 0:r1156_5 | +| ir.cpp:1156:18:1156:18 | Load | m1155_3 | +| ir.cpp:1156:18:1156:18 | SideEffect | ~m1155_5 | +| ir.cpp:1158:24:1158:24 | Address | &:r1158_2 | +| ir.cpp:1158:24:1158:24 | Address | &:r1158_2 | +| ir.cpp:1158:24:1158:24 | Address | &:r1158_4 | +| ir.cpp:1158:24:1158:24 | Load | m1158_3 | +| ir.cpp:1164:6:1164:16 | ChiPartial | partial:m1164_3 | +| ir.cpp:1164:6:1164:16 | ChiTotal | total:m1164_2 | +| ir.cpp:1164:6:1164:16 | SideEffect | m1164_3 | +| ir.cpp:1164:22:1164:22 | Address | &:r1164_5 | +| ir.cpp:1165:18:1165:20 | Address | &:r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:18:1165:20 | Left | r1165_1 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_4 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_9 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_14 | +| ir.cpp:1165:23:1165:37 | Address | &:r1165_19 | +| ir.cpp:1165:23:1165:37 | Right | r1165_3 | +| ir.cpp:1165:23:1165:37 | Right | r1165_8 | +| ir.cpp:1165:23:1165:37 | Right | r1165_13 | +| ir.cpp:1165:23:1165:37 | Right | r1165_18 | +| ir.cpp:1165:26:1165:26 | ChiPartial | partial:m1165_6 | +| ir.cpp:1165:26:1165:26 | ChiTotal | total:m1165_2 | +| ir.cpp:1165:26:1165:26 | StoreValue | r1165_5 | +| ir.cpp:1165:29:1165:29 | ChiPartial | partial:m1165_11 | +| ir.cpp:1165:29:1165:29 | ChiTotal | total:m1165_7 | +| ir.cpp:1165:29:1165:29 | StoreValue | r1165_10 | +| ir.cpp:1165:32:1165:32 | ChiPartial | partial:m1165_16 | +| ir.cpp:1165:32:1165:32 | ChiTotal | total:m1165_12 | +| ir.cpp:1165:32:1165:32 | StoreValue | r1165_15 | +| ir.cpp:1165:35:1165:35 | ChiPartial | partial:m1165_21 | +| ir.cpp:1165:35:1165:35 | ChiTotal | total:m1165_17 | +| ir.cpp:1165:35:1165:35 | StoreValue | r1165_20 | +| ir.cpp:1166:7:1166:7 | Address | &:r1166_1 | +| ir.cpp:1166:11:1166:13 | Left | r1166_2 | +| ir.cpp:1166:11:1166:16 | Address | &:r1166_5 | +| ir.cpp:1166:11:1166:16 | Load | ~m1165_22 | +| ir.cpp:1166:11:1166:16 | StoreValue | r1166_6 | +| ir.cpp:1166:15:1166:15 | Address | &:r1166_3 | +| ir.cpp:1166:15:1166:15 | Load | m1164_6 | +| ir.cpp:1166:15:1166:15 | Right | r1166_4 | +| ir.cpp:1167:3:1167:5 | Left | r1167_3 | +| ir.cpp:1167:3:1167:8 | Address | &:r1167_6 | +| ir.cpp:1167:3:1167:12 | ChiPartial | partial:m1167_7 | +| ir.cpp:1167:3:1167:12 | ChiTotal | total:m1165_22 | +| ir.cpp:1167:7:1167:7 | Address | &:r1167_4 | +| ir.cpp:1167:7:1167:7 | Load | m1164_6 | +| ir.cpp:1167:7:1167:7 | Right | r1167_5 | +| ir.cpp:1167:12:1167:12 | Address | &:r1167_1 | +| ir.cpp:1167:12:1167:12 | Load | m1166_7 | +| ir.cpp:1167:12:1167:12 | StoreValue | r1167_2 | +| ir.cpp:1168:18:1168:28 | Address | &:r1168_1 | +| ir.cpp:1168:32:1168:78 | Arg(2) | 2:r1168_6 | +| ir.cpp:1168:32:1168:78 | StoreValue | r1168_10 | +| ir.cpp:1168:56:1168:58 | Address | &:r1168_2 | +| ir.cpp:1168:56:1168:58 | Arg(0) | 0:r1168_3 | +| ir.cpp:1168:56:1168:58 | Load | m1167_8 | +| ir.cpp:1168:61:1168:63 | Address | &:r1168_4 | +| ir.cpp:1168:61:1168:63 | Arg(1) | 1:r1168_5 | +| ir.cpp:1168:61:1168:63 | Load | m1167_8 | +| ir.cpp:1168:71:1168:71 | Arg(3) | 3:r1168_7 | +| ir.cpp:1168:74:1168:74 | Arg(4) | 4:r1168_8 | +| ir.cpp:1168:77:1168:77 | Arg(5) | 5:r1168_9 | +| ir.cpp:1169:3:1169:5 | Address | &:r1169_6 | +| ir.cpp:1169:9:1169:11 | Address | &:r1169_1 | +| ir.cpp:1169:9:1169:11 | Left | r1169_2 | +| ir.cpp:1169:9:1169:11 | Load | m1167_8 | +| ir.cpp:1169:9:1169:25 | StoreValue | r1169_5 | +| ir.cpp:1169:15:1169:25 | Address | &:r1169_3 | +| ir.cpp:1169:15:1169:25 | Load | m1168_11 | +| ir.cpp:1169:15:1169:25 | Right | r1169_4 | +| ir.cpp:1174:5:1174:21 | Address | &:r1174_7 | +| ir.cpp:1174:5:1174:21 | ChiPartial | partial:m1174_3 | +| ir.cpp:1174:5:1174:21 | ChiTotal | total:m1174_2 | +| ir.cpp:1174:5:1174:21 | Load | m1177_4 | +| ir.cpp:1174:5:1174:21 | SideEffect | m1174_3 | +| ir.cpp:1174:27:1174:27 | Address | &:r1174_5 | +| ir.cpp:1175:7:1175:7 | Address | &:r1175_1 | +| ir.cpp:1176:3:1176:8 | CallTarget | func:r1176_1 | +| ir.cpp:1176:10:1176:11 | Address | &:r1176_4 | +| ir.cpp:1176:10:1176:11 | Arg(0) | 0:r1176_4 | +| ir.cpp:1176:10:1176:11 | ChiPartial | partial:m1176_11 | +| ir.cpp:1176:10:1176:11 | ChiTotal | total:m1175_2 | +| ir.cpp:1176:10:1176:11 | Unary | r1176_3 | +| ir.cpp:1176:11:1176:11 | Unary | r1176_2 | +| ir.cpp:1176:14:1176:15 | Address | &:r1176_7 | +| ir.cpp:1176:14:1176:15 | Arg(1) | 1:r1176_7 | +| ir.cpp:1176:14:1176:15 | SideEffect | ~m1174_6 | +| ir.cpp:1176:14:1176:15 | Unary | r1176_6 | +| ir.cpp:1176:15:1176:15 | Unary | r1176_5 | +| ir.cpp:1176:18:1176:28 | Arg(2) | 2:r1176_8 | +| ir.cpp:1176:18:1176:28 | BufferSize | r1176_8 | +| ir.cpp:1176:18:1176:28 | BufferSize | r1176_8 | +| ir.cpp:1177:3:1177:11 | Address | &:r1177_1 | +| ir.cpp:1177:10:1177:10 | Address | &:r1177_2 | +| ir.cpp:1177:10:1177:10 | Load | m1176_12 | +| ir.cpp:1177:10:1177:10 | StoreValue | r1177_3 | +| ir.cpp:1180:8:1180:23 | Address | &:r1180_5 | +| ir.cpp:1180:8:1180:23 | ChiPartial | partial:m1180_3 | +| ir.cpp:1180:8:1180:23 | ChiTotal | total:m1180_2 | +| ir.cpp:1180:8:1180:23 | Load | m1181_11 | +| ir.cpp:1180:8:1180:23 | SideEffect | ~m1181_8 | +| ir.cpp:1181:3:1181:23 | Address | &:r1181_1 | +| ir.cpp:1181:3:1181:23 | Address | &:r1181_1 | +| ir.cpp:1181:3:1181:23 | Arg(this) | this:r1181_1 | +| ir.cpp:1181:3:1181:23 | CallTarget | func:r1181_3 | +| ir.cpp:1181:3:1181:23 | ChiPartial | partial:m1181_7 | +| ir.cpp:1181:3:1181:23 | ChiPartial | partial:m1181_10 | +| ir.cpp:1181:3:1181:23 | ChiTotal | total:m1180_4 | +| ir.cpp:1181:3:1181:23 | ChiTotal | total:m1181_2 | +| ir.cpp:1181:3:1181:23 | SideEffect | ~m1180_4 | +| ir.cpp:1181:17:1181:21 | Address | &:r1181_5 | +| ir.cpp:1181:17:1181:21 | Arg(0) | 0:r1181_5 | +| ir.cpp:1181:17:1181:21 | SideEffect | ~m1180_3 | +| ir.cpp:1181:17:1181:21 | Unary | r1181_4 | +| ir.cpp:1184:6:1184:16 | ChiPartial | partial:m1184_3 | +| ir.cpp:1184:6:1184:16 | ChiTotal | total:m1184_2 | +| ir.cpp:1184:6:1184:16 | SideEffect | m1184_3 | +| ir.cpp:1184:22:1184:22 | Address | &:r1184_5 | +| ir.cpp:1185:9:1185:9 | Address | &:r1185_1 | +| ir.cpp:1185:12:1185:13 | StoreValue | r1185_2 | +| ir.cpp:1186:12:1186:12 | Address | &:r1186_1 | +| ir.cpp:1186:12:1186:12 | Condition | r1186_2 | +| ir.cpp:1186:12:1186:12 | Load | m1184_6 | | ir.cpp:1188:9:1188:9 | Address | &:r1188_2 | -| ir.cpp:1188:9:1188:9 | Phi | from 0:m1183_3 | -| ir.cpp:1188:9:1188:9 | Phi | from 1:m1186_3 | -| ir.cpp:1188:13:1188:13 | Address | &:r1188_3 | -| ir.cpp:1188:13:1188:13 | Load | m1188_1 | -| ir.cpp:1188:13:1188:13 | StoreValue | r1188_4 | -| ir.cpp:1191:6:1191:28 | ChiPartial | partial:m1191_3 | -| ir.cpp:1191:6:1191:28 | ChiTotal | total:m1191_2 | -| ir.cpp:1191:6:1191:28 | SideEffect | m1191_3 | -| ir.cpp:1191:34:1191:34 | Address | &:r1191_5 | -| ir.cpp:1192:9:1192:9 | Address | &:r1192_1 | -| ir.cpp:1192:12:1192:13 | StoreValue | r1192_2 | -| ir.cpp:1193:12:1193:12 | Address | &:r1193_1 | -| ir.cpp:1193:12:1193:12 | Condition | r1193_2 | -| ir.cpp:1193:12:1193:12 | Load | m1191_6 | -| ir.cpp:1195:9:1195:9 | Address | &:r1195_2 | -| ir.cpp:1195:13:1195:13 | StoreValue | r1195_1 | +| ir.cpp:1188:13:1188:13 | StoreValue | r1188_1 | +| ir.cpp:1190:9:1190:9 | Address | &:r1190_2 | +| ir.cpp:1190:9:1190:9 | Phi | from 0:m1185_3 | +| ir.cpp:1190:9:1190:9 | Phi | from 1:m1188_3 | +| ir.cpp:1190:13:1190:13 | Address | &:r1190_3 | +| ir.cpp:1190:13:1190:13 | Load | m1190_1 | +| ir.cpp:1190:13:1190:13 | StoreValue | r1190_4 | +| ir.cpp:1193:6:1193:28 | ChiPartial | partial:m1193_3 | +| ir.cpp:1193:6:1193:28 | ChiTotal | total:m1193_2 | +| ir.cpp:1193:6:1193:28 | SideEffect | m1193_3 | +| ir.cpp:1193:34:1193:34 | Address | &:r1193_5 | +| ir.cpp:1194:9:1194:9 | Address | &:r1194_1 | +| ir.cpp:1194:12:1194:13 | StoreValue | r1194_2 | +| ir.cpp:1195:12:1195:12 | Address | &:r1195_1 | +| ir.cpp:1195:12:1195:12 | Condition | r1195_2 | +| ir.cpp:1195:12:1195:12 | Load | m1193_6 | | ir.cpp:1197:9:1197:9 | Address | &:r1197_2 | | ir.cpp:1197:13:1197:13 | StoreValue | r1197_1 | | ir.cpp:1199:9:1199:9 | Address | &:r1199_2 | -| ir.cpp:1199:9:1199:9 | Phi | from 0:m1192_3 | -| ir.cpp:1199:9:1199:9 | Phi | from 2:m1197_3 | -| ir.cpp:1199:13:1199:13 | Address | &:r1199_3 | -| ir.cpp:1199:13:1199:13 | Load | m1199_1 | -| ir.cpp:1199:13:1199:13 | StoreValue | r1199_4 | -| ir.cpp:1202:6:1202:16 | ChiPartial | partial:m1202_3 | -| ir.cpp:1202:6:1202:16 | ChiTotal | total:m1202_2 | -| ir.cpp:1202:6:1202:16 | SideEffect | m1202_3 | -| ir.cpp:1202:22:1202:22 | Address | &:r1202_5 | -| ir.cpp:1203:9:1203:9 | Address | &:r1203_1 | -| ir.cpp:1203:12:1203:13 | StoreValue | r1203_2 | -| ir.cpp:1204:12:1204:12 | Address | &:r1204_1 | -| ir.cpp:1204:12:1204:12 | Condition | r1204_2 | -| ir.cpp:1204:12:1204:12 | Load | m1202_6 | -| ir.cpp:1206:9:1206:9 | Address | &:r1206_2 | -| ir.cpp:1206:13:1206:13 | StoreValue | r1206_1 | -| ir.cpp:1209:9:1209:9 | Address | &:r1209_2 | -| ir.cpp:1209:13:1209:13 | StoreValue | r1209_1 | -| ir.cpp:1210:5:1210:5 | Phi | from 0:m1203_3 | -| ir.cpp:1210:5:1210:5 | Phi | from 1:m1206_3 | -| ir.cpp:1210:5:1210:5 | Phi | from 2:m1209_3 | -| ir.cpp:1211:9:1211:9 | Address | &:r1211_1 | -| ir.cpp:1211:13:1211:13 | Address | &:r1211_2 | -| ir.cpp:1211:13:1211:13 | Load | m1210_1 | -| ir.cpp:1211:13:1211:13 | StoreValue | r1211_3 | -| ir.cpp:1214:6:1214:24 | ChiPartial | partial:m1214_3 | -| ir.cpp:1214:6:1214:24 | ChiTotal | total:m1214_2 | -| ir.cpp:1214:6:1214:24 | SideEffect | m1214_3 | -| ir.cpp:1214:30:1214:30 | Address | &:r1214_5 | -| ir.cpp:1215:9:1215:9 | Address | &:r1215_1 | -| ir.cpp:1215:12:1215:13 | StoreValue | r1215_2 | -| ir.cpp:1216:12:1216:12 | Address | &:r1216_1 | -| ir.cpp:1216:12:1216:12 | Condition | r1216_2 | -| ir.cpp:1216:12:1216:12 | Load | m1214_6 | -| ir.cpp:1218:13:1218:13 | Address | &:r1218_2 | -| ir.cpp:1218:17:1218:17 | StoreValue | r1218_1 | -| ir.cpp:1222:13:1222:13 | Address | &:r1222_2 | -| ir.cpp:1222:17:1222:17 | StoreValue | r1222_1 | -| ir.cpp:1226:13:1226:13 | Address | &:r1226_2 | -| ir.cpp:1226:17:1226:17 | StoreValue | r1226_1 | -| ir.cpp:1227:5:1227:5 | Phi | from 1:m1218_3 | -| ir.cpp:1227:5:1227:5 | Phi | from 2:m1222_3 | -| ir.cpp:1227:5:1227:5 | Phi | from 3:m1226_3 | -| ir.cpp:1228:9:1228:9 | Address | &:r1228_1 | +| ir.cpp:1199:13:1199:13 | StoreValue | r1199_1 | +| ir.cpp:1201:9:1201:9 | Address | &:r1201_2 | +| ir.cpp:1201:9:1201:9 | Phi | from 0:m1194_3 | +| ir.cpp:1201:9:1201:9 | Phi | from 2:m1199_3 | +| ir.cpp:1201:13:1201:13 | Address | &:r1201_3 | +| ir.cpp:1201:13:1201:13 | Load | m1201_1 | +| ir.cpp:1201:13:1201:13 | StoreValue | r1201_4 | +| ir.cpp:1204:6:1204:16 | ChiPartial | partial:m1204_3 | +| ir.cpp:1204:6:1204:16 | ChiTotal | total:m1204_2 | +| ir.cpp:1204:6:1204:16 | SideEffect | m1204_3 | +| ir.cpp:1204:22:1204:22 | Address | &:r1204_5 | +| ir.cpp:1205:9:1205:9 | Address | &:r1205_1 | +| ir.cpp:1205:12:1205:13 | StoreValue | r1205_2 | +| ir.cpp:1206:12:1206:12 | Address | &:r1206_1 | +| ir.cpp:1206:12:1206:12 | Condition | r1206_2 | +| ir.cpp:1206:12:1206:12 | Load | m1204_6 | +| ir.cpp:1208:9:1208:9 | Address | &:r1208_2 | +| ir.cpp:1208:13:1208:13 | StoreValue | r1208_1 | +| ir.cpp:1211:9:1211:9 | Address | &:r1211_2 | +| ir.cpp:1211:13:1211:13 | StoreValue | r1211_1 | +| ir.cpp:1212:5:1212:5 | Phi | from 0:m1205_3 | +| ir.cpp:1212:5:1212:5 | Phi | from 1:m1208_3 | +| ir.cpp:1212:5:1212:5 | Phi | from 2:m1211_3 | +| ir.cpp:1213:9:1213:9 | Address | &:r1213_1 | +| ir.cpp:1213:13:1213:13 | Address | &:r1213_2 | +| ir.cpp:1213:13:1213:13 | Load | m1212_1 | +| ir.cpp:1213:13:1213:13 | StoreValue | r1213_3 | +| ir.cpp:1216:6:1216:24 | ChiPartial | partial:m1216_3 | +| ir.cpp:1216:6:1216:24 | ChiTotal | total:m1216_2 | +| ir.cpp:1216:6:1216:24 | SideEffect | m1216_3 | +| ir.cpp:1216:30:1216:30 | Address | &:r1216_5 | +| ir.cpp:1217:9:1217:9 | Address | &:r1217_1 | +| ir.cpp:1217:12:1217:13 | StoreValue | r1217_2 | +| ir.cpp:1218:12:1218:12 | Address | &:r1218_1 | +| ir.cpp:1218:12:1218:12 | Condition | r1218_2 | +| ir.cpp:1218:12:1218:12 | Load | m1216_6 | +| ir.cpp:1220:13:1220:13 | Address | &:r1220_2 | +| ir.cpp:1220:17:1220:17 | StoreValue | r1220_1 | +| ir.cpp:1224:13:1224:13 | Address | &:r1224_2 | +| ir.cpp:1224:17:1224:17 | StoreValue | r1224_1 | | ir.cpp:1228:13:1228:13 | Address | &:r1228_2 | -| ir.cpp:1228:13:1228:13 | Load | m1227_1 | -| ir.cpp:1228:13:1228:13 | StoreValue | r1228_3 | -| ir.cpp:1231:5:1231:19 | Address | &:r1231_7 | -| ir.cpp:1231:5:1231:19 | ChiPartial | partial:m1231_3 | -| ir.cpp:1231:5:1231:19 | ChiTotal | total:m1231_2 | -| ir.cpp:1231:5:1231:19 | Load | m1237_15 | -| ir.cpp:1231:5:1231:19 | SideEffect | ~m1237_2 | -| ir.cpp:1231:25:1231:25 | Address | &:r1231_5 | -| ir.cpp:1232:16:1232:16 | Address | &:r1232_3 | -| ir.cpp:1232:16:1232:16 | SideEffect | ~m1232_6 | -| ir.cpp:1232:20:1232:20 | ChiPartial | partial:m1232_5 | -| ir.cpp:1232:20:1232:20 | ChiTotal | total:m1232_2 | -| ir.cpp:1232:20:1232:20 | StoreValue | r1232_4 | -| ir.cpp:1233:16:1233:16 | Address | &:r1233_3 | -| ir.cpp:1233:16:1233:16 | SideEffect | ~m1233_6 | -| ir.cpp:1233:20:1233:28 | ChiPartial | partial:m1233_5 | -| ir.cpp:1233:20:1233:28 | ChiTotal | total:m1233_2 | -| ir.cpp:1233:20:1233:28 | StoreValue | r1233_4 | -| ir.cpp:1234:16:1234:16 | Address | &:r1234_1 | -| ir.cpp:1234:16:1234:16 | Address | &:r1234_1 | -| ir.cpp:1234:16:1234:16 | Address | &:r1234_4 | -| ir.cpp:1234:16:1234:16 | ChiPartial | partial:m1234_10 | -| ir.cpp:1234:16:1234:16 | ChiTotal | total:m1234_8 | -| ir.cpp:1234:16:1234:16 | Condition | r1234_2 | -| ir.cpp:1234:16:1234:16 | Load | ~m1231_3 | -| ir.cpp:1234:16:1234:16 | StoreValue | r1234_9 | -| ir.cpp:1234:20:1234:20 | Address | &:r1234_5 | -| ir.cpp:1234:20:1234:20 | ChiPartial | partial:m1234_7 | -| ir.cpp:1234:20:1234:20 | ChiTotal | total:m1231_4 | -| ir.cpp:1234:20:1234:20 | Load | m1231_6 | -| ir.cpp:1234:20:1234:20 | StoreValue | r1234_6 | -| ir.cpp:1237:5:1237:25 | Address | &:r1237_3 | -| ir.cpp:1237:5:1237:25 | Phi | from 0:~m1231_3 | -| ir.cpp:1237:5:1237:25 | Phi | from 0:~m1231_4 | -| ir.cpp:1237:5:1237:25 | Phi | from 1:m1234_7 | -| ir.cpp:1237:5:1237:25 | Phi | from 1:~m1234_11 | -| ir.cpp:1237:12:1237:12 | Address | &:r1237_4 | -| ir.cpp:1237:12:1237:12 | Left | r1237_5 | -| ir.cpp:1237:12:1237:12 | Load | ~m1237_2 | -| ir.cpp:1237:12:1237:16 | Left | r1237_8 | -| ir.cpp:1237:12:1237:20 | Left | r1237_11 | -| ir.cpp:1237:12:1237:24 | StoreValue | r1237_14 | -| ir.cpp:1237:16:1237:16 | Address | &:r1237_6 | -| ir.cpp:1237:16:1237:16 | Load | ~m1237_2 | -| ir.cpp:1237:16:1237:16 | Right | r1237_7 | -| ir.cpp:1237:20:1237:20 | Address | &:r1237_9 | -| ir.cpp:1237:20:1237:20 | Load | m1237_1 | -| ir.cpp:1237:20:1237:20 | Right | r1237_10 | -| ir.cpp:1237:24:1237:24 | Address | &:r1237_12 | -| ir.cpp:1237:24:1237:24 | Load | ~m1237_2 | -| ir.cpp:1237:24:1237:24 | Right | r1237_13 | -| ir.cpp:1240:6:1240:31 | ChiPartial | partial:m1240_3 | -| ir.cpp:1240:6:1240:31 | ChiTotal | total:m1240_2 | -| ir.cpp:1240:6:1240:31 | SideEffect | ~m1244_1 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_5 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_5 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_7 | -| ir.cpp:1240:45:1240:51 | Address | &:r1240_7 | -| ir.cpp:1240:45:1240:51 | Load | m1240_6 | -| ir.cpp:1240:45:1240:51 | SideEffect | m1240_8 | -| ir.cpp:1241:19:1241:19 | Address | &:r1241_1 | -| ir.cpp:1241:19:1241:19 | Address | &:r1241_1 | -| ir.cpp:1241:19:1241:19 | Address | &:r1241_4 | -| ir.cpp:1241:19:1241:19 | Arg(this) | this:r1241_4 | -| ir.cpp:1241:19:1241:19 | ChiPartial | partial:m1241_6 | -| ir.cpp:1241:19:1241:19 | ChiTotal | total:m0_6 | -| ir.cpp:1241:19:1241:19 | Condition | r1241_2 | -| ir.cpp:1241:19:1241:19 | Load | ~m1240_3 | -| ir.cpp:1241:19:1241:19 | StoreValue | r1241_5 | -| ir.cpp:1242:19:1242:19 | Address | &:r1242_2 | -| ir.cpp:1242:19:1242:19 | Address | &:r1242_2 | -| ir.cpp:1242:19:1242:19 | Address | &:r1242_5 | -| ir.cpp:1242:19:1242:19 | Arg(this) | this:r1242_5 | -| ir.cpp:1242:19:1242:19 | ChiPartial | partial:m1242_16 | -| ir.cpp:1242:19:1242:19 | ChiTotal | total:m1242_14 | -| ir.cpp:1242:19:1242:19 | Condition | r1242_3 | -| ir.cpp:1242:19:1242:19 | Load | ~m1242_1 | -| ir.cpp:1242:19:1242:19 | Phi | from 0:~m1240_4 | -| ir.cpp:1242:19:1242:19 | Phi | from 1:~m1241_7 | -| ir.cpp:1242:19:1242:19 | StoreValue | r1242_15 | -| ir.cpp:1242:20:1242:29 | CallTarget | func:r1242_6 | -| ir.cpp:1242:20:1242:29 | ChiPartial | partial:m1242_10 | -| ir.cpp:1242:20:1242:29 | ChiPartial | partial:m1242_13 | -| ir.cpp:1242:20:1242:29 | ChiTotal | total:m1242_1 | -| ir.cpp:1242:20:1242:29 | ChiTotal | total:m1242_11 | -| ir.cpp:1242:20:1242:29 | SideEffect | ~m1242_1 | -| ir.cpp:1242:21:1242:28 | Address | &:r1242_8 | -| ir.cpp:1242:21:1242:28 | Arg(0) | 0:r1242_8 | -| ir.cpp:1242:21:1242:28 | SideEffect | ~m1240_3 | -| ir.cpp:1242:21:1242:28 | Unary | r1242_7 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_2 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_2 | -| ir.cpp:1243:19:1243:19 | Address | &:r1243_5 | -| ir.cpp:1243:19:1243:19 | Arg(this) | this:r1243_5 | -| ir.cpp:1243:19:1243:19 | ChiPartial | partial:m1243_16 | -| ir.cpp:1243:19:1243:19 | ChiTotal | total:m1243_14 | -| ir.cpp:1243:19:1243:19 | Condition | r1243_3 | -| ir.cpp:1243:19:1243:19 | Load | ~m1243_1 | -| ir.cpp:1243:19:1243:19 | Phi | from 2:~m1242_1 | -| ir.cpp:1243:19:1243:19 | Phi | from 3:~m1242_17 | -| ir.cpp:1243:19:1243:19 | StoreValue | r1243_15 | -| ir.cpp:1243:20:1243:28 | CallTarget | func:r1243_6 | -| ir.cpp:1243:20:1243:28 | ChiPartial | partial:m1243_10 | -| ir.cpp:1243:20:1243:28 | ChiPartial | partial:m1243_13 | -| ir.cpp:1243:20:1243:28 | ChiTotal | total:m1243_1 | -| ir.cpp:1243:20:1243:28 | ChiTotal | total:m1243_11 | -| ir.cpp:1243:20:1243:28 | SideEffect | ~m1243_1 | -| ir.cpp:1243:21:1243:27 | Address | &:r1243_7 | -| ir.cpp:1243:21:1243:27 | Address | &:r1243_8 | -| ir.cpp:1243:21:1243:27 | Arg(0) | 0:r1243_8 | -| ir.cpp:1243:21:1243:27 | Load | m1240_6 | -| ir.cpp:1243:21:1243:27 | SideEffect | ~m1240_8 | -| ir.cpp:1244:1:1244:1 | Phi | from 4:~m1243_1 | -| ir.cpp:1244:1:1244:1 | Phi | from 5:~m1243_17 | -| ir.cpp:1251:6:1251:17 | ChiPartial | partial:m1251_3 | -| ir.cpp:1251:6:1251:17 | ChiTotal | total:m1251_2 | -| ir.cpp:1251:6:1251:17 | SideEffect | m1251_3 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_5 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_5 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_7 | -| ir.cpp:1251:25:1251:26 | Address | &:r1251_7 | -| ir.cpp:1251:25:1251:26 | Load | m1251_6 | -| ir.cpp:1251:25:1251:26 | SideEffect | m1251_8 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_9 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_9 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_11 | -| ir.cpp:1251:35:1251:36 | Address | &:r1251_11 | -| ir.cpp:1251:35:1251:36 | Load | m1251_10 | -| ir.cpp:1251:35:1251:36 | SideEffect | m1251_12 | -| ir.cpp:1252:10:1252:15 | Address | &:r1252_1 | -| ir.cpp:1252:10:1252:15 | Left | r1252_1 | -| ir.cpp:1252:10:1252:15 | Left | r1252_1 | -| ir.cpp:1252:24:1252:27 | Address | &:r1252_4 | -| ir.cpp:1252:24:1252:27 | Address | &:r1252_9 | -| ir.cpp:1252:24:1252:27 | ChiPartial | partial:m1252_11 | -| ir.cpp:1252:24:1252:27 | ChiTotal | total:m1252_7 | -| ir.cpp:1252:24:1252:27 | Right | r1252_3 | -| ir.cpp:1252:24:1252:27 | Right | r1252_8 | -| ir.cpp:1252:24:1252:27 | StoreValue | r1252_10 | -| ir.cpp:1252:26:1252:26 | ChiPartial | partial:m1252_6 | -| ir.cpp:1252:26:1252:26 | ChiTotal | total:m1252_2 | -| ir.cpp:1252:26:1252:26 | StoreValue | r1252_5 | -| ir.cpp:1254:5:1254:10 | CallTarget | func:r1254_1 | -| ir.cpp:1254:12:1254:17 | Address | &:r1254_3 | -| ir.cpp:1254:12:1254:17 | Arg(0) | 0:r1254_3 | -| ir.cpp:1254:12:1254:17 | ChiPartial | partial:m1254_9 | -| ir.cpp:1254:12:1254:17 | ChiTotal | total:m1252_12 | -| ir.cpp:1254:12:1254:17 | Unary | r1254_2 | -| ir.cpp:1254:20:1254:21 | Address | &:r1254_4 | -| ir.cpp:1254:20:1254:21 | Address | &:r1254_6 | -| ir.cpp:1254:20:1254:21 | Arg(1) | 1:r1254_6 | -| ir.cpp:1254:20:1254:21 | Load | m1251_6 | -| ir.cpp:1254:20:1254:21 | SideEffect | ~m1251_8 | -| ir.cpp:1254:20:1254:21 | Unary | r1254_5 | -| ir.cpp:1255:5:1255:10 | CallTarget | func:r1255_1 | -| ir.cpp:1255:12:1255:17 | Address | &:r1255_3 | -| ir.cpp:1255:12:1255:17 | Address | &:r1255_3 | -| ir.cpp:1255:12:1255:17 | Arg(0) | 0:r1255_3 | -| ir.cpp:1255:12:1255:17 | ChiPartial | partial:m1255_10 | -| ir.cpp:1255:12:1255:17 | ChiTotal | total:m1254_10 | -| ir.cpp:1255:12:1255:17 | SideEffect | ~m1254_10 | -| ir.cpp:1255:12:1255:17 | Unary | r1255_2 | -| ir.cpp:1255:20:1255:21 | Address | &:r1255_4 | -| ir.cpp:1255:20:1255:21 | Address | &:r1255_6 | -| ir.cpp:1255:20:1255:21 | Arg(1) | 1:r1255_6 | -| ir.cpp:1255:20:1255:21 | Load | m1251_10 | -| ir.cpp:1255:20:1255:21 | SideEffect | ~m1251_12 | -| ir.cpp:1255:20:1255:21 | Unary | r1255_5 | -| ir.cpp:1261:17:1261:29 | ChiPartial | partial:m1261_3 | -| ir.cpp:1261:17:1261:29 | ChiTotal | total:m1261_2 | -| ir.cpp:1261:17:1261:29 | SideEffect | m1261_3 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_5 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_5 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_7 | -| ir.cpp:1261:34:1261:34 | Address | &:r1261_7 | -| ir.cpp:1261:34:1261:34 | Load | m1261_6 | -| ir.cpp:1261:34:1261:34 | SideEffect | m1262_7 | -| ir.cpp:1261:41:1261:41 | Address | &:r1261_9 | -| ir.cpp:1262:9:1262:9 | Address | &:r1262_3 | -| ir.cpp:1262:9:1262:9 | Load | m1261_6 | -| ir.cpp:1262:9:1262:9 | Unary | r1262_4 | -| ir.cpp:1262:9:1262:21 | ChiPartial | partial:m1262_6 | -| ir.cpp:1262:9:1262:21 | ChiTotal | total:m1261_8 | -| ir.cpp:1262:12:1262:17 | Address | &:r1262_5 | -| ir.cpp:1262:21:1262:21 | Address | &:r1262_1 | -| ir.cpp:1262:21:1262:21 | Load | m1261_10 | -| ir.cpp:1262:21:1262:21 | StoreValue | r1262_2 | -| ir.cpp:1270:6:1270:33 | ChiPartial | partial:m1270_3 | -| ir.cpp:1270:6:1270:33 | ChiTotal | total:m1270_2 | -| ir.cpp:1270:6:1270:33 | SideEffect | ~m1286_8 | -| ir.cpp:1270:39:1270:45 | Address | &:r1270_5 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_7 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_7 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_9 | -| ir.cpp:1270:51:1270:55 | Address | &:r1270_9 | -| ir.cpp:1270:51:1270:55 | Load | m1270_8 | -| ir.cpp:1270:51:1270:55 | SideEffect | m1281_12 | -| ir.cpp:1271:7:1271:7 | Address | &:r1271_1 | -| ir.cpp:1271:7:1271:7 | Address | &:r1271_1 | -| ir.cpp:1271:7:1271:7 | Arg(this) | this:r1271_1 | -| ir.cpp:1271:7:1271:7 | CallTarget | func:r1271_3 | -| ir.cpp:1271:7:1271:7 | ChiPartial | partial:m1271_5 | -| ir.cpp:1271:7:1271:7 | ChiPartial | partial:m1271_7 | -| ir.cpp:1271:7:1271:7 | ChiTotal | total:m1270_4 | -| ir.cpp:1271:7:1271:7 | ChiTotal | total:m1271_2 | -| ir.cpp:1271:7:1271:7 | SideEffect | ~m1270_4 | -| ir.cpp:1272:7:1272:26 | CallTarget | func:r1272_2 | -| ir.cpp:1272:7:1272:26 | ChiPartial | partial:m1272_5 | -| ir.cpp:1272:7:1272:26 | ChiTotal | total:m1271_6 | -| ir.cpp:1272:7:1272:26 | SideEffect | ~m1271_6 | -| ir.cpp:1272:28:1272:29 | Arg(0) | 0:r1272_3 | -| ir.cpp:1273:5:1273:27 | CallTarget | func:r1273_1 | -| ir.cpp:1273:5:1273:27 | ChiPartial | partial:m1273_4 | -| ir.cpp:1273:5:1273:27 | ChiTotal | total:m1272_6 | -| ir.cpp:1273:5:1273:27 | SideEffect | ~m1272_6 | -| ir.cpp:1273:29:1273:30 | Arg(0) | 0:r1273_2 | -| ir.cpp:1275:7:1275:7 | Address | &:r1275_1 | -| ir.cpp:1276:7:1276:19 | CallTarget | func:r1276_2 | -| ir.cpp:1276:7:1276:19 | ChiPartial | partial:m1276_8 | -| ir.cpp:1276:7:1276:19 | ChiTotal | total:m1273_5 | -| ir.cpp:1276:7:1276:19 | SideEffect | ~m1273_5 | -| ir.cpp:1276:21:1276:22 | Address | &:r1276_4 | -| ir.cpp:1276:21:1276:22 | Address | &:r1276_4 | -| ir.cpp:1276:21:1276:22 | Arg(0) | 0:r1276_4 | -| ir.cpp:1276:21:1276:22 | ChiPartial | partial:m1276_11 | -| ir.cpp:1276:21:1276:22 | ChiTotal | total:m1275_2 | -| ir.cpp:1276:21:1276:22 | SideEffect | ~m1275_2 | -| ir.cpp:1276:22:1276:22 | Unary | r1276_3 | -| ir.cpp:1276:25:1276:31 | Address | &:r1276_5 | -| ir.cpp:1276:25:1276:31 | Arg(1) | 1:r1276_6 | -| ir.cpp:1276:25:1276:31 | Load | m1270_6 | -| ir.cpp:1277:5:1277:20 | CallTarget | func:r1277_1 | -| ir.cpp:1277:5:1277:20 | ChiPartial | partial:m1277_7 | -| ir.cpp:1277:5:1277:20 | ChiTotal | total:m1276_9 | -| ir.cpp:1277:5:1277:20 | SideEffect | ~m1276_9 | -| ir.cpp:1277:22:1277:23 | Address | &:r1277_3 | -| ir.cpp:1277:22:1277:23 | Address | &:r1277_3 | -| ir.cpp:1277:22:1277:23 | Arg(0) | 0:r1277_3 | -| ir.cpp:1277:22:1277:23 | ChiPartial | partial:m1277_10 | -| ir.cpp:1277:22:1277:23 | ChiTotal | total:m1276_12 | -| ir.cpp:1277:22:1277:23 | SideEffect | ~m1276_12 | -| ir.cpp:1277:23:1277:23 | Unary | r1277_2 | -| ir.cpp:1277:26:1277:32 | Address | &:r1277_4 | -| ir.cpp:1277:26:1277:32 | Arg(1) | 1:r1277_5 | -| ir.cpp:1277:26:1277:32 | Load | m1270_6 | -| ir.cpp:1279:7:1279:7 | Unary | r1279_1 | -| ir.cpp:1279:11:1279:23 | CallTarget | func:r1279_3 | -| ir.cpp:1279:11:1279:23 | ChiPartial | partial:m1279_11 | -| ir.cpp:1279:11:1279:23 | ChiTotal | total:m1277_8 | -| ir.cpp:1279:11:1279:23 | SideEffect | ~m1277_8 | -| ir.cpp:1279:25:1279:29 | Address | &:r1279_4 | -| ir.cpp:1279:25:1279:29 | Address | &:r1279_5 | -| ir.cpp:1279:25:1279:29 | Address | &:r1279_5 | -| ir.cpp:1279:25:1279:29 | Arg(0) | 0:r1279_5 | -| ir.cpp:1279:25:1279:29 | ChiPartial | partial:m1279_14 | -| ir.cpp:1279:25:1279:29 | ChiTotal | total:m1270_10 | -| ir.cpp:1279:25:1279:29 | Load | m1270_8 | -| ir.cpp:1279:25:1279:29 | SideEffect | ~m1270_10 | -| ir.cpp:1279:32:1279:38 | Address | &:r1279_6 | -| ir.cpp:1279:32:1279:38 | Left | r1279_7 | -| ir.cpp:1279:32:1279:38 | Load | m1270_6 | -| ir.cpp:1279:32:1279:42 | Arg(1) | 1:r1279_9 | -| ir.cpp:1279:42:1279:42 | Right | r1279_8 | -| ir.cpp:1280:7:1280:11 | Address | &:r1280_1 | -| ir.cpp:1280:7:1280:11 | Load | m1270_8 | -| ir.cpp:1280:7:1280:11 | Unary | r1280_2 | -| ir.cpp:1280:14:1280:26 | CallTarget | func:r1280_4 | -| ir.cpp:1280:14:1280:26 | ChiPartial | partial:m1280_9 | -| ir.cpp:1280:14:1280:26 | ChiTotal | total:m1279_12 | -| ir.cpp:1280:14:1280:26 | SideEffect | ~m1279_12 | -| ir.cpp:1280:28:1280:29 | Address | &:r1280_6 | -| ir.cpp:1280:28:1280:29 | Address | &:r1280_6 | -| ir.cpp:1280:28:1280:29 | Arg(0) | 0:r1280_6 | -| ir.cpp:1280:28:1280:29 | ChiPartial | partial:m1280_12 | -| ir.cpp:1280:28:1280:29 | ChiTotal | total:m1277_11 | -| ir.cpp:1280:28:1280:29 | SideEffect | ~m1277_11 | -| ir.cpp:1280:29:1280:29 | Unary | r1280_5 | -| ir.cpp:1280:32:1280:33 | Arg(1) | 1:r1280_7 | -| ir.cpp:1281:5:1281:9 | Address | &:r1281_1 | -| ir.cpp:1281:5:1281:9 | Load | m1270_8 | -| ir.cpp:1281:12:1281:24 | CallTarget | func:r1281_3 | -| ir.cpp:1281:12:1281:24 | ChiPartial | partial:m1281_8 | -| ir.cpp:1281:12:1281:24 | ChiTotal | total:m1280_10 | -| ir.cpp:1281:12:1281:24 | SideEffect | ~m1280_10 | -| ir.cpp:1281:26:1281:30 | Address | &:r1281_4 | -| ir.cpp:1281:26:1281:30 | Address | &:r1281_5 | -| ir.cpp:1281:26:1281:30 | Address | &:r1281_5 | -| ir.cpp:1281:26:1281:30 | Arg(0) | 0:r1281_5 | -| ir.cpp:1281:26:1281:30 | ChiPartial | partial:m1281_11 | -| ir.cpp:1281:26:1281:30 | ChiTotal | total:m1279_15 | -| ir.cpp:1281:26:1281:30 | Load | m1270_8 | -| ir.cpp:1281:26:1281:30 | SideEffect | ~m1279_15 | -| ir.cpp:1281:33:1281:34 | Arg(1) | 1:r1281_6 | -| ir.cpp:1283:7:1283:31 | CallTarget | func:r1283_2 | -| ir.cpp:1283:7:1283:31 | ChiPartial | partial:m1283_4 | -| ir.cpp:1283:7:1283:31 | ChiTotal | total:m1281_9 | -| ir.cpp:1283:7:1283:31 | SideEffect | ~m1281_9 | -| ir.cpp:1284:5:1284:32 | CallTarget | func:r1284_1 | -| ir.cpp:1284:5:1284:32 | ChiPartial | partial:m1284_3 | -| ir.cpp:1284:5:1284:32 | ChiTotal | total:m1283_5 | -| ir.cpp:1284:5:1284:32 | SideEffect | ~m1283_5 | -| ir.cpp:1286:5:1286:20 | CallTarget | func:r1286_1 | -| ir.cpp:1286:5:1286:20 | ChiPartial | partial:m1286_3 | -| ir.cpp:1286:5:1286:20 | ChiTotal | total:m1284_4 | -| ir.cpp:1286:5:1286:20 | SideEffect | ~m1284_4 | -| ir.cpp:1286:25:1286:49 | CallTarget | func:r1286_5 | -| ir.cpp:1286:25:1286:49 | ChiPartial | partial:m1286_7 | -| ir.cpp:1286:25:1286:49 | ChiTotal | total:m1286_4 | -| ir.cpp:1286:25:1286:49 | SideEffect | ~m1286_4 | -| ir.cpp:1289:5:1289:22 | Address | &:r1289_10 | -| ir.cpp:1289:5:1289:22 | ChiPartial | partial:m1289_3 | -| ir.cpp:1289:5:1289:22 | ChiTotal | total:m1289_2 | -| ir.cpp:1289:5:1289:22 | Load | m1289_9 | -| ir.cpp:1289:5:1289:22 | Phi | from 2:m1291_4 | -| ir.cpp:1289:5:1289:22 | Phi | from 3:m1293_2 | -| ir.cpp:1289:5:1289:22 | SideEffect | m1289_3 | -| ir.cpp:1289:29:1289:29 | Address | &:r1289_5 | -| ir.cpp:1289:36:1289:36 | Address | &:r1289_7 | -| ir.cpp:1290:9:1290:9 | Address | &:r1290_1 | -| ir.cpp:1290:9:1290:9 | Condition | r1290_2 | -| ir.cpp:1290:9:1290:9 | Load | m1289_6 | -| ir.cpp:1291:9:1291:17 | Address | &:r1291_1 | -| ir.cpp:1291:16:1291:16 | Address | &:r1291_2 | -| ir.cpp:1291:16:1291:16 | Load | m1289_8 | -| ir.cpp:1291:16:1291:16 | StoreValue | r1291_3 | -| ir.cpp:1293:1:1293:1 | Address | &:r1293_1 | -| ir.cpp:1295:6:1295:15 | ChiPartial | partial:m1295_3 | -| ir.cpp:1295:6:1295:15 | ChiTotal | total:m1295_2 | -| ir.cpp:1295:6:1295:15 | SideEffect | ~m1296_8 | -| ir.cpp:1295:21:1295:21 | Address | &:r1295_5 | -| ir.cpp:1295:28:1295:28 | Address | &:r1295_7 | -| ir.cpp:1296:12:1296:21 | CallTarget | func:r1296_1 | -| ir.cpp:1296:12:1296:21 | ChiPartial | partial:m1296_7 | -| ir.cpp:1296:12:1296:21 | ChiTotal | total:m1295_4 | -| ir.cpp:1296:12:1296:21 | SideEffect | ~m1295_4 | -| ir.cpp:1296:23:1296:23 | Address | &:r1296_2 | -| ir.cpp:1296:23:1296:23 | Arg(0) | 0:r1296_3 | -| ir.cpp:1296:23:1296:23 | Load | m1295_6 | -| ir.cpp:1296:26:1296:26 | Address | &:r1296_4 | -| ir.cpp:1296:26:1296:26 | Arg(1) | 1:r1296_5 | -| ir.cpp:1296:26:1296:26 | Load | m1295_8 | -| ir.cpp:1299:6:1299:25 | ChiPartial | partial:m1299_3 | -| ir.cpp:1299:6:1299:25 | ChiTotal | total:m1299_2 | -| ir.cpp:1299:6:1299:25 | SideEffect | m1299_3 | -| ir.cpp:1299:32:1299:32 | Address | &:r1299_5 | -| ir.cpp:1299:39:1299:39 | Address | &:r1299_7 | -| ir.cpp:1299:47:1299:47 | Address | &:r1299_9 | -| ir.cpp:1300:9:1300:9 | Address | &:r1300_1 | -| ir.cpp:1300:13:1300:13 | Address | &:r1300_2 | -| ir.cpp:1300:13:1300:13 | Load | m1299_8 | -| ir.cpp:1300:13:1300:13 | StoreValue | r1300_3 | -| ir.cpp:1301:5:1301:5 | Address | &:r1301_7 | -| ir.cpp:1301:9:1301:9 | Address | &:r1301_1 | -| ir.cpp:1301:9:1301:9 | Condition | r1301_2 | -| ir.cpp:1301:9:1301:9 | Load | m1299_6 | -| ir.cpp:1301:9:1301:9 | StoreValue | r1301_2 | -| ir.cpp:1301:9:1301:14 | Address | &:r1301_5 | -| ir.cpp:1301:9:1301:14 | Address | &:r1301_9 | -| ir.cpp:1301:9:1301:14 | Address | &:r1301_13 | -| ir.cpp:1301:9:1301:14 | Load | m1301_4 | -| ir.cpp:1301:9:1301:14 | Phi | from 2:m1301_10 | -| ir.cpp:1301:9:1301:14 | Phi | from 3:m1301_14 | -| ir.cpp:1301:9:1301:14 | StoreValue | r1301_6 | -| ir.cpp:1301:14:1301:14 | Address | &:r1301_11 | -| ir.cpp:1301:14:1301:14 | Load | m1299_8 | -| ir.cpp:1301:14:1301:14 | StoreValue | r1301_12 | -| ir.cpp:1302:5:1302:5 | Address | &:r1302_8 | +| ir.cpp:1228:17:1228:17 | StoreValue | r1228_1 | +| ir.cpp:1229:5:1229:5 | Phi | from 1:m1220_3 | +| ir.cpp:1229:5:1229:5 | Phi | from 2:m1224_3 | +| ir.cpp:1229:5:1229:5 | Phi | from 3:m1228_3 | +| ir.cpp:1230:9:1230:9 | Address | &:r1230_1 | +| ir.cpp:1230:13:1230:13 | Address | &:r1230_2 | +| ir.cpp:1230:13:1230:13 | Load | m1229_1 | +| ir.cpp:1230:13:1230:13 | StoreValue | r1230_3 | +| ir.cpp:1233:5:1233:19 | Address | &:r1233_7 | +| ir.cpp:1233:5:1233:19 | ChiPartial | partial:m1233_3 | +| ir.cpp:1233:5:1233:19 | ChiTotal | total:m1233_2 | +| ir.cpp:1233:5:1233:19 | Load | m1239_15 | +| ir.cpp:1233:5:1233:19 | SideEffect | ~m1239_2 | +| ir.cpp:1233:25:1233:25 | Address | &:r1233_5 | +| ir.cpp:1234:16:1234:16 | Address | &:r1234_3 | +| ir.cpp:1234:16:1234:16 | SideEffect | ~m1234_6 | +| ir.cpp:1234:20:1234:20 | ChiPartial | partial:m1234_5 | +| ir.cpp:1234:20:1234:20 | ChiTotal | total:m1234_2 | +| ir.cpp:1234:20:1234:20 | StoreValue | r1234_4 | +| ir.cpp:1235:16:1235:16 | Address | &:r1235_3 | +| ir.cpp:1235:16:1235:16 | SideEffect | ~m1235_6 | +| ir.cpp:1235:20:1235:28 | ChiPartial | partial:m1235_5 | +| ir.cpp:1235:20:1235:28 | ChiTotal | total:m1235_2 | +| ir.cpp:1235:20:1235:28 | StoreValue | r1235_4 | +| ir.cpp:1236:16:1236:16 | Address | &:r1236_1 | +| ir.cpp:1236:16:1236:16 | Address | &:r1236_1 | +| ir.cpp:1236:16:1236:16 | Address | &:r1236_4 | +| ir.cpp:1236:16:1236:16 | ChiPartial | partial:m1236_10 | +| ir.cpp:1236:16:1236:16 | ChiTotal | total:m1236_8 | +| ir.cpp:1236:16:1236:16 | Condition | r1236_2 | +| ir.cpp:1236:16:1236:16 | Load | ~m1233_3 | +| ir.cpp:1236:16:1236:16 | StoreValue | r1236_9 | +| ir.cpp:1236:20:1236:20 | Address | &:r1236_5 | +| ir.cpp:1236:20:1236:20 | ChiPartial | partial:m1236_7 | +| ir.cpp:1236:20:1236:20 | ChiTotal | total:m1233_4 | +| ir.cpp:1236:20:1236:20 | Load | m1233_6 | +| ir.cpp:1236:20:1236:20 | StoreValue | r1236_6 | +| ir.cpp:1239:5:1239:25 | Address | &:r1239_3 | +| ir.cpp:1239:5:1239:25 | Phi | from 0:~m1233_3 | +| ir.cpp:1239:5:1239:25 | Phi | from 0:~m1233_4 | +| ir.cpp:1239:5:1239:25 | Phi | from 1:m1236_7 | +| ir.cpp:1239:5:1239:25 | Phi | from 1:~m1236_11 | +| ir.cpp:1239:12:1239:12 | Address | &:r1239_4 | +| ir.cpp:1239:12:1239:12 | Left | r1239_5 | +| ir.cpp:1239:12:1239:12 | Load | ~m1239_2 | +| ir.cpp:1239:12:1239:16 | Left | r1239_8 | +| ir.cpp:1239:12:1239:20 | Left | r1239_11 | +| ir.cpp:1239:12:1239:24 | StoreValue | r1239_14 | +| ir.cpp:1239:16:1239:16 | Address | &:r1239_6 | +| ir.cpp:1239:16:1239:16 | Load | ~m1239_2 | +| ir.cpp:1239:16:1239:16 | Right | r1239_7 | +| ir.cpp:1239:20:1239:20 | Address | &:r1239_9 | +| ir.cpp:1239:20:1239:20 | Load | m1239_1 | +| ir.cpp:1239:20:1239:20 | Right | r1239_10 | +| ir.cpp:1239:24:1239:24 | Address | &:r1239_12 | +| ir.cpp:1239:24:1239:24 | Load | ~m1239_2 | +| ir.cpp:1239:24:1239:24 | Right | r1239_13 | +| ir.cpp:1242:6:1242:31 | ChiPartial | partial:m1242_3 | +| ir.cpp:1242:6:1242:31 | ChiTotal | total:m1242_2 | +| ir.cpp:1242:6:1242:31 | SideEffect | ~m1246_1 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_5 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_5 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_7 | +| ir.cpp:1242:45:1242:51 | Address | &:r1242_7 | +| ir.cpp:1242:45:1242:51 | Load | m1242_6 | +| ir.cpp:1242:45:1242:51 | SideEffect | m1242_8 | +| ir.cpp:1243:19:1243:19 | Address | &:r1243_1 | +| ir.cpp:1243:19:1243:19 | Address | &:r1243_1 | +| ir.cpp:1243:19:1243:19 | Address | &:r1243_4 | +| ir.cpp:1243:19:1243:19 | Arg(this) | this:r1243_4 | +| ir.cpp:1243:19:1243:19 | ChiPartial | partial:m1243_6 | +| ir.cpp:1243:19:1243:19 | ChiTotal | total:m0_6 | +| ir.cpp:1243:19:1243:19 | Condition | r1243_2 | +| ir.cpp:1243:19:1243:19 | Load | ~m1242_3 | +| ir.cpp:1243:19:1243:19 | StoreValue | r1243_5 | +| ir.cpp:1244:19:1244:19 | Address | &:r1244_2 | +| ir.cpp:1244:19:1244:19 | Address | &:r1244_2 | +| ir.cpp:1244:19:1244:19 | Address | &:r1244_5 | +| ir.cpp:1244:19:1244:19 | Arg(this) | this:r1244_5 | +| ir.cpp:1244:19:1244:19 | ChiPartial | partial:m1244_16 | +| ir.cpp:1244:19:1244:19 | ChiTotal | total:m1244_14 | +| ir.cpp:1244:19:1244:19 | Condition | r1244_3 | +| ir.cpp:1244:19:1244:19 | Load | ~m1244_1 | +| ir.cpp:1244:19:1244:19 | Phi | from 0:~m1242_4 | +| ir.cpp:1244:19:1244:19 | Phi | from 1:~m1243_7 | +| ir.cpp:1244:19:1244:19 | StoreValue | r1244_15 | +| ir.cpp:1244:20:1244:29 | CallTarget | func:r1244_6 | +| ir.cpp:1244:20:1244:29 | ChiPartial | partial:m1244_10 | +| ir.cpp:1244:20:1244:29 | ChiPartial | partial:m1244_13 | +| ir.cpp:1244:20:1244:29 | ChiTotal | total:m1244_1 | +| ir.cpp:1244:20:1244:29 | ChiTotal | total:m1244_11 | +| ir.cpp:1244:20:1244:29 | SideEffect | ~m1244_1 | +| ir.cpp:1244:21:1244:28 | Address | &:r1244_8 | +| ir.cpp:1244:21:1244:28 | Arg(0) | 0:r1244_8 | +| ir.cpp:1244:21:1244:28 | SideEffect | ~m1242_3 | +| ir.cpp:1244:21:1244:28 | Unary | r1244_7 | +| ir.cpp:1245:19:1245:19 | Address | &:r1245_2 | +| ir.cpp:1245:19:1245:19 | Address | &:r1245_2 | +| ir.cpp:1245:19:1245:19 | Address | &:r1245_5 | +| ir.cpp:1245:19:1245:19 | Arg(this) | this:r1245_5 | +| ir.cpp:1245:19:1245:19 | ChiPartial | partial:m1245_16 | +| ir.cpp:1245:19:1245:19 | ChiTotal | total:m1245_14 | +| ir.cpp:1245:19:1245:19 | Condition | r1245_3 | +| ir.cpp:1245:19:1245:19 | Load | ~m1245_1 | +| ir.cpp:1245:19:1245:19 | Phi | from 2:~m1244_1 | +| ir.cpp:1245:19:1245:19 | Phi | from 3:~m1244_17 | +| ir.cpp:1245:19:1245:19 | StoreValue | r1245_15 | +| ir.cpp:1245:20:1245:28 | CallTarget | func:r1245_6 | +| ir.cpp:1245:20:1245:28 | ChiPartial | partial:m1245_10 | +| ir.cpp:1245:20:1245:28 | ChiPartial | partial:m1245_13 | +| ir.cpp:1245:20:1245:28 | ChiTotal | total:m1245_1 | +| ir.cpp:1245:20:1245:28 | ChiTotal | total:m1245_11 | +| ir.cpp:1245:20:1245:28 | SideEffect | ~m1245_1 | +| ir.cpp:1245:21:1245:27 | Address | &:r1245_7 | +| ir.cpp:1245:21:1245:27 | Address | &:r1245_8 | +| ir.cpp:1245:21:1245:27 | Arg(0) | 0:r1245_8 | +| ir.cpp:1245:21:1245:27 | Load | m1242_6 | +| ir.cpp:1245:21:1245:27 | SideEffect | ~m1242_8 | +| ir.cpp:1246:1:1246:1 | Phi | from 4:~m1245_1 | +| ir.cpp:1246:1:1246:1 | Phi | from 5:~m1245_17 | +| ir.cpp:1253:6:1253:17 | ChiPartial | partial:m1253_3 | +| ir.cpp:1253:6:1253:17 | ChiTotal | total:m1253_2 | +| ir.cpp:1253:6:1253:17 | SideEffect | m1253_3 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_5 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_5 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_7 | +| ir.cpp:1253:25:1253:26 | Address | &:r1253_7 | +| ir.cpp:1253:25:1253:26 | Load | m1253_6 | +| ir.cpp:1253:25:1253:26 | SideEffect | m1253_8 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_9 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_9 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_11 | +| ir.cpp:1253:35:1253:36 | Address | &:r1253_11 | +| ir.cpp:1253:35:1253:36 | Load | m1253_10 | +| ir.cpp:1253:35:1253:36 | SideEffect | m1253_12 | +| ir.cpp:1254:10:1254:15 | Address | &:r1254_1 | +| ir.cpp:1254:10:1254:15 | Left | r1254_1 | +| ir.cpp:1254:10:1254:15 | Left | r1254_1 | +| ir.cpp:1254:24:1254:27 | Address | &:r1254_4 | +| ir.cpp:1254:24:1254:27 | Address | &:r1254_9 | +| ir.cpp:1254:24:1254:27 | ChiPartial | partial:m1254_11 | +| ir.cpp:1254:24:1254:27 | ChiTotal | total:m1254_7 | +| ir.cpp:1254:24:1254:27 | Right | r1254_3 | +| ir.cpp:1254:24:1254:27 | Right | r1254_8 | +| ir.cpp:1254:24:1254:27 | StoreValue | r1254_10 | +| ir.cpp:1254:26:1254:26 | ChiPartial | partial:m1254_6 | +| ir.cpp:1254:26:1254:26 | ChiTotal | total:m1254_2 | +| ir.cpp:1254:26:1254:26 | StoreValue | r1254_5 | +| ir.cpp:1256:5:1256:10 | CallTarget | func:r1256_1 | +| ir.cpp:1256:12:1256:17 | Address | &:r1256_3 | +| ir.cpp:1256:12:1256:17 | Arg(0) | 0:r1256_3 | +| ir.cpp:1256:12:1256:17 | ChiPartial | partial:m1256_9 | +| ir.cpp:1256:12:1256:17 | ChiTotal | total:m1254_12 | +| ir.cpp:1256:12:1256:17 | Unary | r1256_2 | +| ir.cpp:1256:20:1256:21 | Address | &:r1256_4 | +| ir.cpp:1256:20:1256:21 | Address | &:r1256_6 | +| ir.cpp:1256:20:1256:21 | Arg(1) | 1:r1256_6 | +| ir.cpp:1256:20:1256:21 | Load | m1253_6 | +| ir.cpp:1256:20:1256:21 | SideEffect | ~m1253_8 | +| ir.cpp:1256:20:1256:21 | Unary | r1256_5 | +| ir.cpp:1257:5:1257:10 | CallTarget | func:r1257_1 | +| ir.cpp:1257:12:1257:17 | Address | &:r1257_3 | +| ir.cpp:1257:12:1257:17 | Address | &:r1257_3 | +| ir.cpp:1257:12:1257:17 | Arg(0) | 0:r1257_3 | +| ir.cpp:1257:12:1257:17 | ChiPartial | partial:m1257_10 | +| ir.cpp:1257:12:1257:17 | ChiTotal | total:m1256_10 | +| ir.cpp:1257:12:1257:17 | SideEffect | ~m1256_10 | +| ir.cpp:1257:12:1257:17 | Unary | r1257_2 | +| ir.cpp:1257:20:1257:21 | Address | &:r1257_4 | +| ir.cpp:1257:20:1257:21 | Address | &:r1257_6 | +| ir.cpp:1257:20:1257:21 | Arg(1) | 1:r1257_6 | +| ir.cpp:1257:20:1257:21 | Load | m1253_10 | +| ir.cpp:1257:20:1257:21 | SideEffect | ~m1253_12 | +| ir.cpp:1257:20:1257:21 | Unary | r1257_5 | +| ir.cpp:1263:17:1263:29 | ChiPartial | partial:m1263_3 | +| ir.cpp:1263:17:1263:29 | ChiTotal | total:m1263_2 | +| ir.cpp:1263:17:1263:29 | SideEffect | m1263_3 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_5 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_5 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_7 | +| ir.cpp:1263:34:1263:34 | Address | &:r1263_7 | +| ir.cpp:1263:34:1263:34 | Load | m1263_6 | +| ir.cpp:1263:34:1263:34 | SideEffect | m1264_7 | +| ir.cpp:1263:41:1263:41 | Address | &:r1263_9 | +| ir.cpp:1264:9:1264:9 | Address | &:r1264_3 | +| ir.cpp:1264:9:1264:9 | Load | m1263_6 | +| ir.cpp:1264:9:1264:9 | Unary | r1264_4 | +| ir.cpp:1264:9:1264:21 | ChiPartial | partial:m1264_6 | +| ir.cpp:1264:9:1264:21 | ChiTotal | total:m1263_8 | +| ir.cpp:1264:12:1264:17 | Address | &:r1264_5 | +| ir.cpp:1264:21:1264:21 | Address | &:r1264_1 | +| ir.cpp:1264:21:1264:21 | Load | m1263_10 | +| ir.cpp:1264:21:1264:21 | StoreValue | r1264_2 | +| ir.cpp:1272:6:1272:33 | ChiPartial | partial:m1272_3 | +| ir.cpp:1272:6:1272:33 | ChiTotal | total:m1272_2 | +| ir.cpp:1272:6:1272:33 | SideEffect | ~m1288_8 | +| ir.cpp:1272:39:1272:45 | Address | &:r1272_5 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_7 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_7 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_9 | +| ir.cpp:1272:51:1272:55 | Address | &:r1272_9 | +| ir.cpp:1272:51:1272:55 | Load | m1272_8 | +| ir.cpp:1272:51:1272:55 | SideEffect | m1283_12 | +| ir.cpp:1273:7:1273:7 | Address | &:r1273_1 | +| ir.cpp:1273:7:1273:7 | Address | &:r1273_1 | +| ir.cpp:1273:7:1273:7 | Arg(this) | this:r1273_1 | +| ir.cpp:1273:7:1273:7 | CallTarget | func:r1273_3 | +| ir.cpp:1273:7:1273:7 | ChiPartial | partial:m1273_5 | +| ir.cpp:1273:7:1273:7 | ChiPartial | partial:m1273_7 | +| ir.cpp:1273:7:1273:7 | ChiTotal | total:m1272_4 | +| ir.cpp:1273:7:1273:7 | ChiTotal | total:m1273_2 | +| ir.cpp:1273:7:1273:7 | SideEffect | ~m1272_4 | +| ir.cpp:1274:7:1274:26 | CallTarget | func:r1274_2 | +| ir.cpp:1274:7:1274:26 | ChiPartial | partial:m1274_5 | +| ir.cpp:1274:7:1274:26 | ChiTotal | total:m1273_6 | +| ir.cpp:1274:7:1274:26 | SideEffect | ~m1273_6 | +| ir.cpp:1274:28:1274:29 | Arg(0) | 0:r1274_3 | +| ir.cpp:1275:5:1275:27 | CallTarget | func:r1275_1 | +| ir.cpp:1275:5:1275:27 | ChiPartial | partial:m1275_4 | +| ir.cpp:1275:5:1275:27 | ChiTotal | total:m1274_6 | +| ir.cpp:1275:5:1275:27 | SideEffect | ~m1274_6 | +| ir.cpp:1275:29:1275:30 | Arg(0) | 0:r1275_2 | +| ir.cpp:1277:7:1277:7 | Address | &:r1277_1 | +| ir.cpp:1278:7:1278:19 | CallTarget | func:r1278_2 | +| ir.cpp:1278:7:1278:19 | ChiPartial | partial:m1278_8 | +| ir.cpp:1278:7:1278:19 | ChiTotal | total:m1275_5 | +| ir.cpp:1278:7:1278:19 | SideEffect | ~m1275_5 | +| ir.cpp:1278:21:1278:22 | Address | &:r1278_4 | +| ir.cpp:1278:21:1278:22 | Address | &:r1278_4 | +| ir.cpp:1278:21:1278:22 | Arg(0) | 0:r1278_4 | +| ir.cpp:1278:21:1278:22 | ChiPartial | partial:m1278_11 | +| ir.cpp:1278:21:1278:22 | ChiTotal | total:m1277_2 | +| ir.cpp:1278:21:1278:22 | SideEffect | ~m1277_2 | +| ir.cpp:1278:22:1278:22 | Unary | r1278_3 | +| ir.cpp:1278:25:1278:31 | Address | &:r1278_5 | +| ir.cpp:1278:25:1278:31 | Arg(1) | 1:r1278_6 | +| ir.cpp:1278:25:1278:31 | Load | m1272_6 | +| ir.cpp:1279:5:1279:20 | CallTarget | func:r1279_1 | +| ir.cpp:1279:5:1279:20 | ChiPartial | partial:m1279_7 | +| ir.cpp:1279:5:1279:20 | ChiTotal | total:m1278_9 | +| ir.cpp:1279:5:1279:20 | SideEffect | ~m1278_9 | +| ir.cpp:1279:22:1279:23 | Address | &:r1279_3 | +| ir.cpp:1279:22:1279:23 | Address | &:r1279_3 | +| ir.cpp:1279:22:1279:23 | Arg(0) | 0:r1279_3 | +| ir.cpp:1279:22:1279:23 | ChiPartial | partial:m1279_10 | +| ir.cpp:1279:22:1279:23 | ChiTotal | total:m1278_12 | +| ir.cpp:1279:22:1279:23 | SideEffect | ~m1278_12 | +| ir.cpp:1279:23:1279:23 | Unary | r1279_2 | +| ir.cpp:1279:26:1279:32 | Address | &:r1279_4 | +| ir.cpp:1279:26:1279:32 | Arg(1) | 1:r1279_5 | +| ir.cpp:1279:26:1279:32 | Load | m1272_6 | +| ir.cpp:1281:7:1281:7 | Unary | r1281_1 | +| ir.cpp:1281:11:1281:23 | CallTarget | func:r1281_3 | +| ir.cpp:1281:11:1281:23 | ChiPartial | partial:m1281_11 | +| ir.cpp:1281:11:1281:23 | ChiTotal | total:m1279_8 | +| ir.cpp:1281:11:1281:23 | SideEffect | ~m1279_8 | +| ir.cpp:1281:25:1281:29 | Address | &:r1281_4 | +| ir.cpp:1281:25:1281:29 | Address | &:r1281_5 | +| ir.cpp:1281:25:1281:29 | Address | &:r1281_5 | +| ir.cpp:1281:25:1281:29 | Arg(0) | 0:r1281_5 | +| ir.cpp:1281:25:1281:29 | ChiPartial | partial:m1281_14 | +| ir.cpp:1281:25:1281:29 | ChiTotal | total:m1272_10 | +| ir.cpp:1281:25:1281:29 | Load | m1272_8 | +| ir.cpp:1281:25:1281:29 | SideEffect | ~m1272_10 | +| ir.cpp:1281:32:1281:38 | Address | &:r1281_6 | +| ir.cpp:1281:32:1281:38 | Left | r1281_7 | +| ir.cpp:1281:32:1281:38 | Load | m1272_6 | +| ir.cpp:1281:32:1281:42 | Arg(1) | 1:r1281_9 | +| ir.cpp:1281:42:1281:42 | Right | r1281_8 | +| ir.cpp:1282:7:1282:11 | Address | &:r1282_1 | +| ir.cpp:1282:7:1282:11 | Load | m1272_8 | +| ir.cpp:1282:7:1282:11 | Unary | r1282_2 | +| ir.cpp:1282:14:1282:26 | CallTarget | func:r1282_4 | +| ir.cpp:1282:14:1282:26 | ChiPartial | partial:m1282_9 | +| ir.cpp:1282:14:1282:26 | ChiTotal | total:m1281_12 | +| ir.cpp:1282:14:1282:26 | SideEffect | ~m1281_12 | +| ir.cpp:1282:28:1282:29 | Address | &:r1282_6 | +| ir.cpp:1282:28:1282:29 | Address | &:r1282_6 | +| ir.cpp:1282:28:1282:29 | Arg(0) | 0:r1282_6 | +| ir.cpp:1282:28:1282:29 | ChiPartial | partial:m1282_12 | +| ir.cpp:1282:28:1282:29 | ChiTotal | total:m1279_11 | +| ir.cpp:1282:28:1282:29 | SideEffect | ~m1279_11 | +| ir.cpp:1282:29:1282:29 | Unary | r1282_5 | +| ir.cpp:1282:32:1282:33 | Arg(1) | 1:r1282_7 | +| ir.cpp:1283:5:1283:9 | Address | &:r1283_1 | +| ir.cpp:1283:5:1283:9 | Load | m1272_8 | +| ir.cpp:1283:12:1283:24 | CallTarget | func:r1283_3 | +| ir.cpp:1283:12:1283:24 | ChiPartial | partial:m1283_8 | +| ir.cpp:1283:12:1283:24 | ChiTotal | total:m1282_10 | +| ir.cpp:1283:12:1283:24 | SideEffect | ~m1282_10 | +| ir.cpp:1283:26:1283:30 | Address | &:r1283_4 | +| ir.cpp:1283:26:1283:30 | Address | &:r1283_5 | +| ir.cpp:1283:26:1283:30 | Address | &:r1283_5 | +| ir.cpp:1283:26:1283:30 | Arg(0) | 0:r1283_5 | +| ir.cpp:1283:26:1283:30 | ChiPartial | partial:m1283_11 | +| ir.cpp:1283:26:1283:30 | ChiTotal | total:m1281_15 | +| ir.cpp:1283:26:1283:30 | Load | m1272_8 | +| ir.cpp:1283:26:1283:30 | SideEffect | ~m1281_15 | +| ir.cpp:1283:33:1283:34 | Arg(1) | 1:r1283_6 | +| ir.cpp:1285:7:1285:31 | CallTarget | func:r1285_2 | +| ir.cpp:1285:7:1285:31 | ChiPartial | partial:m1285_4 | +| ir.cpp:1285:7:1285:31 | ChiTotal | total:m1283_9 | +| ir.cpp:1285:7:1285:31 | SideEffect | ~m1283_9 | +| ir.cpp:1286:5:1286:32 | CallTarget | func:r1286_1 | +| ir.cpp:1286:5:1286:32 | ChiPartial | partial:m1286_3 | +| ir.cpp:1286:5:1286:32 | ChiTotal | total:m1285_5 | +| ir.cpp:1286:5:1286:32 | SideEffect | ~m1285_5 | +| ir.cpp:1288:5:1288:20 | CallTarget | func:r1288_1 | +| ir.cpp:1288:5:1288:20 | ChiPartial | partial:m1288_3 | +| ir.cpp:1288:5:1288:20 | ChiTotal | total:m1286_4 | +| ir.cpp:1288:5:1288:20 | SideEffect | ~m1286_4 | +| ir.cpp:1288:25:1288:49 | CallTarget | func:r1288_5 | +| ir.cpp:1288:25:1288:49 | ChiPartial | partial:m1288_7 | +| ir.cpp:1288:25:1288:49 | ChiTotal | total:m1288_4 | +| ir.cpp:1288:25:1288:49 | SideEffect | ~m1288_4 | +| ir.cpp:1291:5:1291:22 | Address | &:r1291_10 | +| ir.cpp:1291:5:1291:22 | ChiPartial | partial:m1291_3 | +| ir.cpp:1291:5:1291:22 | ChiTotal | total:m1291_2 | +| ir.cpp:1291:5:1291:22 | Load | m1291_9 | +| ir.cpp:1291:5:1291:22 | Phi | from 2:m1293_4 | +| ir.cpp:1291:5:1291:22 | Phi | from 3:m1295_2 | +| ir.cpp:1291:5:1291:22 | SideEffect | m1291_3 | +| ir.cpp:1291:29:1291:29 | Address | &:r1291_5 | +| ir.cpp:1291:36:1291:36 | Address | &:r1291_7 | +| ir.cpp:1292:9:1292:9 | Address | &:r1292_1 | +| ir.cpp:1292:9:1292:9 | Condition | r1292_2 | +| ir.cpp:1292:9:1292:9 | Load | m1291_6 | +| ir.cpp:1293:9:1293:17 | Address | &:r1293_1 | +| ir.cpp:1293:16:1293:16 | Address | &:r1293_2 | +| ir.cpp:1293:16:1293:16 | Load | m1291_8 | +| ir.cpp:1293:16:1293:16 | StoreValue | r1293_3 | +| ir.cpp:1295:1:1295:1 | Address | &:r1295_1 | +| ir.cpp:1297:6:1297:15 | ChiPartial | partial:m1297_3 | +| ir.cpp:1297:6:1297:15 | ChiTotal | total:m1297_2 | +| ir.cpp:1297:6:1297:15 | SideEffect | ~m1298_8 | +| ir.cpp:1297:21:1297:21 | Address | &:r1297_5 | +| ir.cpp:1297:28:1297:28 | Address | &:r1297_7 | +| ir.cpp:1298:12:1298:21 | CallTarget | func:r1298_1 | +| ir.cpp:1298:12:1298:21 | ChiPartial | partial:m1298_7 | +| ir.cpp:1298:12:1298:21 | ChiTotal | total:m1297_4 | +| ir.cpp:1298:12:1298:21 | SideEffect | ~m1297_4 | +| ir.cpp:1298:23:1298:23 | Address | &:r1298_2 | +| ir.cpp:1298:23:1298:23 | Arg(0) | 0:r1298_3 | +| ir.cpp:1298:23:1298:23 | Load | m1297_6 | +| ir.cpp:1298:26:1298:26 | Address | &:r1298_4 | +| ir.cpp:1298:26:1298:26 | Arg(1) | 1:r1298_5 | +| ir.cpp:1298:26:1298:26 | Load | m1297_8 | +| ir.cpp:1301:6:1301:25 | ChiPartial | partial:m1301_3 | +| ir.cpp:1301:6:1301:25 | ChiTotal | total:m1301_2 | +| ir.cpp:1301:6:1301:25 | SideEffect | m1301_3 | +| ir.cpp:1301:32:1301:32 | Address | &:r1301_5 | +| ir.cpp:1301:39:1301:39 | Address | &:r1301_7 | +| ir.cpp:1301:47:1301:47 | Address | &:r1301_9 | | ir.cpp:1302:9:1302:9 | Address | &:r1302_1 | -| ir.cpp:1302:9:1302:9 | Condition | r1302_2 | -| ir.cpp:1302:9:1302:9 | Load | m1299_6 | -| ir.cpp:1302:9:1302:9 | StoreValue | r1302_2 | -| ir.cpp:1302:9:1302:14 | Address | &:r1302_5 | -| ir.cpp:1302:9:1302:14 | Address | &:r1302_10 | -| ir.cpp:1302:9:1302:14 | Address | &:r1302_14 | -| ir.cpp:1302:9:1302:14 | Load | m1302_4 | -| ir.cpp:1302:9:1302:14 | Phi | from 5:m1302_11 | -| ir.cpp:1302:9:1302:14 | Phi | from 6:m1302_15 | -| ir.cpp:1302:9:1302:14 | StoreValue | r1302_7 | -| ir.cpp:1302:9:1302:14 | Unary | r1302_6 | -| ir.cpp:1302:14:1302:14 | Address | &:r1302_12 | -| ir.cpp:1302:14:1302:14 | Load | m1299_10 | -| ir.cpp:1302:14:1302:14 | StoreValue | r1302_13 | -| ir.cpp:1303:5:1303:5 | Address | &:r1303_9 | +| ir.cpp:1302:13:1302:13 | Address | &:r1302_2 | +| ir.cpp:1302:13:1302:13 | Load | m1301_8 | +| ir.cpp:1302:13:1302:13 | StoreValue | r1302_3 | +| ir.cpp:1303:5:1303:5 | Address | &:r1303_7 | | ir.cpp:1303:9:1303:9 | Address | &:r1303_1 | -| ir.cpp:1303:9:1303:9 | Condition | r1303_4 | -| ir.cpp:1303:9:1303:9 | Left | r1303_2 | -| ir.cpp:1303:9:1303:9 | Load | m1299_8 | -| ir.cpp:1303:9:1303:9 | Right | r1303_3 | +| ir.cpp:1303:9:1303:9 | Condition | r1303_2 | +| ir.cpp:1303:9:1303:9 | Load | m1301_6 | | ir.cpp:1303:9:1303:9 | StoreValue | r1303_2 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_7 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_11 | -| ir.cpp:1303:9:1303:14 | Address | &:r1303_15 | -| ir.cpp:1303:9:1303:14 | Load | m1303_6 | -| ir.cpp:1303:9:1303:14 | Phi | from 8:m1303_12 | -| ir.cpp:1303:9:1303:14 | Phi | from 9:m1303_16 | -| ir.cpp:1303:9:1303:14 | StoreValue | r1303_8 | -| ir.cpp:1303:14:1303:14 | Address | &:r1303_13 | -| ir.cpp:1303:14:1303:14 | Load | m1299_8 | -| ir.cpp:1303:14:1303:14 | StoreValue | r1303_14 | -| ir.cpp:1304:5:1304:5 | Address | &:r1304_10 | +| ir.cpp:1303:9:1303:14 | Address | &:r1303_5 | +| ir.cpp:1303:9:1303:14 | Address | &:r1303_9 | +| ir.cpp:1303:9:1303:14 | Address | &:r1303_13 | +| ir.cpp:1303:9:1303:14 | Load | m1303_4 | +| ir.cpp:1303:9:1303:14 | Phi | from 2:m1303_10 | +| ir.cpp:1303:9:1303:14 | Phi | from 3:m1303_14 | +| ir.cpp:1303:9:1303:14 | StoreValue | r1303_6 | +| ir.cpp:1303:14:1303:14 | Address | &:r1303_11 | +| ir.cpp:1303:14:1303:14 | Load | m1301_8 | +| ir.cpp:1303:14:1303:14 | StoreValue | r1303_12 | +| ir.cpp:1304:5:1304:5 | Address | &:r1304_8 | | ir.cpp:1304:9:1304:9 | Address | &:r1304_1 | -| ir.cpp:1304:9:1304:9 | Condition | r1304_4 | -| ir.cpp:1304:9:1304:9 | Left | r1304_2 | -| ir.cpp:1304:9:1304:9 | Load | m1299_8 | -| ir.cpp:1304:9:1304:9 | Right | r1304_3 | +| ir.cpp:1304:9:1304:9 | Condition | r1304_2 | +| ir.cpp:1304:9:1304:9 | Load | m1301_6 | | ir.cpp:1304:9:1304:9 | StoreValue | r1304_2 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_7 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_12 | -| ir.cpp:1304:9:1304:14 | Address | &:r1304_16 | -| ir.cpp:1304:9:1304:14 | Load | m1304_6 | -| ir.cpp:1304:9:1304:14 | Phi | from 11:m1304_13 | -| ir.cpp:1304:9:1304:14 | Phi | from 12:m1304_17 | -| ir.cpp:1304:9:1304:14 | StoreValue | r1304_9 | -| ir.cpp:1304:9:1304:14 | Unary | r1304_8 | -| ir.cpp:1304:14:1304:14 | Address | &:r1304_14 | -| ir.cpp:1304:14:1304:14 | Load | m1299_10 | -| ir.cpp:1304:14:1304:14 | StoreValue | r1304_15 | -| ir.cpp:1305:5:1305:5 | Address | &:r1305_10 | +| ir.cpp:1304:9:1304:14 | Address | &:r1304_5 | +| ir.cpp:1304:9:1304:14 | Address | &:r1304_10 | +| ir.cpp:1304:9:1304:14 | Address | &:r1304_14 | +| ir.cpp:1304:9:1304:14 | Load | m1304_4 | +| ir.cpp:1304:9:1304:14 | Phi | from 5:m1304_11 | +| ir.cpp:1304:9:1304:14 | Phi | from 6:m1304_15 | +| ir.cpp:1304:9:1304:14 | StoreValue | r1304_7 | +| ir.cpp:1304:9:1304:14 | Unary | r1304_6 | +| ir.cpp:1304:14:1304:14 | Address | &:r1304_12 | +| ir.cpp:1304:14:1304:14 | Load | m1301_10 | +| ir.cpp:1304:14:1304:14 | StoreValue | r1304_13 | +| ir.cpp:1305:5:1305:5 | Address | &:r1305_9 | | ir.cpp:1305:9:1305:9 | Address | &:r1305_1 | | ir.cpp:1305:9:1305:9 | Condition | r1305_4 | | ir.cpp:1305:9:1305:9 | Left | r1305_2 | -| ir.cpp:1305:9:1305:9 | Load | m1299_10 | +| ir.cpp:1305:9:1305:9 | Load | m1301_8 | | ir.cpp:1305:9:1305:9 | Right | r1305_3 | | ir.cpp:1305:9:1305:9 | StoreValue | r1305_2 | | ir.cpp:1305:9:1305:14 | Address | &:r1305_7 | -| ir.cpp:1305:9:1305:14 | Address | &:r1305_12 | -| ir.cpp:1305:9:1305:14 | Address | &:r1305_17 | +| ir.cpp:1305:9:1305:14 | Address | &:r1305_11 | +| ir.cpp:1305:9:1305:14 | Address | &:r1305_15 | | ir.cpp:1305:9:1305:14 | Load | m1305_6 | -| ir.cpp:1305:9:1305:14 | Phi | from 14:m1305_13 | -| ir.cpp:1305:9:1305:14 | Phi | from 15:m1305_18 | -| ir.cpp:1305:9:1305:14 | StoreValue | r1305_9 | -| ir.cpp:1305:9:1305:14 | Unary | r1305_8 | -| ir.cpp:1305:14:1305:14 | Address | &:r1305_14 | -| ir.cpp:1305:14:1305:14 | Load | m1299_8 | -| ir.cpp:1305:14:1305:14 | StoreValue | r1305_16 | -| ir.cpp:1305:14:1305:14 | Unary | r1305_15 | +| ir.cpp:1305:9:1305:14 | Phi | from 8:m1305_12 | +| ir.cpp:1305:9:1305:14 | Phi | from 9:m1305_16 | +| ir.cpp:1305:9:1305:14 | StoreValue | r1305_8 | +| ir.cpp:1305:14:1305:14 | Address | &:r1305_13 | +| ir.cpp:1305:14:1305:14 | Load | m1301_8 | +| ir.cpp:1305:14:1305:14 | StoreValue | r1305_14 | | ir.cpp:1306:5:1306:5 | Address | &:r1306_10 | | ir.cpp:1306:9:1306:9 | Address | &:r1306_1 | | ir.cpp:1306:9:1306:9 | Condition | r1306_4 | | ir.cpp:1306:9:1306:9 | Left | r1306_2 | -| ir.cpp:1306:9:1306:9 | Load | m1299_10 | +| ir.cpp:1306:9:1306:9 | Load | m1301_8 | | ir.cpp:1306:9:1306:9 | Right | r1306_3 | | ir.cpp:1306:9:1306:9 | StoreValue | r1306_2 | | ir.cpp:1306:9:1306:14 | Address | &:r1306_7 | | ir.cpp:1306:9:1306:14 | Address | &:r1306_12 | | ir.cpp:1306:9:1306:14 | Address | &:r1306_16 | | ir.cpp:1306:9:1306:14 | Load | m1306_6 | -| ir.cpp:1306:9:1306:14 | Phi | from 17:m1306_13 | -| ir.cpp:1306:9:1306:14 | Phi | from 18:m1306_17 | +| ir.cpp:1306:9:1306:14 | Phi | from 11:m1306_13 | +| ir.cpp:1306:9:1306:14 | Phi | from 12:m1306_17 | | ir.cpp:1306:9:1306:14 | StoreValue | r1306_9 | | ir.cpp:1306:9:1306:14 | Unary | r1306_8 | | ir.cpp:1306:14:1306:14 | Address | &:r1306_14 | -| ir.cpp:1306:14:1306:14 | Load | m1299_10 | +| ir.cpp:1306:14:1306:14 | Load | m1301_10 | | ir.cpp:1306:14:1306:14 | StoreValue | r1306_15 | -| ir.cpp:1308:5:1308:5 | Address | &:r1308_9 | -| ir.cpp:1308:9:1308:26 | Address | &:r1308_7 | -| ir.cpp:1308:9:1308:26 | Address | &:r1308_11 | -| ir.cpp:1308:9:1308:26 | Address | &:r1308_33 | -| ir.cpp:1308:9:1308:26 | Load | m1308_6 | -| ir.cpp:1308:9:1308:26 | Phi | from 20:m1308_12 | -| ir.cpp:1308:9:1308:26 | Phi | from 26:m1308_34 | -| ir.cpp:1308:9:1308:26 | StoreValue | r1308_8 | -| ir.cpp:1308:10:1308:10 | Address | &:r1308_1 | -| ir.cpp:1308:10:1308:10 | Condition | r1308_4 | -| ir.cpp:1308:10:1308:10 | Left | r1308_2 | -| ir.cpp:1308:10:1308:10 | Load | m1299_8 | -| ir.cpp:1308:10:1308:10 | Right | r1308_3 | -| ir.cpp:1308:10:1308:20 | Address | &:r1308_13 | -| ir.cpp:1308:10:1308:20 | Address | &:r1308_17 | -| ir.cpp:1308:10:1308:20 | Address | &:r1308_20 | -| ir.cpp:1308:10:1308:20 | Condition | r1308_18 | -| ir.cpp:1308:10:1308:20 | Load | m1308_16 | -| ir.cpp:1308:10:1308:20 | Phi | from 21:m1308_15 | -| ir.cpp:1308:10:1308:20 | Phi | from 23:m1308_22 | -| ir.cpp:1308:10:1308:20 | StoreValue | r1308_14 | -| ir.cpp:1308:10:1308:20 | StoreValue | r1308_18 | -| ir.cpp:1308:10:1308:20 | StoreValue | r1308_21 | -| ir.cpp:1308:15:1308:15 | Address | &:r1308_23 | -| ir.cpp:1308:15:1308:15 | Condition | r1308_24 | -| ir.cpp:1308:15:1308:15 | Load | m1299_6 | -| ir.cpp:1308:20:1308:20 | Address | &:r1308_26 | -| ir.cpp:1308:20:1308:20 | Condition | r1308_29 | -| ir.cpp:1308:20:1308:20 | Left | r1308_27 | -| ir.cpp:1308:20:1308:20 | Load | m1299_10 | -| ir.cpp:1308:20:1308:20 | Right | r1308_28 | -| ir.cpp:1308:26:1308:26 | Address | &:r1308_31 | -| ir.cpp:1308:26:1308:26 | Load | m1299_8 | -| ir.cpp:1308:26:1308:26 | StoreValue | r1308_32 | -| ir.cpp:1314:5:1314:27 | Address | &:r1314_9 | -| ir.cpp:1314:5:1314:27 | ChiPartial | partial:m1314_3 | -| ir.cpp:1314:5:1314:27 | ChiTotal | total:m1314_2 | -| ir.cpp:1314:5:1314:27 | Load | m1315_11 | -| ir.cpp:1314:5:1314:27 | SideEffect | ~m1315_7 | -| ir.cpp:1314:33:1314:33 | Address | &:r1314_5 | -| ir.cpp:1314:40:1314:40 | Address | &:r1314_7 | -| ir.cpp:1315:5:1315:48 | Address | &:r1315_1 | -| ir.cpp:1315:12:1315:21 | CallTarget | func:r1315_2 | -| ir.cpp:1315:12:1315:21 | ChiPartial | partial:m1315_4 | -| ir.cpp:1315:12:1315:21 | ChiTotal | total:m1314_4 | -| ir.cpp:1315:12:1315:21 | Condition | r1315_3 | -| ir.cpp:1315:12:1315:21 | SideEffect | ~m1314_4 | -| ir.cpp:1315:12:1315:47 | Address | &:r1315_9 | -| ir.cpp:1315:12:1315:47 | Address | &:r1315_19 | -| ir.cpp:1315:12:1315:47 | Address | &:r1315_24 | -| ir.cpp:1315:12:1315:47 | Load | m1315_8 | -| ir.cpp:1315:12:1315:47 | Phi | from 3:m1315_20 | -| ir.cpp:1315:12:1315:47 | Phi | from 3:~m1315_15 | -| ir.cpp:1315:12:1315:47 | Phi | from 4:m1315_25 | -| ir.cpp:1315:12:1315:47 | Phi | from 4:~m1315_21 | -| ir.cpp:1315:12:1315:47 | StoreValue | r1315_10 | -| ir.cpp:1315:28:1315:37 | CallTarget | func:r1315_12 | -| ir.cpp:1315:28:1315:37 | ChiPartial | partial:m1315_14 | -| ir.cpp:1315:28:1315:37 | ChiTotal | total:m1315_5 | -| ir.cpp:1315:28:1315:37 | Condition | r1315_13 | -| ir.cpp:1315:28:1315:37 | SideEffect | ~m1315_5 | -| ir.cpp:1315:43:1315:43 | Address | &:r1315_17 | -| ir.cpp:1315:43:1315:43 | Load | m1314_6 | -| ir.cpp:1315:43:1315:43 | StoreValue | r1315_18 | -| ir.cpp:1315:47:1315:47 | Address | &:r1315_22 | -| ir.cpp:1315:47:1315:47 | Load | m1314_8 | -| ir.cpp:1315:47:1315:47 | Phi | from 0:~m1315_5 | -| ir.cpp:1315:47:1315:47 | Phi | from 2:~m1315_15 | -| ir.cpp:1315:47:1315:47 | StoreValue | r1315_23 | -| ir.cpp:1320:6:1320:6 | ChiPartial | partial:m1320_3 | -| ir.cpp:1320:6:1320:6 | ChiTotal | total:m1320_2 | -| ir.cpp:1320:6:1320:6 | SideEffect | ~m1322_8 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_5 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_5 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_7 | -| ir.cpp:1320:13:1320:13 | Address | &:r1320_7 | -| ir.cpp:1320:13:1320:13 | Load | m1320_6 | -| ir.cpp:1320:13:1320:13 | SideEffect | m1320_8 | -| ir.cpp:1322:3:1322:13 | Address | &:r1322_6 | -| ir.cpp:1322:3:1322:13 | Arg(0) | 0:r1322_2 | -| ir.cpp:1322:3:1322:13 | CallTarget | func:r1322_1 | -| ir.cpp:1322:3:1322:13 | ChiPartial | partial:m1322_7 | -| ir.cpp:1322:3:1322:13 | ChiTotal | total:m1320_4 | -| ir.cpp:1322:3:1322:13 | SideEffect | ~m1320_4 | -| ir.cpp:1322:3:1322:13 | Unary | r1322_6 | -| ir.cpp:1322:8:1322:8 | Address | &:r1322_3 | -| ir.cpp:1322:8:1322:8 | Arg(1) | 1:r1322_5 | -| ir.cpp:1322:8:1322:8 | Load | m1320_6 | -| ir.cpp:1322:8:1322:8 | Unary | r1322_4 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | Address | &:r1326_5 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiPartial | partial:m1326_3 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | ChiTotal | total:m1326_2 | -| ir.cpp:1326:3:1326:3 | Load | m1327_3 | -| ir.cpp:1326:3:1326:3 | Load | m1327_3 | -| ir.cpp:1326:3:1326:3 | Load | m1327_8 | -| ir.cpp:1326:3:1326:3 | Load | m1327_8 | -| ir.cpp:1326:3:1326:3 | SideEffect | m1326_3 | -| ir.cpp:1326:3:1326:3 | SideEffect | m1326_3 | -| ir.cpp:1326:3:1326:3 | SideEffect | ~m1327_6 | -| ir.cpp:1326:3:1326:3 | SideEffect | ~m1327_6 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Address | &:r1327_1 | -| ir.cpp:1327:5:1327:15 | Arg(this) | this:r1327_1 | -| ir.cpp:1327:5:1327:15 | Arg(this) | this:r1327_1 | -| ir.cpp:1327:5:1327:15 | CallTarget | func:r1327_3 | -| ir.cpp:1327:5:1327:15 | CallTarget | func:r1327_3 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_5 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_5 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_7 | -| ir.cpp:1327:5:1327:15 | ChiPartial | partial:m1327_7 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1326_4 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1326_4 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1327_2 | -| ir.cpp:1327:5:1327:15 | ChiTotal | total:m1327_2 | -| ir.cpp:1327:5:1327:15 | SideEffect | ~m1326_4 | -| ir.cpp:1327:5:1327:15 | SideEffect | ~m1326_4 | -| ir.cpp:1327:5:1327:15 | StoreValue | r1327_2 | -| ir.cpp:1327:5:1327:15 | StoreValue | r1327_2 | -| ir.cpp:1365:6:1365:21 | ChiPartial | partial:m1365_3 | -| ir.cpp:1365:6:1365:21 | ChiTotal | total:m1365_2 | -| ir.cpp:1365:6:1365:21 | SideEffect | ~m1376_5 | -| ir.cpp:1366:12:1366:12 | Address | &:r1366_1 | -| ir.cpp:1366:16:1366:34 | CallTarget | func:r1366_2 | -| ir.cpp:1366:16:1366:34 | ChiPartial | partial:m1366_4 | -| ir.cpp:1366:16:1366:34 | ChiTotal | total:m1365_4 | -| ir.cpp:1366:16:1366:34 | SideEffect | ~m1365_4 | -| ir.cpp:1366:16:1366:34 | StoreValue | r1366_3 | -| ir.cpp:1367:19:1367:20 | Address | &:r1367_1 | -| ir.cpp:1367:24:1367:42 | CallTarget | func:r1367_3 | -| ir.cpp:1367:24:1367:42 | ChiPartial | partial:m1367_5 | -| ir.cpp:1367:24:1367:42 | ChiTotal | total:m1366_5 | -| ir.cpp:1367:24:1367:42 | SideEffect | ~m1366_5 | -| ir.cpp:1367:24:1367:42 | StoreValue | r1367_4 | -| ir.cpp:1367:24:1367:44 | Address | &:r1367_2 | -| ir.cpp:1367:24:1367:44 | StoreValue | r1367_9 | -| ir.cpp:1367:24:1367:44 | Unary | r1367_2 | -| ir.cpp:1367:24:1367:44 | Unary | r1367_8 | -| ir.cpp:1369:5:1369:13 | CallTarget | func:r1369_1 | -| ir.cpp:1369:5:1369:13 | ChiPartial | partial:m1369_6 | -| ir.cpp:1369:5:1369:13 | ChiTotal | total:m1367_6 | -| ir.cpp:1369:5:1369:13 | SideEffect | ~m1367_6 | -| ir.cpp:1369:15:1369:15 | Address | &:r1369_4 | -| ir.cpp:1369:15:1369:15 | Arg(0) | 0:r1369_4 | -| ir.cpp:1369:15:1369:15 | SideEffect | ~m1366_6 | -| ir.cpp:1369:15:1369:15 | Unary | r1369_2 | -| ir.cpp:1369:15:1369:15 | Unary | r1369_3 | -| ir.cpp:1370:5:1370:21 | CallTarget | func:r1370_1 | -| ir.cpp:1370:5:1370:21 | ChiPartial | partial:m1370_15 | -| ir.cpp:1370:5:1370:21 | ChiTotal | total:m1370_9 | -| ir.cpp:1370:5:1370:21 | SideEffect | ~m1370_9 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_2 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_2 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_6 | -| ir.cpp:1370:23:1370:27 | Address | &:r1370_13 | -| ir.cpp:1370:23:1370:27 | Arg(0) | 0:r1370_6 | -| ir.cpp:1370:23:1370:27 | Arg(0) | 0:r1370_13 | -| ir.cpp:1370:23:1370:27 | Arg(this) | this:r1370_2 | -| ir.cpp:1370:23:1370:27 | CallTarget | func:r1370_4 | -| ir.cpp:1370:23:1370:27 | ChiPartial | partial:m1370_8 | -| ir.cpp:1370:23:1370:27 | ChiPartial | partial:m1370_11 | -| ir.cpp:1370:23:1370:27 | ChiTotal | total:m1369_7 | -| ir.cpp:1370:23:1370:27 | ChiTotal | total:m1370_3 | -| ir.cpp:1370:23:1370:27 | SideEffect | ~m1365_3 | -| ir.cpp:1370:23:1370:27 | SideEffect | ~m1369_7 | -| ir.cpp:1370:23:1370:27 | SideEffect | ~m1370_12 | -| ir.cpp:1370:23:1370:27 | Unary | r1370_2 | -| ir.cpp:1370:23:1370:27 | Unary | r1370_5 | -| ir.cpp:1371:5:1371:15 | CallTarget | func:r1371_1 | -| ir.cpp:1371:5:1371:15 | ChiPartial | partial:m1371_16 | -| ir.cpp:1371:5:1371:15 | ChiTotal | total:m1371_10 | -| ir.cpp:1371:5:1371:15 | SideEffect | ~m1371_10 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_2 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_2 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_2 | -| ir.cpp:1371:17:1371:17 | Address | &:r1371_7 | -| ir.cpp:1371:17:1371:17 | Arg(0) | 0:r1371_7 | -| ir.cpp:1371:17:1371:17 | Arg(0) | 0:r1371_14 | -| ir.cpp:1371:17:1371:17 | Arg(this) | this:r1371_2 | -| ir.cpp:1371:17:1371:17 | CallTarget | func:r1371_4 | -| ir.cpp:1371:17:1371:17 | ChiPartial | partial:m1371_9 | -| ir.cpp:1371:17:1371:17 | ChiPartial | partial:m1371_12 | -| ir.cpp:1371:17:1371:17 | ChiTotal | total:m1370_16 | -| ir.cpp:1371:17:1371:17 | ChiTotal | total:m1371_3 | -| ir.cpp:1371:17:1371:17 | Load | m1371_13 | -| ir.cpp:1371:17:1371:17 | SideEffect | ~m1366_6 | -| ir.cpp:1371:17:1371:17 | SideEffect | ~m1370_16 | -| ir.cpp:1371:17:1371:17 | Unary | r1371_5 | -| ir.cpp:1371:17:1371:17 | Unary | r1371_6 | -| ir.cpp:1372:5:1372:23 | CallTarget | func:r1372_1 | -| ir.cpp:1372:5:1372:23 | ChiPartial | partial:m1372_15 | -| ir.cpp:1372:5:1372:23 | ChiTotal | total:m1372_9 | -| ir.cpp:1372:5:1372:23 | SideEffect | ~m1372_9 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_2 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_2 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_2 | -| ir.cpp:1372:25:1372:29 | Address | &:r1372_6 | -| ir.cpp:1372:25:1372:29 | Arg(0) | 0:r1372_6 | -| ir.cpp:1372:25:1372:29 | Arg(0) | 0:r1372_13 | -| ir.cpp:1372:25:1372:29 | Arg(this) | this:r1372_2 | -| ir.cpp:1372:25:1372:29 | CallTarget | func:r1372_4 | -| ir.cpp:1372:25:1372:29 | ChiPartial | partial:m1372_8 | -| ir.cpp:1372:25:1372:29 | ChiPartial | partial:m1372_11 | -| ir.cpp:1372:25:1372:29 | ChiTotal | total:m1371_17 | -| ir.cpp:1372:25:1372:29 | ChiTotal | total:m1372_3 | -| ir.cpp:1372:25:1372:29 | Load | m1372_12 | -| ir.cpp:1372:25:1372:29 | SideEffect | ~m1365_3 | -| ir.cpp:1372:25:1372:29 | SideEffect | ~m1371_17 | -| ir.cpp:1372:25:1372:29 | Unary | r1372_5 | -| ir.cpp:1373:5:1373:12 | Address | &:r1373_1 | -| ir.cpp:1373:5:1373:12 | Address | &:r1373_1 | -| ir.cpp:1373:5:1373:12 | Address | &:r1373_9 | -| ir.cpp:1373:5:1373:12 | Arg(this) | this:r1373_1 | -| ir.cpp:1373:5:1373:12 | Arg(this) | this:r1373_9 | -| ir.cpp:1373:5:1373:12 | CallTarget | func:r1373_3 | -| ir.cpp:1373:5:1373:12 | ChiPartial | partial:m1373_5 | -| ir.cpp:1373:5:1373:12 | ChiPartial | partial:m1373_7 | -| ir.cpp:1373:5:1373:12 | ChiTotal | total:m1372_16 | -| ir.cpp:1373:5:1373:12 | ChiTotal | total:m1373_2 | -| ir.cpp:1373:5:1373:12 | SideEffect | m1373_8 | -| ir.cpp:1373:5:1373:12 | SideEffect | ~m1372_16 | -| ir.cpp:1373:5:1373:12 | Unary | r1373_1 | -| ir.cpp:1373:14:1373:18 | CallTarget | func:r1373_10 | -| ir.cpp:1373:14:1373:18 | ChiPartial | partial:m1373_12 | -| ir.cpp:1373:14:1373:18 | ChiTotal | total:m1373_6 | -| ir.cpp:1373:14:1373:18 | SideEffect | ~m1373_6 | -| ir.cpp:1374:5:1374:23 | CallTarget | func:r1374_2 | -| ir.cpp:1374:5:1374:23 | ChiPartial | partial:m1374_4 | -| ir.cpp:1374:5:1374:23 | ChiTotal | total:m1373_13 | -| ir.cpp:1374:5:1374:23 | SideEffect | ~m1373_13 | -| ir.cpp:1374:5:1374:23 | StoreValue | r1374_3 | -| ir.cpp:1374:5:1374:25 | Address | &:r1374_1 | -| ir.cpp:1374:5:1374:25 | Address | &:r1374_7 | -| ir.cpp:1374:5:1374:25 | Arg(this) | this:r1374_7 | -| ir.cpp:1374:5:1374:25 | SideEffect | m1374_6 | -| ir.cpp:1374:5:1374:25 | Unary | r1374_1 | -| ir.cpp:1374:27:1374:31 | CallTarget | func:r1374_8 | -| ir.cpp:1374:27:1374:31 | ChiPartial | partial:m1374_10 | -| ir.cpp:1374:27:1374:31 | ChiTotal | total:m1374_5 | -| ir.cpp:1374:27:1374:31 | SideEffect | ~m1374_5 | -| ir.cpp:1376:5:1376:28 | CallTarget | func:r1376_2 | -| ir.cpp:1376:5:1376:28 | ChiPartial | partial:m1376_4 | -| ir.cpp:1376:5:1376:28 | ChiTotal | total:m1374_11 | -| ir.cpp:1376:5:1376:28 | SideEffect | ~m1374_11 | -| ir.cpp:1376:5:1376:28 | StoreValue | r1376_3 | -| ir.cpp:1376:5:1376:30 | Address | &:r1376_1 | -| ir.cpp:1379:6:1379:30 | ChiPartial | partial:m1379_3 | -| ir.cpp:1379:6:1379:30 | ChiTotal | total:m1379_2 | -| ir.cpp:1379:6:1379:30 | SideEffect | ~m1388_5 | -| ir.cpp:1380:21:1380:21 | Address | &:r1380_1 | -| ir.cpp:1380:25:1380:52 | CallTarget | func:r1380_2 | -| ir.cpp:1380:25:1380:52 | ChiPartial | partial:m1380_4 | -| ir.cpp:1380:25:1380:52 | ChiTotal | total:m1379_4 | -| ir.cpp:1380:25:1380:52 | SideEffect | ~m1379_4 | -| ir.cpp:1380:25:1380:52 | StoreValue | r1380_3 | -| ir.cpp:1381:28:1381:29 | Address | &:r1381_1 | -| ir.cpp:1381:33:1381:60 | CallTarget | func:r1381_3 | -| ir.cpp:1381:33:1381:60 | ChiPartial | partial:m1381_5 | -| ir.cpp:1381:33:1381:60 | ChiTotal | total:m1380_5 | -| ir.cpp:1381:33:1381:60 | SideEffect | ~m1380_5 | -| ir.cpp:1381:33:1381:60 | StoreValue | r1381_4 | -| ir.cpp:1381:33:1381:62 | Address | &:r1381_2 | -| ir.cpp:1381:33:1381:62 | StoreValue | r1381_9 | -| ir.cpp:1381:33:1381:62 | Unary | r1381_2 | -| ir.cpp:1381:33:1381:62 | Unary | r1381_8 | -| ir.cpp:1382:21:1382:22 | Address | &:r1382_1 | -| ir.cpp:1383:5:1383:13 | CallTarget | func:r1383_1 | -| ir.cpp:1383:5:1383:13 | ChiPartial | partial:m1383_6 | -| ir.cpp:1383:5:1383:13 | ChiTotal | total:m1381_6 | -| ir.cpp:1383:5:1383:13 | SideEffect | ~m1381_6 | -| ir.cpp:1383:15:1383:15 | Address | &:r1383_4 | -| ir.cpp:1383:15:1383:15 | Arg(0) | 0:r1383_4 | -| ir.cpp:1383:15:1383:15 | SideEffect | ~m1380_6 | -| ir.cpp:1383:15:1383:15 | Unary | r1383_2 | -| ir.cpp:1383:15:1383:15 | Unary | r1383_3 | -| ir.cpp:1384:5:1384:15 | CallTarget | func:r1384_1 | -| ir.cpp:1384:5:1384:15 | ChiPartial | partial:m1384_8 | -| ir.cpp:1384:5:1384:15 | ChiTotal | total:m1383_7 | -| ir.cpp:1384:5:1384:15 | SideEffect | ~m1383_7 | -| ir.cpp:1384:17:1384:17 | Address | &:r1384_2 | -| ir.cpp:1384:17:1384:17 | Address | &:r1384_2 | -| ir.cpp:1384:17:1384:17 | Address | &:r1384_3 | -| ir.cpp:1384:17:1384:17 | Arg(0) | 0:r1384_6 | -| ir.cpp:1384:17:1384:17 | Load | m1380_6 | -| ir.cpp:1384:17:1384:17 | Load | m1384_5 | -| ir.cpp:1384:17:1384:17 | StoreValue | r1384_4 | -| ir.cpp:1385:5:1385:21 | Address | &:r1385_1 | -| ir.cpp:1385:5:1385:21 | Address | &:r1385_1 | -| ir.cpp:1385:5:1385:21 | Address | &:r1385_1 | -| ir.cpp:1385:5:1385:21 | Arg(this) | this:r1385_1 | -| ir.cpp:1385:5:1385:21 | ChiPartial | partial:m1385_9 | -| ir.cpp:1385:5:1385:21 | ChiTotal | total:m1385_3 | -| ir.cpp:1385:5:1385:21 | SideEffect | m1385_3 | -| ir.cpp:1385:5:1385:21 | StoreValue | r1385_2 | -| ir.cpp:1385:23:1385:28 | CallTarget | func:r1385_4 | -| ir.cpp:1385:23:1385:28 | ChiPartial | partial:m1385_6 | -| ir.cpp:1385:23:1385:28 | ChiTotal | total:m1384_9 | -| ir.cpp:1385:23:1385:28 | SideEffect | ~m1384_9 | -| ir.cpp:1386:5:1386:32 | CallTarget | func:r1386_2 | -| ir.cpp:1386:5:1386:32 | ChiPartial | partial:m1386_4 | -| ir.cpp:1386:5:1386:32 | ChiTotal | total:m1385_7 | -| ir.cpp:1386:5:1386:32 | SideEffect | ~m1385_7 | -| ir.cpp:1386:5:1386:32 | StoreValue | r1386_3 | -| ir.cpp:1386:5:1386:34 | Address | &:r1386_1 | -| ir.cpp:1386:5:1386:34 | Address | &:r1386_1 | -| ir.cpp:1386:5:1386:34 | Address | &:r1386_1 | -| ir.cpp:1386:5:1386:34 | Arg(this) | this:r1386_1 | -| ir.cpp:1386:5:1386:34 | ChiPartial | partial:m1386_12 | -| ir.cpp:1386:5:1386:34 | ChiTotal | total:m1386_6 | -| ir.cpp:1386:5:1386:34 | SideEffect | m1386_6 | -| ir.cpp:1386:36:1386:41 | CallTarget | func:r1386_7 | -| ir.cpp:1386:36:1386:41 | ChiPartial | partial:m1386_9 | -| ir.cpp:1386:36:1386:41 | ChiTotal | total:m1386_5 | -| ir.cpp:1386:36:1386:41 | SideEffect | ~m1386_5 | -| ir.cpp:1388:5:1388:37 | CallTarget | func:r1388_2 | -| ir.cpp:1388:5:1388:37 | ChiPartial | partial:m1388_4 | -| ir.cpp:1388:5:1388:37 | ChiTotal | total:m1386_10 | -| ir.cpp:1388:5:1388:37 | SideEffect | ~m1386_10 | -| ir.cpp:1388:5:1388:37 | StoreValue | r1388_3 | -| ir.cpp:1388:5:1388:39 | Address | &:r1388_1 | -| ir.cpp:1391:6:1391:31 | ChiPartial | partial:m1391_3 | -| ir.cpp:1391:6:1391:31 | ChiTotal | total:m1391_2 | -| ir.cpp:1391:6:1391:31 | SideEffect | ~m1401_6 | -| ir.cpp:1392:22:1392:22 | Address | &:r1392_1 | -| ir.cpp:1392:26:1392:54 | CallTarget | func:r1392_2 | -| ir.cpp:1392:26:1392:54 | ChiPartial | partial:m1392_4 | -| ir.cpp:1392:26:1392:54 | ChiTotal | total:m1391_4 | -| ir.cpp:1392:26:1392:54 | SideEffect | ~m1391_4 | -| ir.cpp:1392:26:1392:54 | StoreValue | r1392_3 | -| ir.cpp:1393:29:1393:30 | Address | &:r1393_1 | -| ir.cpp:1393:34:1393:62 | CallTarget | func:r1393_3 | -| ir.cpp:1393:34:1393:62 | ChiPartial | partial:m1393_5 | -| ir.cpp:1393:34:1393:62 | ChiTotal | total:m1392_5 | -| ir.cpp:1393:34:1393:62 | SideEffect | ~m1392_5 | -| ir.cpp:1393:34:1393:62 | StoreValue | r1393_4 | -| ir.cpp:1393:34:1393:64 | Address | &:r1393_2 | -| ir.cpp:1393:34:1393:64 | StoreValue | r1393_9 | -| ir.cpp:1393:34:1393:64 | Unary | r1393_2 | -| ir.cpp:1393:34:1393:64 | Unary | r1393_8 | -| ir.cpp:1394:22:1394:23 | Address | &:r1394_1 | -| ir.cpp:1394:22:1394:23 | Address | &:r1394_1 | -| ir.cpp:1394:22:1394:23 | Arg(this) | this:r1394_1 | -| ir.cpp:1394:22:1394:23 | CallTarget | func:r1394_3 | -| ir.cpp:1394:22:1394:23 | ChiPartial | partial:m1394_5 | -| ir.cpp:1394:22:1394:23 | ChiPartial | partial:m1394_7 | -| ir.cpp:1394:22:1394:23 | ChiTotal | total:m1393_6 | -| ir.cpp:1394:22:1394:23 | ChiTotal | total:m1394_2 | -| ir.cpp:1394:22:1394:23 | SideEffect | ~m1393_6 | -| ir.cpp:1395:5:1395:13 | CallTarget | func:r1395_1 | -| ir.cpp:1395:5:1395:13 | ChiPartial | partial:m1395_6 | -| ir.cpp:1395:5:1395:13 | ChiTotal | total:m1394_6 | -| ir.cpp:1395:5:1395:13 | SideEffect | ~m1394_6 | -| ir.cpp:1395:15:1395:15 | Address | &:r1395_4 | -| ir.cpp:1395:15:1395:15 | Arg(0) | 0:r1395_4 | -| ir.cpp:1395:15:1395:15 | SideEffect | ~m1392_6 | -| ir.cpp:1395:15:1395:15 | Unary | r1395_2 | -| ir.cpp:1395:15:1395:15 | Unary | r1395_3 | -| ir.cpp:1396:5:1396:15 | CallTarget | func:r1396_1 | -| ir.cpp:1396:5:1396:15 | ChiPartial | partial:m1396_16 | -| ir.cpp:1396:5:1396:15 | ChiTotal | total:m1396_10 | -| ir.cpp:1396:5:1396:15 | SideEffect | ~m1396_10 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_2 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_2 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_2 | -| ir.cpp:1396:17:1396:17 | Address | &:r1396_7 | -| ir.cpp:1396:17:1396:17 | Arg(0) | 0:r1396_7 | -| ir.cpp:1396:17:1396:17 | Arg(0) | 0:r1396_14 | -| ir.cpp:1396:17:1396:17 | Arg(this) | this:r1396_2 | -| ir.cpp:1396:17:1396:17 | CallTarget | func:r1396_4 | -| ir.cpp:1396:17:1396:17 | ChiPartial | partial:m1396_9 | -| ir.cpp:1396:17:1396:17 | ChiPartial | partial:m1396_12 | -| ir.cpp:1396:17:1396:17 | ChiTotal | total:m1395_7 | -| ir.cpp:1396:17:1396:17 | ChiTotal | total:m1396_3 | -| ir.cpp:1396:17:1396:17 | Load | m1396_13 | -| ir.cpp:1396:17:1396:17 | SideEffect | ~m1392_6 | -| ir.cpp:1396:17:1396:17 | SideEffect | ~m1395_7 | -| ir.cpp:1396:17:1396:17 | Unary | r1396_5 | -| ir.cpp:1396:17:1396:17 | Unary | r1396_6 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Address | &:r1397_1 | -| ir.cpp:1397:5:1397:22 | Arg(this) | this:r1397_1 | -| ir.cpp:1397:5:1397:22 | Arg(this) | this:r1397_1 | -| ir.cpp:1397:5:1397:22 | CallTarget | func:r1397_3 | -| ir.cpp:1397:5:1397:22 | ChiPartial | partial:m1397_5 | -| ir.cpp:1397:5:1397:22 | ChiPartial | partial:m1397_7 | -| ir.cpp:1397:5:1397:22 | ChiPartial | partial:m1397_14 | -| ir.cpp:1397:5:1397:22 | ChiTotal | total:m1396_17 | -| ir.cpp:1397:5:1397:22 | ChiTotal | total:m1397_2 | -| ir.cpp:1397:5:1397:22 | ChiTotal | total:m1397_8 | -| ir.cpp:1397:5:1397:22 | SideEffect | m1397_8 | -| ir.cpp:1397:5:1397:22 | SideEffect | ~m1396_17 | -| ir.cpp:1397:24:1397:29 | CallTarget | func:r1397_9 | -| ir.cpp:1397:24:1397:29 | ChiPartial | partial:m1397_11 | -| ir.cpp:1397:24:1397:29 | ChiTotal | total:m1397_6 | -| ir.cpp:1397:24:1397:29 | SideEffect | ~m1397_6 | -| ir.cpp:1398:5:1398:33 | CallTarget | func:r1398_2 | -| ir.cpp:1398:5:1398:33 | ChiPartial | partial:m1398_4 | -| ir.cpp:1398:5:1398:33 | ChiTotal | total:m1397_12 | -| ir.cpp:1398:5:1398:33 | SideEffect | ~m1397_12 | -| ir.cpp:1398:5:1398:33 | StoreValue | r1398_3 | -| ir.cpp:1398:5:1398:35 | Address | &:r1398_1 | -| ir.cpp:1398:5:1398:35 | Address | &:r1398_1 | -| ir.cpp:1398:5:1398:35 | Address | &:r1398_1 | -| ir.cpp:1398:5:1398:35 | Arg(this) | this:r1398_1 | -| ir.cpp:1398:5:1398:35 | ChiPartial | partial:m1398_12 | -| ir.cpp:1398:5:1398:35 | ChiTotal | total:m1398_6 | -| ir.cpp:1398:5:1398:35 | SideEffect | m1398_6 | -| ir.cpp:1398:37:1398:42 | CallTarget | func:r1398_7 | -| ir.cpp:1398:37:1398:42 | ChiPartial | partial:m1398_9 | -| ir.cpp:1398:37:1398:42 | ChiTotal | total:m1398_5 | -| ir.cpp:1398:37:1398:42 | SideEffect | ~m1398_5 | -| ir.cpp:1399:5:1399:38 | CallTarget | func:r1399_2 | -| ir.cpp:1399:5:1399:38 | ChiPartial | partial:m1399_4 | -| ir.cpp:1399:5:1399:38 | ChiTotal | total:m1398_10 | -| ir.cpp:1399:5:1399:38 | SideEffect | ~m1398_10 | -| ir.cpp:1399:5:1399:38 | StoreValue | r1399_3 | -| ir.cpp:1399:5:1399:40 | Address | &:r1399_1 | -| ir.cpp:1401:9:1401:9 | Address | &:r1401_1 | -| ir.cpp:1401:13:1401:41 | CallTarget | func:r1401_3 | -| ir.cpp:1401:13:1401:41 | ChiPartial | partial:m1401_5 | -| ir.cpp:1401:13:1401:41 | ChiTotal | total:m1399_5 | -| ir.cpp:1401:13:1401:41 | SideEffect | ~m1399_5 | -| ir.cpp:1401:13:1401:41 | StoreValue | r1401_4 | -| ir.cpp:1401:13:1401:43 | Address | &:r1401_2 | -| ir.cpp:1401:13:1401:43 | Unary | r1401_2 | -| ir.cpp:1401:45:1401:45 | Address | &:r1401_8 | -| ir.cpp:1401:45:1401:45 | Load | ~m1401_7 | -| ir.cpp:1401:45:1401:45 | StoreValue | r1401_9 | -| ir.cpp:1404:6:1404:20 | ChiPartial | partial:m1404_3 | -| ir.cpp:1404:6:1404:20 | ChiTotal | total:m1404_2 | -| ir.cpp:1404:6:1404:20 | SideEffect | ~m1413_4 | -| ir.cpp:1405:11:1405:11 | Address | &:r1405_1 | -| ir.cpp:1405:15:1405:32 | CallTarget | func:r1405_2 | -| ir.cpp:1405:15:1405:32 | ChiPartial | partial:m1405_4 | -| ir.cpp:1405:15:1405:32 | ChiTotal | total:m1404_4 | -| ir.cpp:1405:15:1405:32 | SideEffect | ~m1404_4 | -| ir.cpp:1405:15:1405:32 | StoreValue | r1405_3 | -| ir.cpp:1406:18:1406:19 | Address | &:r1406_1 | -| ir.cpp:1406:23:1406:40 | CallTarget | func:r1406_3 | -| ir.cpp:1406:23:1406:40 | ChiPartial | partial:m1406_5 | -| ir.cpp:1406:23:1406:40 | ChiTotal | total:m1405_5 | -| ir.cpp:1406:23:1406:40 | SideEffect | ~m1405_5 | -| ir.cpp:1406:23:1406:40 | StoreValue | r1406_4 | -| ir.cpp:1406:23:1406:42 | Address | &:r1406_2 | -| ir.cpp:1406:23:1406:42 | StoreValue | r1406_9 | -| ir.cpp:1406:23:1406:42 | Unary | r1406_2 | -| ir.cpp:1406:23:1406:42 | Unary | r1406_8 | -| ir.cpp:1408:5:1408:13 | CallTarget | func:r1408_1 | -| ir.cpp:1408:5:1408:13 | ChiPartial | partial:m1408_6 | -| ir.cpp:1408:5:1408:13 | ChiTotal | total:m1406_6 | -| ir.cpp:1408:5:1408:13 | SideEffect | ~m1406_6 | -| ir.cpp:1408:15:1408:15 | Address | &:r1408_4 | -| ir.cpp:1408:15:1408:15 | Arg(0) | 0:r1408_4 | -| ir.cpp:1408:15:1408:15 | SideEffect | ~m1405_6 | -| ir.cpp:1408:15:1408:15 | Unary | r1408_2 | -| ir.cpp:1408:15:1408:15 | Unary | r1408_3 | -| ir.cpp:1409:5:1409:15 | CallTarget | func:r1409_1 | -| ir.cpp:1409:5:1409:15 | ChiPartial | partial:m1409_5 | -| ir.cpp:1409:5:1409:15 | ChiTotal | total:m1408_7 | -| ir.cpp:1409:5:1409:15 | SideEffect | ~m1408_7 | -| ir.cpp:1409:17:1409:17 | Address | &:r1409_2 | -| ir.cpp:1409:17:1409:17 | Arg(0) | 0:r1409_3 | -| ir.cpp:1409:17:1409:17 | Load | m1405_6 | -| ir.cpp:1411:9:1411:9 | Address | &:r1411_1 | -| ir.cpp:1411:13:1411:30 | Address | &:r1411_6 | -| ir.cpp:1411:13:1411:30 | CallTarget | func:r1411_2 | -| ir.cpp:1411:13:1411:30 | ChiPartial | partial:m1411_4 | -| ir.cpp:1411:13:1411:30 | ChiTotal | total:m1409_6 | -| ir.cpp:1411:13:1411:30 | SideEffect | ~m1409_6 | -| ir.cpp:1411:13:1411:30 | StoreValue | r1411_3 | -| ir.cpp:1411:13:1411:30 | Unary | r1411_6 | -| ir.cpp:1411:34:1411:34 | Address | &:r1411_8 | -| ir.cpp:1411:34:1411:34 | Load | ~m1411_7 | -| ir.cpp:1411:34:1411:34 | StoreValue | r1411_9 | -| ir.cpp:1413:5:1413:27 | CallTarget | func:r1413_1 | -| ir.cpp:1413:5:1413:27 | ChiPartial | partial:m1413_3 | -| ir.cpp:1413:5:1413:27 | ChiTotal | total:m1411_5 | -| ir.cpp:1413:5:1413:27 | SideEffect | ~m1411_5 | -| ir.cpp:1421:6:1421:29 | ChiPartial | partial:m1421_3 | -| ir.cpp:1421:6:1421:29 | ChiTotal | total:m1421_2 | -| ir.cpp:1421:6:1421:29 | SideEffect | ~m1426_5 | -| ir.cpp:1422:16:1422:17 | Address | &:r1422_1 | -| ir.cpp:1422:21:1422:46 | Address | &:r1422_6 | -| ir.cpp:1422:21:1422:46 | CallTarget | func:r1422_2 | -| ir.cpp:1422:21:1422:46 | ChiPartial | partial:m1422_4 | -| ir.cpp:1422:21:1422:46 | ChiTotal | total:m1421_4 | -| ir.cpp:1422:21:1422:46 | SideEffect | ~m1421_4 | -| ir.cpp:1422:21:1422:46 | StoreValue | r1422_3 | -| ir.cpp:1422:21:1422:46 | Unary | r1422_6 | -| ir.cpp:1422:21:1422:50 | StoreValue | r1422_12 | -| ir.cpp:1422:21:1422:50 | Unary | r1422_10 | -| ir.cpp:1422:21:1422:50 | Unary | r1422_11 | -| ir.cpp:1422:50:1422:50 | Address | &:r1422_8 | -| ir.cpp:1422:50:1422:50 | Load | ~m1422_7 | -| ir.cpp:1422:50:1422:50 | Unary | r1422_9 | -| ir.cpp:1423:9:1423:9 | Address | &:r1423_1 | -| ir.cpp:1423:13:1423:38 | Address | &:r1423_6 | -| ir.cpp:1423:13:1423:38 | CallTarget | func:r1423_2 | -| ir.cpp:1423:13:1423:38 | ChiPartial | partial:m1423_4 | -| ir.cpp:1423:13:1423:38 | ChiTotal | total:m1422_5 | -| ir.cpp:1423:13:1423:38 | SideEffect | ~m1422_5 | -| ir.cpp:1423:13:1423:38 | StoreValue | r1423_3 | -| ir.cpp:1423:13:1423:38 | Unary | r1423_6 | -| ir.cpp:1423:13:1423:42 | Load | ~m1423_5 | -| ir.cpp:1423:13:1423:42 | StoreValue | r1423_10 | -| ir.cpp:1423:42:1423:42 | Address | &:r1423_8 | -| ir.cpp:1423:42:1423:42 | Address | &:r1423_9 | -| ir.cpp:1423:42:1423:42 | Load | ~m1423_7 | -| ir.cpp:1425:18:1425:19 | Address | &:r1425_1 | -| ir.cpp:1425:23:1425:48 | Address | &:r1425_6 | -| ir.cpp:1425:23:1425:48 | CallTarget | func:r1425_2 | -| ir.cpp:1425:23:1425:48 | ChiPartial | partial:m1425_4 | -| ir.cpp:1425:23:1425:48 | ChiTotal | total:m1423_5 | -| ir.cpp:1425:23:1425:48 | SideEffect | ~m1423_5 | -| ir.cpp:1425:23:1425:48 | StoreValue | r1425_3 | -| ir.cpp:1425:23:1425:48 | Unary | r1425_6 | -| ir.cpp:1425:23:1425:52 | Left | r1425_9 | -| ir.cpp:1425:23:1425:55 | StoreValue | r1425_13 | -| ir.cpp:1425:23:1425:55 | Unary | r1425_11 | -| ir.cpp:1425:23:1425:55 | Unary | r1425_12 | -| ir.cpp:1425:52:1425:52 | Unary | r1425_8 | -| ir.cpp:1425:54:1425:54 | Right | r1425_10 | -| ir.cpp:1426:11:1426:11 | Address | &:r1426_1 | -| ir.cpp:1426:15:1426:40 | Address | &:r1426_6 | -| ir.cpp:1426:15:1426:40 | CallTarget | func:r1426_2 | -| ir.cpp:1426:15:1426:40 | ChiPartial | partial:m1426_4 | -| ir.cpp:1426:15:1426:40 | ChiTotal | total:m1425_5 | -| ir.cpp:1426:15:1426:40 | SideEffect | ~m1425_5 | -| ir.cpp:1426:15:1426:40 | StoreValue | r1426_3 | -| ir.cpp:1426:15:1426:40 | Unary | r1426_6 | -| ir.cpp:1426:15:1426:44 | Left | r1426_9 | -| ir.cpp:1426:15:1426:47 | Address | &:r1426_11 | -| ir.cpp:1426:15:1426:47 | Load | ~m1426_7 | -| ir.cpp:1426:15:1426:47 | StoreValue | r1426_12 | -| ir.cpp:1426:44:1426:44 | Unary | r1426_8 | -| ir.cpp:1426:46:1426:46 | Right | r1426_10 | -| ir.cpp:1443:6:1443:24 | ChiPartial | partial:m1443_3 | -| ir.cpp:1443:6:1443:24 | ChiTotal | total:m1443_2 | -| ir.cpp:1443:6:1443:24 | SideEffect | ~m1447_10 | -| ir.cpp:1444:14:1444:14 | Address | &:r1444_1 | -| ir.cpp:1444:18:1444:40 | CallTarget | func:r1444_2 | -| ir.cpp:1444:18:1444:40 | ChiPartial | partial:m1444_4 | -| ir.cpp:1444:18:1444:40 | ChiTotal | total:m1443_4 | -| ir.cpp:1444:18:1444:40 | SideEffect | ~m1443_4 | -| ir.cpp:1444:18:1444:40 | StoreValue | r1444_3 | -| ir.cpp:1445:5:1445:5 | Address | &:r1445_10 | -| ir.cpp:1445:9:1445:36 | Address | &:r1445_1 | -| ir.cpp:1445:9:1445:36 | Address | &:r1445_8 | -| ir.cpp:1445:9:1445:36 | Load | ~m1445_6 | -| ir.cpp:1445:9:1445:36 | StoreValue | r1445_9 | -| ir.cpp:1445:9:1445:36 | Unary | r1445_1 | -| ir.cpp:1445:9:1445:36 | Unary | r1445_7 | -| ir.cpp:1445:10:1445:33 | CallTarget | func:r1445_2 | -| ir.cpp:1445:10:1445:33 | ChiPartial | partial:m1445_4 | -| ir.cpp:1445:10:1445:33 | ChiTotal | total:m1444_5 | -| ir.cpp:1445:10:1445:33 | SideEffect | ~m1444_5 | -| ir.cpp:1445:10:1445:33 | StoreValue | r1445_3 | -| ir.cpp:1446:9:1446:9 | Address | &:r1446_1 | -| ir.cpp:1446:13:1446:36 | CallTarget | func:r1446_2 | -| ir.cpp:1446:13:1446:36 | ChiPartial | partial:m1446_4 | -| ir.cpp:1446:13:1446:36 | ChiTotal | total:m1445_5 | -| ir.cpp:1446:13:1446:36 | SideEffect | ~m1445_5 | -| ir.cpp:1446:13:1446:36 | StoreValue | r1446_3 | -| ir.cpp:1446:40:1446:40 | Address | &:r1446_7 | -| ir.cpp:1446:40:1446:40 | Load | ~m1446_6 | -| ir.cpp:1446:40:1446:40 | StoreValue | r1446_8 | -| ir.cpp:1447:11:1447:11 | Address | &:r1447_1 | -| ir.cpp:1447:16:1447:39 | CallTarget | func:r1447_2 | -| ir.cpp:1447:16:1447:39 | ChiPartial | partial:m1447_4 | -| ir.cpp:1447:16:1447:39 | ChiTotal | total:m1446_5 | -| ir.cpp:1447:16:1447:39 | SideEffect | ~m1446_5 | -| ir.cpp:1447:16:1447:39 | StoreValue | r1447_3 | -| ir.cpp:1447:44:1447:44 | Arg(this) | this:r0_11 | -| ir.cpp:1447:44:1447:44 | CallTarget | func:r1447_7 | -| ir.cpp:1447:44:1447:44 | ChiPartial | partial:m1447_9 | -| ir.cpp:1447:44:1447:44 | ChiTotal | total:m1447_5 | -| ir.cpp:1447:44:1447:44 | SideEffect | ~m1447_5 | -| ir.cpp:1447:44:1447:44 | StoreValue | r1447_8 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_5 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_5 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_7 | -| ir.cpp:1451:3:1451:21 | Address | &:r1451_7 | -| ir.cpp:1451:3:1451:21 | ChiPartial | partial:m1451_3 | -| ir.cpp:1451:3:1451:21 | ChiTotal | total:m1451_2 | -| ir.cpp:1451:3:1451:21 | Load | m1451_6 | -| ir.cpp:1451:3:1451:21 | SideEffect | m1451_3 | -| ir.cpp:1451:3:1451:21 | SideEffect | m1451_8 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_5 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_5 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_7 | -| ir.cpp:1457:3:1457:20 | Address | &:r1457_7 | -| ir.cpp:1457:3:1457:20 | ChiPartial | partial:m1457_3 | -| ir.cpp:1457:3:1457:20 | ChiTotal | total:m1457_2 | -| ir.cpp:1457:3:1457:20 | Load | m1457_6 | -| ir.cpp:1457:3:1457:20 | SideEffect | m1457_3 | -| ir.cpp:1457:3:1457:20 | SideEffect | m1458_6 | -| ir.cpp:1457:3:1457:20 | Unary | m1457_6 | -| ir.cpp:1457:26:1457:30 | Address | &:r1457_9 | -| ir.cpp:1457:26:1457:30 | ChiPartial | partial:m1457_11 | -| ir.cpp:1457:26:1457:30 | ChiTotal | total:m1457_8 | -| ir.cpp:1457:26:1457:30 | StoreValue | r1457_10 | -| ir.cpp:1458:5:1458:5 | Address | &:r1458_2 | -| ir.cpp:1458:5:1458:5 | Address | &:r1458_4 | -| ir.cpp:1458:5:1458:5 | Load | m1457_6 | -| ir.cpp:1458:5:1458:5 | Unary | r1458_3 | -| ir.cpp:1458:5:1458:9 | ChiPartial | partial:m1458_5 | -| ir.cpp:1458:5:1458:9 | ChiTotal | total:m1457_12 | -| ir.cpp:1458:9:1458:9 | StoreValue | r1458_1 | -| ir.cpp:1462:6:1462:29 | ChiPartial | partial:m1462_3 | -| ir.cpp:1462:6:1462:29 | ChiTotal | total:m1462_2 | -| ir.cpp:1462:6:1462:29 | SideEffect | m1462_3 | -| ir.cpp:1463:9:1463:10 | Address | &:r1463_1 | -| ir.cpp:1463:9:1463:10 | Left | r1463_1 | -| ir.cpp:1463:9:1463:10 | Left | r1463_1 | -| ir.cpp:1463:16:1463:22 | Address | &:r1463_4 | -| ir.cpp:1463:16:1463:22 | Address | &:r1463_9 | -| ir.cpp:1463:16:1463:22 | Right | r1463_3 | -| ir.cpp:1463:16:1463:22 | Right | r1463_8 | -| ir.cpp:1463:18:1463:18 | ChiPartial | partial:m1463_6 | -| ir.cpp:1463:18:1463:18 | ChiTotal | total:m1463_2 | -| ir.cpp:1463:18:1463:18 | StoreValue | r1463_5 | -| ir.cpp:1463:21:1463:21 | ChiPartial | partial:m1463_11 | -| ir.cpp:1463:21:1463:21 | ChiTotal | total:m1463_7 | -| ir.cpp:1463:21:1463:21 | StoreValue | r1463_10 | -| ir.cpp:1466:15:1466:15 | Address | &:r1466_1 | -| ir.cpp:1466:16:1466:16 | Address | &:r1466_5 | -| ir.cpp:1466:20:1466:20 | Address | &:r1466_6 | -| ir.cpp:1466:26:1466:27 | StoreValue | r1466_3 | -| ir.cpp:1466:26:1466:27 | Unary | r1466_2 | -| ir.cpp:1467:9:1467:10 | Address | &:r1467_2 | -| ir.cpp:1467:9:1467:10 | Address | &:r1467_3 | -| ir.cpp:1467:9:1467:10 | Load | m0_14 | -| ir.cpp:1467:9:1467:14 | ChiPartial | partial:m1467_4 | -| ir.cpp:1467:9:1467:14 | ChiTotal | total:m1463_12 | -| ir.cpp:1467:14:1467:14 | StoreValue | r1467_1 | -| ir.cpp:1468:14:1468:16 | Address | &:r1468_1 | -| ir.cpp:1468:20:1468:21 | Address | &:r1468_2 | -| ir.cpp:1468:20:1468:21 | Load | m0_14 | -| ir.cpp:1468:20:1468:21 | StoreValue | r1468_4 | -| ir.cpp:1468:20:1468:21 | Unary | r1468_3 | -| ir.cpp:1469:13:1469:13 | Address | &:r1469_1 | -| ir.cpp:1469:17:1469:18 | Address | &:r1469_2 | -| ir.cpp:1469:17:1469:18 | Address | &:r1469_3 | -| ir.cpp:1469:17:1469:18 | Load | m0_14 | -| ir.cpp:1469:17:1469:18 | Load | m1467_4 | -| ir.cpp:1469:17:1469:18 | StoreValue | r1469_4 | -| ir.cpp:1473:15:1473:36 | Address | &:r1473_1 | -| ir.cpp:1473:40:1473:41 | StoreValue | r1473_3 | -| ir.cpp:1473:40:1473:41 | Unary | r1473_2 | -| ir.cpp:1474:15:1474:16 | Address | &:r1474_1 | -| ir.cpp:1474:20:1474:41 | Address | &:r1474_2 | -| ir.cpp:1474:20:1474:41 | Left | r1474_5 | -| ir.cpp:1474:20:1474:41 | Load | m1473_4 | -| ir.cpp:1474:20:1474:41 | Unary | r1474_3 | -| ir.cpp:1474:20:1474:41 | Unary | r1474_4 | -| ir.cpp:1474:20:1474:44 | StoreValue | r1474_8 | -| ir.cpp:1474:20:1474:44 | Unary | r1474_7 | -| ir.cpp:1474:43:1474:43 | Right | r1474_6 | -| ir.cpp:1475:15:1475:16 | Address | &:r1475_1 | -| ir.cpp:1475:20:1475:41 | Address | &:r1475_2 | -| ir.cpp:1475:20:1475:41 | Left | r1475_5 | -| ir.cpp:1475:20:1475:41 | Load | m1473_4 | -| ir.cpp:1475:20:1475:41 | Unary | r1475_3 | -| ir.cpp:1475:20:1475:41 | Unary | r1475_4 | -| ir.cpp:1475:20:1475:44 | StoreValue | r1475_8 | -| ir.cpp:1475:20:1475:44 | Unary | r1475_7 | -| ir.cpp:1475:43:1475:43 | Right | r1475_6 | -| ir.cpp:1476:9:1476:10 | Address | &:r1476_2 | -| ir.cpp:1476:9:1476:10 | Address | &:r1476_4 | -| ir.cpp:1476:9:1476:10 | Load | m1475_9 | -| ir.cpp:1476:9:1476:10 | Unary | r1476_3 | -| ir.cpp:1476:9:1476:14 | ChiPartial | partial:m1476_5 | -| ir.cpp:1476:9:1476:14 | ChiTotal | total:m1467_5 | -| ir.cpp:1476:14:1476:14 | StoreValue | r1476_1 | -| ir.cpp:1477:14:1477:16 | Address | &:r1477_1 | -| ir.cpp:1477:20:1477:21 | Address | &:r1477_2 | -| ir.cpp:1477:20:1477:21 | Load | m1475_9 | -| ir.cpp:1477:20:1477:21 | StoreValue | r1477_5 | -| ir.cpp:1477:20:1477:21 | Unary | r1477_3 | -| ir.cpp:1477:20:1477:21 | Unary | r1477_4 | -| ir.cpp:1478:13:1478:13 | Address | &:r1478_1 | -| ir.cpp:1478:17:1478:18 | Address | &:r1478_2 | -| ir.cpp:1478:17:1478:18 | Address | &:r1478_3 | -| ir.cpp:1478:17:1478:18 | Load | m1475_9 | -| ir.cpp:1478:17:1478:18 | Load | m1476_5 | -| ir.cpp:1478:17:1478:18 | StoreValue | r1478_4 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_5 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_5 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_7 | -| ir.cpp:1482:8:1482:8 | Address | &:r1482_7 | -| ir.cpp:1482:8:1482:8 | ChiPartial | partial:m1482_3 | -| ir.cpp:1482:8:1482:8 | ChiTotal | total:m1482_2 | -| ir.cpp:1482:8:1482:8 | Load | m1482_6 | -| ir.cpp:1482:8:1482:8 | SideEffect | m1482_3 | -| ir.cpp:1482:8:1482:8 | SideEffect | m1482_8 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_5 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_7 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_9 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_10 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_13 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_17 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_18 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_21 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_25 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_26 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_29 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_33 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_34 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_37 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_41 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_42 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_45 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_49 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_50 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_53 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_57 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_58 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_61 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_65 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_66 | -| ir.cpp:1486:8:1486:8 | Address | &:r1486_69 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_3 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_3 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_15 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_23 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_31 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_39 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_47 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_55 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_63 | -| ir.cpp:1486:8:1486:8 | ChiPartial | partial:m1486_71 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_2 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_2 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_8 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_16 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_24 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_32 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_40 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_48 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_56 | -| ir.cpp:1486:8:1486:8 | ChiTotal | total:m1486_64 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m0_2 | -| ir.cpp:1486:8:1486:8 | Load | m1486_6 | -| ir.cpp:1486:8:1486:8 | Load | m1486_6 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | Load | ~m0_4 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_3 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_3 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_8 | -| ir.cpp:1486:8:1486:8 | SideEffect | m1486_72 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_14 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_22 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_30 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_38 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_46 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_54 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_62 | -| ir.cpp:1486:8:1486:8 | StoreValue | r1486_70 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | m1486_6 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_11 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_12 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_19 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_20 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_27 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_28 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_35 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_36 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_43 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_44 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_51 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_52 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_59 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_60 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_67 | -| ir.cpp:1486:8:1486:8 | Unary | r1486_68 | -| ir.cpp:1499:6:1499:35 | ChiPartial | partial:m1499_3 | -| ir.cpp:1499:6:1499:35 | ChiTotal | total:m1499_2 | -| ir.cpp:1499:6:1499:35 | SideEffect | ~m1525_7 | -| ir.cpp:1500:39:1500:39 | Address | &:r1500_1 | -| ir.cpp:1500:39:1500:39 | Address | &:r1500_1 | -| ir.cpp:1500:39:1500:39 | Arg(this) | this:r1500_1 | -| ir.cpp:1500:39:1500:39 | CallTarget | func:r1500_3 | -| ir.cpp:1500:39:1500:39 | ChiPartial | partial:m1500_5 | -| ir.cpp:1500:39:1500:39 | ChiPartial | partial:m1500_7 | -| ir.cpp:1500:39:1500:39 | ChiTotal | total:m1499_4 | -| ir.cpp:1500:39:1500:39 | ChiTotal | total:m1500_2 | -| ir.cpp:1500:39:1500:39 | SideEffect | ~m1499_4 | -| ir.cpp:1503:14:1503:14 | Address | &:r1503_1 | -| ir.cpp:1503:15:1503:15 | Address | &:r1503_5 | -| ir.cpp:1503:18:1503:18 | Address | &:r1503_9 | -| ir.cpp:1503:21:1503:21 | Address | &:r1503_13 | -| ir.cpp:1503:24:1503:24 | Address | &:r1503_17 | -| ir.cpp:1503:27:1503:27 | Address | &:r1503_23 | -| ir.cpp:1503:30:1503:30 | Address | &:r1503_27 | -| ir.cpp:1503:34:1503:34 | Address | &:r1503_31 | -| ir.cpp:1503:41:1503:41 | Address | &:r1503_37 | -| ir.cpp:1503:46:1503:46 | Address | &:r1503_2 | -| ir.cpp:1503:46:1503:46 | Load | m1500_8 | -| ir.cpp:1503:46:1503:46 | StoreValue | r1503_3 | -| ir.cpp:1503:47:1503:47 | Address | &:r1503_19 | -| ir.cpp:1503:47:1503:47 | Address | &:r1503_33 | -| ir.cpp:1503:47:1503:47 | Load | ~m1503_4 | -| ir.cpp:1503:47:1503:47 | Load | ~m1503_4 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_7 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_11 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_15 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_21 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_25 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_29 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_35 | -| ir.cpp:1503:47:1503:47 | StoreValue | r1503_39 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_6 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_10 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_14 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_18 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_20 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_24 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_28 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_32 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_34 | -| ir.cpp:1503:47:1503:47 | Unary | r1503_38 | -| ir.cpp:1504:9:1504:9 | Address | &:r1504_2 | -| ir.cpp:1504:9:1504:9 | Address | &:r1504_3 | -| ir.cpp:1504:9:1504:9 | Load | m1503_12 | -| ir.cpp:1504:9:1504:15 | ChiPartial | partial:m1504_4 | -| ir.cpp:1504:9:1504:15 | ChiTotal | total:m1503_4 | -| ir.cpp:1504:13:1504:15 | StoreValue | r1504_1 | -| ir.cpp:1505:17:1505:18 | Address | &:r1505_1 | -| ir.cpp:1505:22:1505:22 | Address | &:r1505_2 | -| ir.cpp:1505:22:1505:22 | Load | m1503_12 | -| ir.cpp:1505:22:1505:22 | StoreValue | r1505_4 | -| ir.cpp:1505:22:1505:22 | Unary | r1505_3 | -| ir.cpp:1506:13:1506:13 | Address | &:r1506_1 | -| ir.cpp:1506:17:1506:17 | Address | &:r1506_2 | -| ir.cpp:1506:17:1506:17 | Address | &:r1506_3 | -| ir.cpp:1506:17:1506:17 | Load | m1503_8 | -| ir.cpp:1506:17:1506:17 | Load | ~m1503_4 | -| ir.cpp:1506:17:1506:17 | StoreValue | r1506_4 | -| ir.cpp:1507:9:1507:9 | Address | &:r1507_2 | -| ir.cpp:1507:9:1507:9 | Address | &:r1507_3 | -| ir.cpp:1507:9:1507:9 | Load | m1503_22 | -| ir.cpp:1507:9:1507:13 | ChiPartial | partial:m1507_4 | -| ir.cpp:1507:9:1507:13 | ChiTotal | total:m1500_6 | -| ir.cpp:1507:13:1507:13 | StoreValue | r1507_1 | -| ir.cpp:1508:9:1508:10 | Address | &:r1508_5 | -| ir.cpp:1508:9:1508:14 | ChiPartial | partial:m1508_6 | -| ir.cpp:1508:9:1508:14 | ChiTotal | total:m1507_5 | -| ir.cpp:1508:10:1508:10 | Address | &:r1508_2 | -| ir.cpp:1508:10:1508:10 | Address | &:r1508_3 | -| ir.cpp:1508:10:1508:10 | Load | m1503_26 | -| ir.cpp:1508:10:1508:10 | Load | ~m1503_4 | -| ir.cpp:1508:10:1508:10 | Unary | r1508_4 | -| ir.cpp:1508:14:1508:14 | StoreValue | r1508_1 | -| ir.cpp:1509:14:1509:15 | Address | &:r1509_1 | -| ir.cpp:1509:19:1509:19 | Address | &:r1509_2 | -| ir.cpp:1509:19:1509:19 | Load | m1503_22 | -| ir.cpp:1509:19:1509:19 | StoreValue | r1509_4 | -| ir.cpp:1509:19:1509:19 | Unary | r1509_3 | -| ir.cpp:1510:14:1510:15 | Address | &:r1510_1 | -| ir.cpp:1510:19:1510:20 | StoreValue | r1510_4 | -| ir.cpp:1510:20:1510:20 | Address | &:r1510_2 | -| ir.cpp:1510:20:1510:20 | Load | m1503_22 | -| ir.cpp:1510:20:1510:20 | Unary | r1510_3 | -| ir.cpp:1511:13:1511:13 | Address | &:r1511_1 | -| ir.cpp:1511:17:1511:17 | Address | &:r1511_2 | -| ir.cpp:1511:17:1511:17 | Address | &:r1511_3 | -| ir.cpp:1511:17:1511:17 | Load | m1503_22 | -| ir.cpp:1511:17:1511:17 | Load | ~m1508_7 | -| ir.cpp:1511:17:1511:17 | StoreValue | r1511_4 | -| ir.cpp:1515:14:1515:35 | Address | &:r1515_1 | -| ir.cpp:1515:39:1515:39 | Address | &:r1515_2 | -| ir.cpp:1515:39:1515:39 | Load | m1500_8 | -| ir.cpp:1515:39:1515:39 | StoreValue | r1515_3 | -| ir.cpp:1516:15:1516:15 | Address | &:r1516_1 | -| ir.cpp:1516:19:1516:40 | Unary | r1516_2 | -| ir.cpp:1516:19:1516:42 | StoreValue | r1516_4 | -| ir.cpp:1516:42:1516:42 | Unary | r1516_3 | -| ir.cpp:1517:15:1517:15 | Address | &:r1517_1 | -| ir.cpp:1517:19:1517:40 | Unary | r1517_2 | -| ir.cpp:1517:19:1517:42 | StoreValue | r1517_4 | -| ir.cpp:1517:42:1517:42 | Unary | r1517_3 | +| ir.cpp:1307:5:1307:5 | Address | &:r1307_10 | +| ir.cpp:1307:9:1307:9 | Address | &:r1307_1 | +| ir.cpp:1307:9:1307:9 | Condition | r1307_4 | +| ir.cpp:1307:9:1307:9 | Left | r1307_2 | +| ir.cpp:1307:9:1307:9 | Load | m1301_10 | +| ir.cpp:1307:9:1307:9 | Right | r1307_3 | +| ir.cpp:1307:9:1307:9 | StoreValue | r1307_2 | +| ir.cpp:1307:9:1307:14 | Address | &:r1307_7 | +| ir.cpp:1307:9:1307:14 | Address | &:r1307_12 | +| ir.cpp:1307:9:1307:14 | Address | &:r1307_17 | +| ir.cpp:1307:9:1307:14 | Load | m1307_6 | +| ir.cpp:1307:9:1307:14 | Phi | from 14:m1307_13 | +| ir.cpp:1307:9:1307:14 | Phi | from 15:m1307_18 | +| ir.cpp:1307:9:1307:14 | StoreValue | r1307_9 | +| ir.cpp:1307:9:1307:14 | Unary | r1307_8 | +| ir.cpp:1307:14:1307:14 | Address | &:r1307_14 | +| ir.cpp:1307:14:1307:14 | Load | m1301_8 | +| ir.cpp:1307:14:1307:14 | StoreValue | r1307_16 | +| ir.cpp:1307:14:1307:14 | Unary | r1307_15 | +| ir.cpp:1308:5:1308:5 | Address | &:r1308_10 | +| ir.cpp:1308:9:1308:9 | Address | &:r1308_1 | +| ir.cpp:1308:9:1308:9 | Condition | r1308_4 | +| ir.cpp:1308:9:1308:9 | Left | r1308_2 | +| ir.cpp:1308:9:1308:9 | Load | m1301_10 | +| ir.cpp:1308:9:1308:9 | Right | r1308_3 | +| ir.cpp:1308:9:1308:9 | StoreValue | r1308_2 | +| ir.cpp:1308:9:1308:14 | Address | &:r1308_7 | +| ir.cpp:1308:9:1308:14 | Address | &:r1308_12 | +| ir.cpp:1308:9:1308:14 | Address | &:r1308_16 | +| ir.cpp:1308:9:1308:14 | Load | m1308_6 | +| ir.cpp:1308:9:1308:14 | Phi | from 17:m1308_13 | +| ir.cpp:1308:9:1308:14 | Phi | from 18:m1308_17 | +| ir.cpp:1308:9:1308:14 | StoreValue | r1308_9 | +| ir.cpp:1308:9:1308:14 | Unary | r1308_8 | +| ir.cpp:1308:14:1308:14 | Address | &:r1308_14 | +| ir.cpp:1308:14:1308:14 | Load | m1301_10 | +| ir.cpp:1308:14:1308:14 | StoreValue | r1308_15 | +| ir.cpp:1310:5:1310:5 | Address | &:r1310_9 | +| ir.cpp:1310:9:1310:26 | Address | &:r1310_7 | +| ir.cpp:1310:9:1310:26 | Address | &:r1310_11 | +| ir.cpp:1310:9:1310:26 | Address | &:r1310_33 | +| ir.cpp:1310:9:1310:26 | Load | m1310_6 | +| ir.cpp:1310:9:1310:26 | Phi | from 20:m1310_12 | +| ir.cpp:1310:9:1310:26 | Phi | from 26:m1310_34 | +| ir.cpp:1310:9:1310:26 | StoreValue | r1310_8 | +| ir.cpp:1310:10:1310:10 | Address | &:r1310_1 | +| ir.cpp:1310:10:1310:10 | Condition | r1310_4 | +| ir.cpp:1310:10:1310:10 | Left | r1310_2 | +| ir.cpp:1310:10:1310:10 | Load | m1301_8 | +| ir.cpp:1310:10:1310:10 | Right | r1310_3 | +| ir.cpp:1310:10:1310:20 | Address | &:r1310_13 | +| ir.cpp:1310:10:1310:20 | Address | &:r1310_17 | +| ir.cpp:1310:10:1310:20 | Address | &:r1310_20 | +| ir.cpp:1310:10:1310:20 | Condition | r1310_18 | +| ir.cpp:1310:10:1310:20 | Load | m1310_16 | +| ir.cpp:1310:10:1310:20 | Phi | from 21:m1310_15 | +| ir.cpp:1310:10:1310:20 | Phi | from 23:m1310_22 | +| ir.cpp:1310:10:1310:20 | StoreValue | r1310_14 | +| ir.cpp:1310:10:1310:20 | StoreValue | r1310_18 | +| ir.cpp:1310:10:1310:20 | StoreValue | r1310_21 | +| ir.cpp:1310:15:1310:15 | Address | &:r1310_23 | +| ir.cpp:1310:15:1310:15 | Condition | r1310_24 | +| ir.cpp:1310:15:1310:15 | Load | m1301_6 | +| ir.cpp:1310:20:1310:20 | Address | &:r1310_26 | +| ir.cpp:1310:20:1310:20 | Condition | r1310_29 | +| ir.cpp:1310:20:1310:20 | Left | r1310_27 | +| ir.cpp:1310:20:1310:20 | Load | m1301_10 | +| ir.cpp:1310:20:1310:20 | Right | r1310_28 | +| ir.cpp:1310:26:1310:26 | Address | &:r1310_31 | +| ir.cpp:1310:26:1310:26 | Load | m1301_8 | +| ir.cpp:1310:26:1310:26 | StoreValue | r1310_32 | +| ir.cpp:1316:5:1316:27 | Address | &:r1316_9 | +| ir.cpp:1316:5:1316:27 | ChiPartial | partial:m1316_3 | +| ir.cpp:1316:5:1316:27 | ChiTotal | total:m1316_2 | +| ir.cpp:1316:5:1316:27 | Load | m1317_11 | +| ir.cpp:1316:5:1316:27 | SideEffect | ~m1317_7 | +| ir.cpp:1316:33:1316:33 | Address | &:r1316_5 | +| ir.cpp:1316:40:1316:40 | Address | &:r1316_7 | +| ir.cpp:1317:5:1317:48 | Address | &:r1317_1 | +| ir.cpp:1317:12:1317:21 | CallTarget | func:r1317_2 | +| ir.cpp:1317:12:1317:21 | ChiPartial | partial:m1317_4 | +| ir.cpp:1317:12:1317:21 | ChiTotal | total:m1316_4 | +| ir.cpp:1317:12:1317:21 | Condition | r1317_3 | +| ir.cpp:1317:12:1317:21 | SideEffect | ~m1316_4 | +| ir.cpp:1317:12:1317:47 | Address | &:r1317_9 | +| ir.cpp:1317:12:1317:47 | Address | &:r1317_19 | +| ir.cpp:1317:12:1317:47 | Address | &:r1317_24 | +| ir.cpp:1317:12:1317:47 | Load | m1317_8 | +| ir.cpp:1317:12:1317:47 | Phi | from 3:m1317_20 | +| ir.cpp:1317:12:1317:47 | Phi | from 3:~m1317_15 | +| ir.cpp:1317:12:1317:47 | Phi | from 4:m1317_25 | +| ir.cpp:1317:12:1317:47 | Phi | from 4:~m1317_21 | +| ir.cpp:1317:12:1317:47 | StoreValue | r1317_10 | +| ir.cpp:1317:28:1317:37 | CallTarget | func:r1317_12 | +| ir.cpp:1317:28:1317:37 | ChiPartial | partial:m1317_14 | +| ir.cpp:1317:28:1317:37 | ChiTotal | total:m1317_5 | +| ir.cpp:1317:28:1317:37 | Condition | r1317_13 | +| ir.cpp:1317:28:1317:37 | SideEffect | ~m1317_5 | +| ir.cpp:1317:43:1317:43 | Address | &:r1317_17 | +| ir.cpp:1317:43:1317:43 | Load | m1316_6 | +| ir.cpp:1317:43:1317:43 | StoreValue | r1317_18 | +| ir.cpp:1317:47:1317:47 | Address | &:r1317_22 | +| ir.cpp:1317:47:1317:47 | Load | m1316_8 | +| ir.cpp:1317:47:1317:47 | Phi | from 0:~m1317_5 | +| ir.cpp:1317:47:1317:47 | Phi | from 2:~m1317_15 | +| ir.cpp:1317:47:1317:47 | StoreValue | r1317_23 | +| ir.cpp:1322:6:1322:6 | ChiPartial | partial:m1322_3 | +| ir.cpp:1322:6:1322:6 | ChiTotal | total:m1322_2 | +| ir.cpp:1322:6:1322:6 | SideEffect | ~m1324_8 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_5 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_5 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_7 | +| ir.cpp:1322:13:1322:13 | Address | &:r1322_7 | +| ir.cpp:1322:13:1322:13 | Load | m1322_6 | +| ir.cpp:1322:13:1322:13 | SideEffect | m1322_8 | +| ir.cpp:1324:3:1324:13 | Address | &:r1324_6 | +| ir.cpp:1324:3:1324:13 | Arg(0) | 0:r1324_2 | +| ir.cpp:1324:3:1324:13 | CallTarget | func:r1324_1 | +| ir.cpp:1324:3:1324:13 | ChiPartial | partial:m1324_7 | +| ir.cpp:1324:3:1324:13 | ChiTotal | total:m1322_4 | +| ir.cpp:1324:3:1324:13 | SideEffect | ~m1322_4 | +| ir.cpp:1324:3:1324:13 | Unary | r1324_6 | +| ir.cpp:1324:8:1324:8 | Address | &:r1324_3 | +| ir.cpp:1324:8:1324:8 | Arg(1) | 1:r1324_5 | +| ir.cpp:1324:8:1324:8 | Load | m1322_6 | +| ir.cpp:1324:8:1324:8 | Unary | r1324_4 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | Address | &:r1328_5 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiPartial | partial:m1328_3 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | ChiTotal | total:m1328_2 | +| ir.cpp:1328:3:1328:3 | Load | m1329_3 | +| ir.cpp:1328:3:1328:3 | Load | m1329_3 | +| ir.cpp:1328:3:1328:3 | Load | m1329_8 | +| ir.cpp:1328:3:1328:3 | Load | m1329_8 | +| ir.cpp:1328:3:1328:3 | SideEffect | m1328_3 | +| ir.cpp:1328:3:1328:3 | SideEffect | m1328_3 | +| ir.cpp:1328:3:1328:3 | SideEffect | ~m1329_6 | +| ir.cpp:1328:3:1328:3 | SideEffect | ~m1329_6 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Address | &:r1329_1 | +| ir.cpp:1329:5:1329:15 | Arg(this) | this:r1329_1 | +| ir.cpp:1329:5:1329:15 | Arg(this) | this:r1329_1 | +| ir.cpp:1329:5:1329:15 | CallTarget | func:r1329_3 | +| ir.cpp:1329:5:1329:15 | CallTarget | func:r1329_3 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_5 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_5 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_7 | +| ir.cpp:1329:5:1329:15 | ChiPartial | partial:m1329_7 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1328_4 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1328_4 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1329_2 | +| ir.cpp:1329:5:1329:15 | ChiTotal | total:m1329_2 | +| ir.cpp:1329:5:1329:15 | SideEffect | ~m1328_4 | +| ir.cpp:1329:5:1329:15 | SideEffect | ~m1328_4 | +| ir.cpp:1329:5:1329:15 | StoreValue | r1329_2 | +| ir.cpp:1329:5:1329:15 | StoreValue | r1329_2 | +| ir.cpp:1367:6:1367:21 | ChiPartial | partial:m1367_3 | +| ir.cpp:1367:6:1367:21 | ChiTotal | total:m1367_2 | +| ir.cpp:1367:6:1367:21 | SideEffect | ~m1378_5 | +| ir.cpp:1368:12:1368:12 | Address | &:r1368_1 | +| ir.cpp:1368:16:1368:34 | CallTarget | func:r1368_2 | +| ir.cpp:1368:16:1368:34 | ChiPartial | partial:m1368_4 | +| ir.cpp:1368:16:1368:34 | ChiTotal | total:m1367_4 | +| ir.cpp:1368:16:1368:34 | SideEffect | ~m1367_4 | +| ir.cpp:1368:16:1368:34 | StoreValue | r1368_3 | +| ir.cpp:1369:19:1369:20 | Address | &:r1369_1 | +| ir.cpp:1369:24:1369:42 | CallTarget | func:r1369_3 | +| ir.cpp:1369:24:1369:42 | ChiPartial | partial:m1369_5 | +| ir.cpp:1369:24:1369:42 | ChiTotal | total:m1368_5 | +| ir.cpp:1369:24:1369:42 | SideEffect | ~m1368_5 | +| ir.cpp:1369:24:1369:42 | StoreValue | r1369_4 | +| ir.cpp:1369:24:1369:44 | Address | &:r1369_2 | +| ir.cpp:1369:24:1369:44 | StoreValue | r1369_9 | +| ir.cpp:1369:24:1369:44 | Unary | r1369_2 | +| ir.cpp:1369:24:1369:44 | Unary | r1369_8 | +| ir.cpp:1371:5:1371:13 | CallTarget | func:r1371_1 | +| ir.cpp:1371:5:1371:13 | ChiPartial | partial:m1371_6 | +| ir.cpp:1371:5:1371:13 | ChiTotal | total:m1369_6 | +| ir.cpp:1371:5:1371:13 | SideEffect | ~m1369_6 | +| ir.cpp:1371:15:1371:15 | Address | &:r1371_4 | +| ir.cpp:1371:15:1371:15 | Arg(0) | 0:r1371_4 | +| ir.cpp:1371:15:1371:15 | SideEffect | ~m1368_6 | +| ir.cpp:1371:15:1371:15 | Unary | r1371_2 | +| ir.cpp:1371:15:1371:15 | Unary | r1371_3 | +| ir.cpp:1372:5:1372:21 | CallTarget | func:r1372_1 | +| ir.cpp:1372:5:1372:21 | ChiPartial | partial:m1372_15 | +| ir.cpp:1372:5:1372:21 | ChiTotal | total:m1372_9 | +| ir.cpp:1372:5:1372:21 | SideEffect | ~m1372_9 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_2 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_2 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_6 | +| ir.cpp:1372:23:1372:27 | Address | &:r1372_13 | +| ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_6 | +| ir.cpp:1372:23:1372:27 | Arg(0) | 0:r1372_13 | +| ir.cpp:1372:23:1372:27 | Arg(this) | this:r1372_2 | +| ir.cpp:1372:23:1372:27 | CallTarget | func:r1372_4 | +| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_8 | +| ir.cpp:1372:23:1372:27 | ChiPartial | partial:m1372_11 | +| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1371_7 | +| ir.cpp:1372:23:1372:27 | ChiTotal | total:m1372_3 | +| ir.cpp:1372:23:1372:27 | SideEffect | ~m1367_3 | +| ir.cpp:1372:23:1372:27 | SideEffect | ~m1371_7 | +| ir.cpp:1372:23:1372:27 | SideEffect | ~m1372_12 | +| ir.cpp:1372:23:1372:27 | Unary | r1372_2 | +| ir.cpp:1372:23:1372:27 | Unary | r1372_5 | +| ir.cpp:1373:5:1373:15 | CallTarget | func:r1373_1 | +| ir.cpp:1373:5:1373:15 | ChiPartial | partial:m1373_16 | +| ir.cpp:1373:5:1373:15 | ChiTotal | total:m1373_10 | +| ir.cpp:1373:5:1373:15 | SideEffect | ~m1373_10 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_2 | +| ir.cpp:1373:17:1373:17 | Address | &:r1373_7 | +| ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_7 | +| ir.cpp:1373:17:1373:17 | Arg(0) | 0:r1373_14 | +| ir.cpp:1373:17:1373:17 | Arg(this) | this:r1373_2 | +| ir.cpp:1373:17:1373:17 | CallTarget | func:r1373_4 | +| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_9 | +| ir.cpp:1373:17:1373:17 | ChiPartial | partial:m1373_12 | +| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1372_16 | +| ir.cpp:1373:17:1373:17 | ChiTotal | total:m1373_3 | +| ir.cpp:1373:17:1373:17 | Load | m1373_13 | +| ir.cpp:1373:17:1373:17 | SideEffect | ~m1368_6 | +| ir.cpp:1373:17:1373:17 | SideEffect | ~m1372_16 | +| ir.cpp:1373:17:1373:17 | Unary | r1373_5 | +| ir.cpp:1373:17:1373:17 | Unary | r1373_6 | +| ir.cpp:1374:5:1374:23 | CallTarget | func:r1374_1 | +| ir.cpp:1374:5:1374:23 | ChiPartial | partial:m1374_15 | +| ir.cpp:1374:5:1374:23 | ChiTotal | total:m1374_9 | +| ir.cpp:1374:5:1374:23 | SideEffect | ~m1374_9 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_2 | +| ir.cpp:1374:25:1374:29 | Address | &:r1374_6 | +| ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_6 | +| ir.cpp:1374:25:1374:29 | Arg(0) | 0:r1374_13 | +| ir.cpp:1374:25:1374:29 | Arg(this) | this:r1374_2 | +| ir.cpp:1374:25:1374:29 | CallTarget | func:r1374_4 | +| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_8 | +| ir.cpp:1374:25:1374:29 | ChiPartial | partial:m1374_11 | +| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1373_17 | +| ir.cpp:1374:25:1374:29 | ChiTotal | total:m1374_3 | +| ir.cpp:1374:25:1374:29 | Load | m1374_12 | +| ir.cpp:1374:25:1374:29 | SideEffect | ~m1367_3 | +| ir.cpp:1374:25:1374:29 | SideEffect | ~m1373_17 | +| ir.cpp:1374:25:1374:29 | Unary | r1374_5 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_1 | +| ir.cpp:1375:5:1375:12 | Address | &:r1375_9 | +| ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_1 | +| ir.cpp:1375:5:1375:12 | Arg(this) | this:r1375_9 | +| ir.cpp:1375:5:1375:12 | CallTarget | func:r1375_3 | +| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_5 | +| ir.cpp:1375:5:1375:12 | ChiPartial | partial:m1375_7 | +| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1374_16 | +| ir.cpp:1375:5:1375:12 | ChiTotal | total:m1375_2 | +| ir.cpp:1375:5:1375:12 | SideEffect | m1375_8 | +| ir.cpp:1375:5:1375:12 | SideEffect | ~m1374_16 | +| ir.cpp:1375:5:1375:12 | Unary | r1375_1 | +| ir.cpp:1375:14:1375:18 | CallTarget | func:r1375_10 | +| ir.cpp:1375:14:1375:18 | ChiPartial | partial:m1375_12 | +| ir.cpp:1375:14:1375:18 | ChiTotal | total:m1375_6 | +| ir.cpp:1375:14:1375:18 | SideEffect | ~m1375_6 | +| ir.cpp:1376:5:1376:23 | CallTarget | func:r1376_2 | +| ir.cpp:1376:5:1376:23 | ChiPartial | partial:m1376_4 | +| ir.cpp:1376:5:1376:23 | ChiTotal | total:m1375_13 | +| ir.cpp:1376:5:1376:23 | SideEffect | ~m1375_13 | +| ir.cpp:1376:5:1376:23 | StoreValue | r1376_3 | +| ir.cpp:1376:5:1376:25 | Address | &:r1376_1 | +| ir.cpp:1376:5:1376:25 | Address | &:r1376_7 | +| ir.cpp:1376:5:1376:25 | Arg(this) | this:r1376_7 | +| ir.cpp:1376:5:1376:25 | SideEffect | m1376_6 | +| ir.cpp:1376:5:1376:25 | Unary | r1376_1 | +| ir.cpp:1376:27:1376:31 | CallTarget | func:r1376_8 | +| ir.cpp:1376:27:1376:31 | ChiPartial | partial:m1376_10 | +| ir.cpp:1376:27:1376:31 | ChiTotal | total:m1376_5 | +| ir.cpp:1376:27:1376:31 | SideEffect | ~m1376_5 | +| ir.cpp:1378:5:1378:28 | CallTarget | func:r1378_2 | +| ir.cpp:1378:5:1378:28 | ChiPartial | partial:m1378_4 | +| ir.cpp:1378:5:1378:28 | ChiTotal | total:m1376_11 | +| ir.cpp:1378:5:1378:28 | SideEffect | ~m1376_11 | +| ir.cpp:1378:5:1378:28 | StoreValue | r1378_3 | +| ir.cpp:1378:5:1378:30 | Address | &:r1378_1 | +| ir.cpp:1381:6:1381:30 | ChiPartial | partial:m1381_3 | +| ir.cpp:1381:6:1381:30 | ChiTotal | total:m1381_2 | +| ir.cpp:1381:6:1381:30 | SideEffect | ~m1390_5 | +| ir.cpp:1382:21:1382:21 | Address | &:r1382_1 | +| ir.cpp:1382:25:1382:52 | CallTarget | func:r1382_2 | +| ir.cpp:1382:25:1382:52 | ChiPartial | partial:m1382_4 | +| ir.cpp:1382:25:1382:52 | ChiTotal | total:m1381_4 | +| ir.cpp:1382:25:1382:52 | SideEffect | ~m1381_4 | +| ir.cpp:1382:25:1382:52 | StoreValue | r1382_3 | +| ir.cpp:1383:28:1383:29 | Address | &:r1383_1 | +| ir.cpp:1383:33:1383:60 | CallTarget | func:r1383_3 | +| ir.cpp:1383:33:1383:60 | ChiPartial | partial:m1383_5 | +| ir.cpp:1383:33:1383:60 | ChiTotal | total:m1382_5 | +| ir.cpp:1383:33:1383:60 | SideEffect | ~m1382_5 | +| ir.cpp:1383:33:1383:60 | StoreValue | r1383_4 | +| ir.cpp:1383:33:1383:62 | Address | &:r1383_2 | +| ir.cpp:1383:33:1383:62 | StoreValue | r1383_9 | +| ir.cpp:1383:33:1383:62 | Unary | r1383_2 | +| ir.cpp:1383:33:1383:62 | Unary | r1383_8 | +| ir.cpp:1384:21:1384:22 | Address | &:r1384_1 | +| ir.cpp:1385:5:1385:13 | CallTarget | func:r1385_1 | +| ir.cpp:1385:5:1385:13 | ChiPartial | partial:m1385_6 | +| ir.cpp:1385:5:1385:13 | ChiTotal | total:m1383_6 | +| ir.cpp:1385:5:1385:13 | SideEffect | ~m1383_6 | +| ir.cpp:1385:15:1385:15 | Address | &:r1385_4 | +| ir.cpp:1385:15:1385:15 | Arg(0) | 0:r1385_4 | +| ir.cpp:1385:15:1385:15 | SideEffect | ~m1382_6 | +| ir.cpp:1385:15:1385:15 | Unary | r1385_2 | +| ir.cpp:1385:15:1385:15 | Unary | r1385_3 | +| ir.cpp:1386:5:1386:15 | CallTarget | func:r1386_1 | +| ir.cpp:1386:5:1386:15 | ChiPartial | partial:m1386_8 | +| ir.cpp:1386:5:1386:15 | ChiTotal | total:m1385_7 | +| ir.cpp:1386:5:1386:15 | SideEffect | ~m1385_7 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_2 | +| ir.cpp:1386:17:1386:17 | Address | &:r1386_3 | +| ir.cpp:1386:17:1386:17 | Arg(0) | 0:r1386_6 | +| ir.cpp:1386:17:1386:17 | Load | m1382_6 | +| ir.cpp:1386:17:1386:17 | Load | m1386_5 | +| ir.cpp:1386:17:1386:17 | StoreValue | r1386_4 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | +| ir.cpp:1387:5:1387:21 | Address | &:r1387_1 | +| ir.cpp:1387:5:1387:21 | Arg(this) | this:r1387_1 | +| ir.cpp:1387:5:1387:21 | ChiPartial | partial:m1387_9 | +| ir.cpp:1387:5:1387:21 | ChiTotal | total:m1387_3 | +| ir.cpp:1387:5:1387:21 | SideEffect | m1387_3 | +| ir.cpp:1387:5:1387:21 | StoreValue | r1387_2 | +| ir.cpp:1387:23:1387:28 | CallTarget | func:r1387_4 | +| ir.cpp:1387:23:1387:28 | ChiPartial | partial:m1387_6 | +| ir.cpp:1387:23:1387:28 | ChiTotal | total:m1386_9 | +| ir.cpp:1387:23:1387:28 | SideEffect | ~m1386_9 | +| ir.cpp:1388:5:1388:32 | CallTarget | func:r1388_2 | +| ir.cpp:1388:5:1388:32 | ChiPartial | partial:m1388_4 | +| ir.cpp:1388:5:1388:32 | ChiTotal | total:m1387_7 | +| ir.cpp:1388:5:1388:32 | SideEffect | ~m1387_7 | +| ir.cpp:1388:5:1388:32 | StoreValue | r1388_3 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | +| ir.cpp:1388:5:1388:34 | Address | &:r1388_1 | +| ir.cpp:1388:5:1388:34 | Arg(this) | this:r1388_1 | +| ir.cpp:1388:5:1388:34 | ChiPartial | partial:m1388_12 | +| ir.cpp:1388:5:1388:34 | ChiTotal | total:m1388_6 | +| ir.cpp:1388:5:1388:34 | SideEffect | m1388_6 | +| ir.cpp:1388:36:1388:41 | CallTarget | func:r1388_7 | +| ir.cpp:1388:36:1388:41 | ChiPartial | partial:m1388_9 | +| ir.cpp:1388:36:1388:41 | ChiTotal | total:m1388_5 | +| ir.cpp:1388:36:1388:41 | SideEffect | ~m1388_5 | +| ir.cpp:1390:5:1390:37 | CallTarget | func:r1390_2 | +| ir.cpp:1390:5:1390:37 | ChiPartial | partial:m1390_4 | +| ir.cpp:1390:5:1390:37 | ChiTotal | total:m1388_10 | +| ir.cpp:1390:5:1390:37 | SideEffect | ~m1388_10 | +| ir.cpp:1390:5:1390:37 | StoreValue | r1390_3 | +| ir.cpp:1390:5:1390:39 | Address | &:r1390_1 | +| ir.cpp:1393:6:1393:31 | ChiPartial | partial:m1393_3 | +| ir.cpp:1393:6:1393:31 | ChiTotal | total:m1393_2 | +| ir.cpp:1393:6:1393:31 | SideEffect | ~m1403_6 | +| ir.cpp:1394:22:1394:22 | Address | &:r1394_1 | +| ir.cpp:1394:26:1394:54 | CallTarget | func:r1394_2 | +| ir.cpp:1394:26:1394:54 | ChiPartial | partial:m1394_4 | +| ir.cpp:1394:26:1394:54 | ChiTotal | total:m1393_4 | +| ir.cpp:1394:26:1394:54 | SideEffect | ~m1393_4 | +| ir.cpp:1394:26:1394:54 | StoreValue | r1394_3 | +| ir.cpp:1395:29:1395:30 | Address | &:r1395_1 | +| ir.cpp:1395:34:1395:62 | CallTarget | func:r1395_3 | +| ir.cpp:1395:34:1395:62 | ChiPartial | partial:m1395_5 | +| ir.cpp:1395:34:1395:62 | ChiTotal | total:m1394_5 | +| ir.cpp:1395:34:1395:62 | SideEffect | ~m1394_5 | +| ir.cpp:1395:34:1395:62 | StoreValue | r1395_4 | +| ir.cpp:1395:34:1395:64 | Address | &:r1395_2 | +| ir.cpp:1395:34:1395:64 | StoreValue | r1395_9 | +| ir.cpp:1395:34:1395:64 | Unary | r1395_2 | +| ir.cpp:1395:34:1395:64 | Unary | r1395_8 | +| ir.cpp:1396:22:1396:23 | Address | &:r1396_1 | +| ir.cpp:1396:22:1396:23 | Address | &:r1396_1 | +| ir.cpp:1396:22:1396:23 | Arg(this) | this:r1396_1 | +| ir.cpp:1396:22:1396:23 | CallTarget | func:r1396_3 | +| ir.cpp:1396:22:1396:23 | ChiPartial | partial:m1396_5 | +| ir.cpp:1396:22:1396:23 | ChiPartial | partial:m1396_7 | +| ir.cpp:1396:22:1396:23 | ChiTotal | total:m1395_6 | +| ir.cpp:1396:22:1396:23 | ChiTotal | total:m1396_2 | +| ir.cpp:1396:22:1396:23 | SideEffect | ~m1395_6 | +| ir.cpp:1397:5:1397:13 | CallTarget | func:r1397_1 | +| ir.cpp:1397:5:1397:13 | ChiPartial | partial:m1397_6 | +| ir.cpp:1397:5:1397:13 | ChiTotal | total:m1396_6 | +| ir.cpp:1397:5:1397:13 | SideEffect | ~m1396_6 | +| ir.cpp:1397:15:1397:15 | Address | &:r1397_4 | +| ir.cpp:1397:15:1397:15 | Arg(0) | 0:r1397_4 | +| ir.cpp:1397:15:1397:15 | SideEffect | ~m1394_6 | +| ir.cpp:1397:15:1397:15 | Unary | r1397_2 | +| ir.cpp:1397:15:1397:15 | Unary | r1397_3 | +| ir.cpp:1398:5:1398:15 | CallTarget | func:r1398_1 | +| ir.cpp:1398:5:1398:15 | ChiPartial | partial:m1398_16 | +| ir.cpp:1398:5:1398:15 | ChiTotal | total:m1398_10 | +| ir.cpp:1398:5:1398:15 | SideEffect | ~m1398_10 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_2 | +| ir.cpp:1398:17:1398:17 | Address | &:r1398_7 | +| ir.cpp:1398:17:1398:17 | Arg(0) | 0:r1398_7 | +| ir.cpp:1398:17:1398:17 | Arg(0) | 0:r1398_14 | +| ir.cpp:1398:17:1398:17 | Arg(this) | this:r1398_2 | +| ir.cpp:1398:17:1398:17 | CallTarget | func:r1398_4 | +| ir.cpp:1398:17:1398:17 | ChiPartial | partial:m1398_9 | +| ir.cpp:1398:17:1398:17 | ChiPartial | partial:m1398_12 | +| ir.cpp:1398:17:1398:17 | ChiTotal | total:m1397_7 | +| ir.cpp:1398:17:1398:17 | ChiTotal | total:m1398_3 | +| ir.cpp:1398:17:1398:17 | Load | m1398_13 | +| ir.cpp:1398:17:1398:17 | SideEffect | ~m1394_6 | +| ir.cpp:1398:17:1398:17 | SideEffect | ~m1397_7 | +| ir.cpp:1398:17:1398:17 | Unary | r1398_5 | +| ir.cpp:1398:17:1398:17 | Unary | r1398_6 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Address | &:r1399_1 | +| ir.cpp:1399:5:1399:22 | Arg(this) | this:r1399_1 | +| ir.cpp:1399:5:1399:22 | Arg(this) | this:r1399_1 | +| ir.cpp:1399:5:1399:22 | CallTarget | func:r1399_3 | +| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_5 | +| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_7 | +| ir.cpp:1399:5:1399:22 | ChiPartial | partial:m1399_14 | +| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1398_17 | +| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1399_2 | +| ir.cpp:1399:5:1399:22 | ChiTotal | total:m1399_8 | +| ir.cpp:1399:5:1399:22 | SideEffect | m1399_8 | +| ir.cpp:1399:5:1399:22 | SideEffect | ~m1398_17 | +| ir.cpp:1399:24:1399:29 | CallTarget | func:r1399_9 | +| ir.cpp:1399:24:1399:29 | ChiPartial | partial:m1399_11 | +| ir.cpp:1399:24:1399:29 | ChiTotal | total:m1399_6 | +| ir.cpp:1399:24:1399:29 | SideEffect | ~m1399_6 | +| ir.cpp:1400:5:1400:33 | CallTarget | func:r1400_2 | +| ir.cpp:1400:5:1400:33 | ChiPartial | partial:m1400_4 | +| ir.cpp:1400:5:1400:33 | ChiTotal | total:m1399_12 | +| ir.cpp:1400:5:1400:33 | SideEffect | ~m1399_12 | +| ir.cpp:1400:5:1400:33 | StoreValue | r1400_3 | +| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | +| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | +| ir.cpp:1400:5:1400:35 | Address | &:r1400_1 | +| ir.cpp:1400:5:1400:35 | Arg(this) | this:r1400_1 | +| ir.cpp:1400:5:1400:35 | ChiPartial | partial:m1400_12 | +| ir.cpp:1400:5:1400:35 | ChiTotal | total:m1400_6 | +| ir.cpp:1400:5:1400:35 | SideEffect | m1400_6 | +| ir.cpp:1400:37:1400:42 | CallTarget | func:r1400_7 | +| ir.cpp:1400:37:1400:42 | ChiPartial | partial:m1400_9 | +| ir.cpp:1400:37:1400:42 | ChiTotal | total:m1400_5 | +| ir.cpp:1400:37:1400:42 | SideEffect | ~m1400_5 | +| ir.cpp:1401:5:1401:38 | CallTarget | func:r1401_2 | +| ir.cpp:1401:5:1401:38 | ChiPartial | partial:m1401_4 | +| ir.cpp:1401:5:1401:38 | ChiTotal | total:m1400_10 | +| ir.cpp:1401:5:1401:38 | SideEffect | ~m1400_10 | +| ir.cpp:1401:5:1401:38 | StoreValue | r1401_3 | +| ir.cpp:1401:5:1401:40 | Address | &:r1401_1 | +| ir.cpp:1403:9:1403:9 | Address | &:r1403_1 | +| ir.cpp:1403:13:1403:41 | CallTarget | func:r1403_3 | +| ir.cpp:1403:13:1403:41 | ChiPartial | partial:m1403_5 | +| ir.cpp:1403:13:1403:41 | ChiTotal | total:m1401_5 | +| ir.cpp:1403:13:1403:41 | SideEffect | ~m1401_5 | +| ir.cpp:1403:13:1403:41 | StoreValue | r1403_4 | +| ir.cpp:1403:13:1403:43 | Address | &:r1403_2 | +| ir.cpp:1403:13:1403:43 | Unary | r1403_2 | +| ir.cpp:1403:45:1403:45 | Address | &:r1403_8 | +| ir.cpp:1403:45:1403:45 | Load | ~m1403_7 | +| ir.cpp:1403:45:1403:45 | StoreValue | r1403_9 | +| ir.cpp:1406:6:1406:20 | ChiPartial | partial:m1406_3 | +| ir.cpp:1406:6:1406:20 | ChiTotal | total:m1406_2 | +| ir.cpp:1406:6:1406:20 | SideEffect | ~m1415_4 | +| ir.cpp:1407:11:1407:11 | Address | &:r1407_1 | +| ir.cpp:1407:15:1407:32 | CallTarget | func:r1407_2 | +| ir.cpp:1407:15:1407:32 | ChiPartial | partial:m1407_4 | +| ir.cpp:1407:15:1407:32 | ChiTotal | total:m1406_4 | +| ir.cpp:1407:15:1407:32 | SideEffect | ~m1406_4 | +| ir.cpp:1407:15:1407:32 | StoreValue | r1407_3 | +| ir.cpp:1408:18:1408:19 | Address | &:r1408_1 | +| ir.cpp:1408:23:1408:40 | CallTarget | func:r1408_3 | +| ir.cpp:1408:23:1408:40 | ChiPartial | partial:m1408_5 | +| ir.cpp:1408:23:1408:40 | ChiTotal | total:m1407_5 | +| ir.cpp:1408:23:1408:40 | SideEffect | ~m1407_5 | +| ir.cpp:1408:23:1408:40 | StoreValue | r1408_4 | +| ir.cpp:1408:23:1408:42 | Address | &:r1408_2 | +| ir.cpp:1408:23:1408:42 | StoreValue | r1408_9 | +| ir.cpp:1408:23:1408:42 | Unary | r1408_2 | +| ir.cpp:1408:23:1408:42 | Unary | r1408_8 | +| ir.cpp:1410:5:1410:13 | CallTarget | func:r1410_1 | +| ir.cpp:1410:5:1410:13 | ChiPartial | partial:m1410_6 | +| ir.cpp:1410:5:1410:13 | ChiTotal | total:m1408_6 | +| ir.cpp:1410:5:1410:13 | SideEffect | ~m1408_6 | +| ir.cpp:1410:15:1410:15 | Address | &:r1410_4 | +| ir.cpp:1410:15:1410:15 | Arg(0) | 0:r1410_4 | +| ir.cpp:1410:15:1410:15 | SideEffect | ~m1407_6 | +| ir.cpp:1410:15:1410:15 | Unary | r1410_2 | +| ir.cpp:1410:15:1410:15 | Unary | r1410_3 | +| ir.cpp:1411:5:1411:15 | CallTarget | func:r1411_1 | +| ir.cpp:1411:5:1411:15 | ChiPartial | partial:m1411_5 | +| ir.cpp:1411:5:1411:15 | ChiTotal | total:m1410_7 | +| ir.cpp:1411:5:1411:15 | SideEffect | ~m1410_7 | +| ir.cpp:1411:17:1411:17 | Address | &:r1411_2 | +| ir.cpp:1411:17:1411:17 | Arg(0) | 0:r1411_3 | +| ir.cpp:1411:17:1411:17 | Load | m1407_6 | +| ir.cpp:1413:9:1413:9 | Address | &:r1413_1 | +| ir.cpp:1413:13:1413:30 | Address | &:r1413_6 | +| ir.cpp:1413:13:1413:30 | CallTarget | func:r1413_2 | +| ir.cpp:1413:13:1413:30 | ChiPartial | partial:m1413_4 | +| ir.cpp:1413:13:1413:30 | ChiTotal | total:m1411_6 | +| ir.cpp:1413:13:1413:30 | SideEffect | ~m1411_6 | +| ir.cpp:1413:13:1413:30 | StoreValue | r1413_3 | +| ir.cpp:1413:13:1413:30 | Unary | r1413_6 | +| ir.cpp:1413:34:1413:34 | Address | &:r1413_8 | +| ir.cpp:1413:34:1413:34 | Load | ~m1413_7 | +| ir.cpp:1413:34:1413:34 | StoreValue | r1413_9 | +| ir.cpp:1415:5:1415:27 | CallTarget | func:r1415_1 | +| ir.cpp:1415:5:1415:27 | ChiPartial | partial:m1415_3 | +| ir.cpp:1415:5:1415:27 | ChiTotal | total:m1413_5 | +| ir.cpp:1415:5:1415:27 | SideEffect | ~m1413_5 | +| ir.cpp:1423:6:1423:29 | ChiPartial | partial:m1423_3 | +| ir.cpp:1423:6:1423:29 | ChiTotal | total:m1423_2 | +| ir.cpp:1423:6:1423:29 | SideEffect | ~m1428_5 | +| ir.cpp:1424:16:1424:17 | Address | &:r1424_1 | +| ir.cpp:1424:21:1424:46 | Address | &:r1424_6 | +| ir.cpp:1424:21:1424:46 | CallTarget | func:r1424_2 | +| ir.cpp:1424:21:1424:46 | ChiPartial | partial:m1424_4 | +| ir.cpp:1424:21:1424:46 | ChiTotal | total:m1423_4 | +| ir.cpp:1424:21:1424:46 | SideEffect | ~m1423_4 | +| ir.cpp:1424:21:1424:46 | StoreValue | r1424_3 | +| ir.cpp:1424:21:1424:46 | Unary | r1424_6 | +| ir.cpp:1424:21:1424:50 | StoreValue | r1424_12 | +| ir.cpp:1424:21:1424:50 | Unary | r1424_10 | +| ir.cpp:1424:21:1424:50 | Unary | r1424_11 | +| ir.cpp:1424:50:1424:50 | Address | &:r1424_8 | +| ir.cpp:1424:50:1424:50 | Load | ~m1424_7 | +| ir.cpp:1424:50:1424:50 | Unary | r1424_9 | +| ir.cpp:1425:9:1425:9 | Address | &:r1425_1 | +| ir.cpp:1425:13:1425:38 | Address | &:r1425_6 | +| ir.cpp:1425:13:1425:38 | CallTarget | func:r1425_2 | +| ir.cpp:1425:13:1425:38 | ChiPartial | partial:m1425_4 | +| ir.cpp:1425:13:1425:38 | ChiTotal | total:m1424_5 | +| ir.cpp:1425:13:1425:38 | SideEffect | ~m1424_5 | +| ir.cpp:1425:13:1425:38 | StoreValue | r1425_3 | +| ir.cpp:1425:13:1425:38 | Unary | r1425_6 | +| ir.cpp:1425:13:1425:42 | Load | ~m1425_5 | +| ir.cpp:1425:13:1425:42 | StoreValue | r1425_10 | +| ir.cpp:1425:42:1425:42 | Address | &:r1425_8 | +| ir.cpp:1425:42:1425:42 | Address | &:r1425_9 | +| ir.cpp:1425:42:1425:42 | Load | ~m1425_7 | +| ir.cpp:1427:18:1427:19 | Address | &:r1427_1 | +| ir.cpp:1427:23:1427:48 | Address | &:r1427_6 | +| ir.cpp:1427:23:1427:48 | CallTarget | func:r1427_2 | +| ir.cpp:1427:23:1427:48 | ChiPartial | partial:m1427_4 | +| ir.cpp:1427:23:1427:48 | ChiTotal | total:m1425_5 | +| ir.cpp:1427:23:1427:48 | SideEffect | ~m1425_5 | +| ir.cpp:1427:23:1427:48 | StoreValue | r1427_3 | +| ir.cpp:1427:23:1427:48 | Unary | r1427_6 | +| ir.cpp:1427:23:1427:52 | Left | r1427_9 | +| ir.cpp:1427:23:1427:55 | StoreValue | r1427_13 | +| ir.cpp:1427:23:1427:55 | Unary | r1427_11 | +| ir.cpp:1427:23:1427:55 | Unary | r1427_12 | +| ir.cpp:1427:52:1427:52 | Unary | r1427_8 | +| ir.cpp:1427:54:1427:54 | Right | r1427_10 | +| ir.cpp:1428:11:1428:11 | Address | &:r1428_1 | +| ir.cpp:1428:15:1428:40 | Address | &:r1428_6 | +| ir.cpp:1428:15:1428:40 | CallTarget | func:r1428_2 | +| ir.cpp:1428:15:1428:40 | ChiPartial | partial:m1428_4 | +| ir.cpp:1428:15:1428:40 | ChiTotal | total:m1427_5 | +| ir.cpp:1428:15:1428:40 | SideEffect | ~m1427_5 | +| ir.cpp:1428:15:1428:40 | StoreValue | r1428_3 | +| ir.cpp:1428:15:1428:40 | Unary | r1428_6 | +| ir.cpp:1428:15:1428:44 | Left | r1428_9 | +| ir.cpp:1428:15:1428:47 | Address | &:r1428_11 | +| ir.cpp:1428:15:1428:47 | Load | ~m1428_7 | +| ir.cpp:1428:15:1428:47 | StoreValue | r1428_12 | +| ir.cpp:1428:44:1428:44 | Unary | r1428_8 | +| ir.cpp:1428:46:1428:46 | Right | r1428_10 | +| ir.cpp:1445:6:1445:24 | ChiPartial | partial:m1445_3 | +| ir.cpp:1445:6:1445:24 | ChiTotal | total:m1445_2 | +| ir.cpp:1445:6:1445:24 | SideEffect | ~m1449_10 | +| ir.cpp:1446:14:1446:14 | Address | &:r1446_1 | +| ir.cpp:1446:18:1446:40 | CallTarget | func:r1446_2 | +| ir.cpp:1446:18:1446:40 | ChiPartial | partial:m1446_4 | +| ir.cpp:1446:18:1446:40 | ChiTotal | total:m1445_4 | +| ir.cpp:1446:18:1446:40 | SideEffect | ~m1445_4 | +| ir.cpp:1446:18:1446:40 | StoreValue | r1446_3 | +| ir.cpp:1447:5:1447:5 | Address | &:r1447_10 | +| ir.cpp:1447:9:1447:36 | Address | &:r1447_1 | +| ir.cpp:1447:9:1447:36 | Address | &:r1447_8 | +| ir.cpp:1447:9:1447:36 | Load | ~m1447_6 | +| ir.cpp:1447:9:1447:36 | StoreValue | r1447_9 | +| ir.cpp:1447:9:1447:36 | Unary | r1447_1 | +| ir.cpp:1447:9:1447:36 | Unary | r1447_7 | +| ir.cpp:1447:10:1447:33 | CallTarget | func:r1447_2 | +| ir.cpp:1447:10:1447:33 | ChiPartial | partial:m1447_4 | +| ir.cpp:1447:10:1447:33 | ChiTotal | total:m1446_5 | +| ir.cpp:1447:10:1447:33 | SideEffect | ~m1446_5 | +| ir.cpp:1447:10:1447:33 | StoreValue | r1447_3 | +| ir.cpp:1448:9:1448:9 | Address | &:r1448_1 | +| ir.cpp:1448:13:1448:36 | CallTarget | func:r1448_2 | +| ir.cpp:1448:13:1448:36 | ChiPartial | partial:m1448_4 | +| ir.cpp:1448:13:1448:36 | ChiTotal | total:m1447_5 | +| ir.cpp:1448:13:1448:36 | SideEffect | ~m1447_5 | +| ir.cpp:1448:13:1448:36 | StoreValue | r1448_3 | +| ir.cpp:1448:40:1448:40 | Address | &:r1448_7 | +| ir.cpp:1448:40:1448:40 | Load | ~m1448_6 | +| ir.cpp:1448:40:1448:40 | StoreValue | r1448_8 | +| ir.cpp:1449:11:1449:11 | Address | &:r1449_1 | +| ir.cpp:1449:16:1449:39 | CallTarget | func:r1449_2 | +| ir.cpp:1449:16:1449:39 | ChiPartial | partial:m1449_4 | +| ir.cpp:1449:16:1449:39 | ChiTotal | total:m1448_5 | +| ir.cpp:1449:16:1449:39 | SideEffect | ~m1448_5 | +| ir.cpp:1449:16:1449:39 | StoreValue | r1449_3 | +| ir.cpp:1449:44:1449:44 | Arg(this) | this:r0_11 | +| ir.cpp:1449:44:1449:44 | CallTarget | func:r1449_7 | +| ir.cpp:1449:44:1449:44 | ChiPartial | partial:m1449_9 | +| ir.cpp:1449:44:1449:44 | ChiTotal | total:m1449_5 | +| ir.cpp:1449:44:1449:44 | SideEffect | ~m1449_5 | +| ir.cpp:1449:44:1449:44 | StoreValue | r1449_8 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_5 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_5 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_7 | +| ir.cpp:1453:3:1453:21 | Address | &:r1453_7 | +| ir.cpp:1453:3:1453:21 | ChiPartial | partial:m1453_3 | +| ir.cpp:1453:3:1453:21 | ChiTotal | total:m1453_2 | +| ir.cpp:1453:3:1453:21 | Load | m1453_6 | +| ir.cpp:1453:3:1453:21 | SideEffect | m1453_3 | +| ir.cpp:1453:3:1453:21 | SideEffect | m1453_8 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_5 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_5 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_7 | +| ir.cpp:1459:3:1459:20 | Address | &:r1459_7 | +| ir.cpp:1459:3:1459:20 | ChiPartial | partial:m1459_3 | +| ir.cpp:1459:3:1459:20 | ChiTotal | total:m1459_2 | +| ir.cpp:1459:3:1459:20 | Load | m1459_6 | +| ir.cpp:1459:3:1459:20 | SideEffect | m1459_3 | +| ir.cpp:1459:3:1459:20 | SideEffect | m1460_6 | +| ir.cpp:1459:3:1459:20 | Unary | m1459_6 | +| ir.cpp:1459:26:1459:30 | Address | &:r1459_9 | +| ir.cpp:1459:26:1459:30 | ChiPartial | partial:m1459_11 | +| ir.cpp:1459:26:1459:30 | ChiTotal | total:m1459_8 | +| ir.cpp:1459:26:1459:30 | StoreValue | r1459_10 | +| ir.cpp:1460:5:1460:5 | Address | &:r1460_2 | +| ir.cpp:1460:5:1460:5 | Address | &:r1460_4 | +| ir.cpp:1460:5:1460:5 | Load | m1459_6 | +| ir.cpp:1460:5:1460:5 | Unary | r1460_3 | +| ir.cpp:1460:5:1460:9 | ChiPartial | partial:m1460_5 | +| ir.cpp:1460:5:1460:9 | ChiTotal | total:m1459_12 | +| ir.cpp:1460:9:1460:9 | StoreValue | r1460_1 | +| ir.cpp:1464:6:1464:29 | ChiPartial | partial:m1464_3 | +| ir.cpp:1464:6:1464:29 | ChiTotal | total:m1464_2 | +| ir.cpp:1464:6:1464:29 | SideEffect | m1464_3 | +| ir.cpp:1465:9:1465:10 | Address | &:r1465_1 | +| ir.cpp:1465:9:1465:10 | Left | r1465_1 | +| ir.cpp:1465:9:1465:10 | Left | r1465_1 | +| ir.cpp:1465:16:1465:22 | Address | &:r1465_4 | +| ir.cpp:1465:16:1465:22 | Address | &:r1465_9 | +| ir.cpp:1465:16:1465:22 | Right | r1465_3 | +| ir.cpp:1465:16:1465:22 | Right | r1465_8 | +| ir.cpp:1465:18:1465:18 | ChiPartial | partial:m1465_6 | +| ir.cpp:1465:18:1465:18 | ChiTotal | total:m1465_2 | +| ir.cpp:1465:18:1465:18 | StoreValue | r1465_5 | +| ir.cpp:1465:21:1465:21 | ChiPartial | partial:m1465_11 | +| ir.cpp:1465:21:1465:21 | ChiTotal | total:m1465_7 | +| ir.cpp:1465:21:1465:21 | StoreValue | r1465_10 | +| ir.cpp:1468:15:1468:15 | Address | &:r1468_1 | +| ir.cpp:1468:16:1468:16 | Address | &:r1468_5 | +| ir.cpp:1468:20:1468:20 | Address | &:r1468_6 | +| ir.cpp:1468:26:1468:27 | StoreValue | r1468_3 | +| ir.cpp:1468:26:1468:27 | Unary | r1468_2 | +| ir.cpp:1469:9:1469:10 | Address | &:r1469_2 | +| ir.cpp:1469:9:1469:10 | Address | &:r1469_3 | +| ir.cpp:1469:9:1469:10 | Load | m0_14 | +| ir.cpp:1469:9:1469:14 | ChiPartial | partial:m1469_4 | +| ir.cpp:1469:9:1469:14 | ChiTotal | total:m1465_12 | +| ir.cpp:1469:14:1469:14 | StoreValue | r1469_1 | +| ir.cpp:1470:14:1470:16 | Address | &:r1470_1 | +| ir.cpp:1470:20:1470:21 | Address | &:r1470_2 | +| ir.cpp:1470:20:1470:21 | Load | m0_14 | +| ir.cpp:1470:20:1470:21 | StoreValue | r1470_4 | +| ir.cpp:1470:20:1470:21 | Unary | r1470_3 | +| ir.cpp:1471:13:1471:13 | Address | &:r1471_1 | +| ir.cpp:1471:17:1471:18 | Address | &:r1471_2 | +| ir.cpp:1471:17:1471:18 | Address | &:r1471_3 | +| ir.cpp:1471:17:1471:18 | Load | m0_14 | +| ir.cpp:1471:17:1471:18 | Load | m1469_4 | +| ir.cpp:1471:17:1471:18 | StoreValue | r1471_4 | +| ir.cpp:1475:15:1475:36 | Address | &:r1475_1 | +| ir.cpp:1475:40:1475:41 | StoreValue | r1475_3 | +| ir.cpp:1475:40:1475:41 | Unary | r1475_2 | +| ir.cpp:1476:15:1476:16 | Address | &:r1476_1 | +| ir.cpp:1476:20:1476:41 | Address | &:r1476_2 | +| ir.cpp:1476:20:1476:41 | Left | r1476_5 | +| ir.cpp:1476:20:1476:41 | Load | m1475_4 | +| ir.cpp:1476:20:1476:41 | Unary | r1476_3 | +| ir.cpp:1476:20:1476:41 | Unary | r1476_4 | +| ir.cpp:1476:20:1476:44 | StoreValue | r1476_8 | +| ir.cpp:1476:20:1476:44 | Unary | r1476_7 | +| ir.cpp:1476:43:1476:43 | Right | r1476_6 | +| ir.cpp:1477:15:1477:16 | Address | &:r1477_1 | +| ir.cpp:1477:20:1477:41 | Address | &:r1477_2 | +| ir.cpp:1477:20:1477:41 | Left | r1477_5 | +| ir.cpp:1477:20:1477:41 | Load | m1475_4 | +| ir.cpp:1477:20:1477:41 | Unary | r1477_3 | +| ir.cpp:1477:20:1477:41 | Unary | r1477_4 | +| ir.cpp:1477:20:1477:44 | StoreValue | r1477_8 | +| ir.cpp:1477:20:1477:44 | Unary | r1477_7 | +| ir.cpp:1477:43:1477:43 | Right | r1477_6 | +| ir.cpp:1478:9:1478:10 | Address | &:r1478_2 | +| ir.cpp:1478:9:1478:10 | Address | &:r1478_4 | +| ir.cpp:1478:9:1478:10 | Load | m1477_9 | +| ir.cpp:1478:9:1478:10 | Unary | r1478_3 | +| ir.cpp:1478:9:1478:14 | ChiPartial | partial:m1478_5 | +| ir.cpp:1478:9:1478:14 | ChiTotal | total:m1469_5 | +| ir.cpp:1478:14:1478:14 | StoreValue | r1478_1 | +| ir.cpp:1479:14:1479:16 | Address | &:r1479_1 | +| ir.cpp:1479:20:1479:21 | Address | &:r1479_2 | +| ir.cpp:1479:20:1479:21 | Load | m1477_9 | +| ir.cpp:1479:20:1479:21 | StoreValue | r1479_5 | +| ir.cpp:1479:20:1479:21 | Unary | r1479_3 | +| ir.cpp:1479:20:1479:21 | Unary | r1479_4 | +| ir.cpp:1480:13:1480:13 | Address | &:r1480_1 | +| ir.cpp:1480:17:1480:18 | Address | &:r1480_2 | +| ir.cpp:1480:17:1480:18 | Address | &:r1480_3 | +| ir.cpp:1480:17:1480:18 | Load | m1477_9 | +| ir.cpp:1480:17:1480:18 | Load | m1478_5 | +| ir.cpp:1480:17:1480:18 | StoreValue | r1480_4 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_5 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_5 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_7 | +| ir.cpp:1484:8:1484:8 | Address | &:r1484_7 | +| ir.cpp:1484:8:1484:8 | ChiPartial | partial:m1484_3 | +| ir.cpp:1484:8:1484:8 | ChiTotal | total:m1484_2 | +| ir.cpp:1484:8:1484:8 | Load | m1484_6 | +| ir.cpp:1484:8:1484:8 | SideEffect | m1484_3 | +| ir.cpp:1484:8:1484:8 | SideEffect | m1484_8 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_5 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_7 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_9 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_10 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_13 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_17 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_18 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_21 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_25 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_26 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_29 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_33 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_34 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_37 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_41 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_42 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_45 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_49 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_50 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_53 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_57 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_58 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_61 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_65 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_66 | +| ir.cpp:1488:8:1488:8 | Address | &:r1488_69 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_3 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_3 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_15 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_23 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_31 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_39 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_47 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_55 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_63 | +| ir.cpp:1488:8:1488:8 | ChiPartial | partial:m1488_71 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_2 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_2 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_8 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_16 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_24 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_32 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_40 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_48 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_56 | +| ir.cpp:1488:8:1488:8 | ChiTotal | total:m1488_64 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m0_2 | +| ir.cpp:1488:8:1488:8 | Load | m1488_6 | +| ir.cpp:1488:8:1488:8 | Load | m1488_6 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | Load | ~m0_4 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_3 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_3 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_8 | +| ir.cpp:1488:8:1488:8 | SideEffect | m1488_72 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_14 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_22 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_30 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_38 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_46 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_54 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_62 | +| ir.cpp:1488:8:1488:8 | StoreValue | r1488_70 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | m1488_6 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_11 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_12 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_19 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_20 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_27 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_28 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_35 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_36 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_43 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_44 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_51 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_52 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_59 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_60 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_67 | +| ir.cpp:1488:8:1488:8 | Unary | r1488_68 | +| ir.cpp:1501:6:1501:35 | ChiPartial | partial:m1501_3 | +| ir.cpp:1501:6:1501:35 | ChiTotal | total:m1501_2 | +| ir.cpp:1501:6:1501:35 | SideEffect | ~m1527_7 | +| ir.cpp:1502:39:1502:39 | Address | &:r1502_1 | +| ir.cpp:1502:39:1502:39 | Address | &:r1502_1 | +| ir.cpp:1502:39:1502:39 | Arg(this) | this:r1502_1 | +| ir.cpp:1502:39:1502:39 | CallTarget | func:r1502_3 | +| ir.cpp:1502:39:1502:39 | ChiPartial | partial:m1502_5 | +| ir.cpp:1502:39:1502:39 | ChiPartial | partial:m1502_7 | +| ir.cpp:1502:39:1502:39 | ChiTotal | total:m1501_4 | +| ir.cpp:1502:39:1502:39 | ChiTotal | total:m1502_2 | +| ir.cpp:1502:39:1502:39 | SideEffect | ~m1501_4 | +| ir.cpp:1505:14:1505:14 | Address | &:r1505_1 | +| ir.cpp:1505:15:1505:15 | Address | &:r1505_5 | +| ir.cpp:1505:18:1505:18 | Address | &:r1505_9 | +| ir.cpp:1505:21:1505:21 | Address | &:r1505_13 | +| ir.cpp:1505:24:1505:24 | Address | &:r1505_17 | +| ir.cpp:1505:27:1505:27 | Address | &:r1505_23 | +| ir.cpp:1505:30:1505:30 | Address | &:r1505_27 | +| ir.cpp:1505:34:1505:34 | Address | &:r1505_31 | +| ir.cpp:1505:41:1505:41 | Address | &:r1505_37 | +| ir.cpp:1505:46:1505:46 | Address | &:r1505_2 | +| ir.cpp:1505:46:1505:46 | Load | m1502_8 | +| ir.cpp:1505:46:1505:46 | StoreValue | r1505_3 | +| ir.cpp:1505:47:1505:47 | Address | &:r1505_19 | +| ir.cpp:1505:47:1505:47 | Address | &:r1505_33 | +| ir.cpp:1505:47:1505:47 | Load | ~m1505_4 | +| ir.cpp:1505:47:1505:47 | Load | ~m1505_4 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_7 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_11 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_15 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_21 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_25 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_29 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_35 | +| ir.cpp:1505:47:1505:47 | StoreValue | r1505_39 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_6 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_10 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_14 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_18 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_20 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_24 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_28 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_32 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_34 | +| ir.cpp:1505:47:1505:47 | Unary | r1505_38 | +| ir.cpp:1506:9:1506:9 | Address | &:r1506_2 | +| ir.cpp:1506:9:1506:9 | Address | &:r1506_3 | +| ir.cpp:1506:9:1506:9 | Load | m1505_12 | +| ir.cpp:1506:9:1506:15 | ChiPartial | partial:m1506_4 | +| ir.cpp:1506:9:1506:15 | ChiTotal | total:m1505_4 | +| ir.cpp:1506:13:1506:15 | StoreValue | r1506_1 | +| ir.cpp:1507:17:1507:18 | Address | &:r1507_1 | +| ir.cpp:1507:22:1507:22 | Address | &:r1507_2 | +| ir.cpp:1507:22:1507:22 | Load | m1505_12 | +| ir.cpp:1507:22:1507:22 | StoreValue | r1507_4 | +| ir.cpp:1507:22:1507:22 | Unary | r1507_3 | +| ir.cpp:1508:13:1508:13 | Address | &:r1508_1 | +| ir.cpp:1508:17:1508:17 | Address | &:r1508_2 | +| ir.cpp:1508:17:1508:17 | Address | &:r1508_3 | +| ir.cpp:1508:17:1508:17 | Load | m1505_8 | +| ir.cpp:1508:17:1508:17 | Load | ~m1505_4 | +| ir.cpp:1508:17:1508:17 | StoreValue | r1508_4 | +| ir.cpp:1509:9:1509:9 | Address | &:r1509_2 | +| ir.cpp:1509:9:1509:9 | Address | &:r1509_3 | +| ir.cpp:1509:9:1509:9 | Load | m1505_22 | +| ir.cpp:1509:9:1509:13 | ChiPartial | partial:m1509_4 | +| ir.cpp:1509:9:1509:13 | ChiTotal | total:m1502_6 | +| ir.cpp:1509:13:1509:13 | StoreValue | r1509_1 | +| ir.cpp:1510:9:1510:10 | Address | &:r1510_5 | +| ir.cpp:1510:9:1510:14 | ChiPartial | partial:m1510_6 | +| ir.cpp:1510:9:1510:14 | ChiTotal | total:m1509_5 | +| ir.cpp:1510:10:1510:10 | Address | &:r1510_2 | +| ir.cpp:1510:10:1510:10 | Address | &:r1510_3 | +| ir.cpp:1510:10:1510:10 | Load | m1505_26 | +| ir.cpp:1510:10:1510:10 | Load | ~m1505_4 | +| ir.cpp:1510:10:1510:10 | Unary | r1510_4 | +| ir.cpp:1510:14:1510:14 | StoreValue | r1510_1 | +| ir.cpp:1511:14:1511:15 | Address | &:r1511_1 | +| ir.cpp:1511:19:1511:19 | Address | &:r1511_2 | +| ir.cpp:1511:19:1511:19 | Load | m1505_22 | +| ir.cpp:1511:19:1511:19 | StoreValue | r1511_4 | +| ir.cpp:1511:19:1511:19 | Unary | r1511_3 | +| ir.cpp:1512:14:1512:15 | Address | &:r1512_1 | +| ir.cpp:1512:19:1512:20 | StoreValue | r1512_4 | +| ir.cpp:1512:20:1512:20 | Address | &:r1512_2 | +| ir.cpp:1512:20:1512:20 | Load | m1505_22 | +| ir.cpp:1512:20:1512:20 | Unary | r1512_3 | +| ir.cpp:1513:13:1513:13 | Address | &:r1513_1 | +| ir.cpp:1513:17:1513:17 | Address | &:r1513_2 | +| ir.cpp:1513:17:1513:17 | Address | &:r1513_3 | +| ir.cpp:1513:17:1513:17 | Load | m1505_22 | +| ir.cpp:1513:17:1513:17 | Load | ~m1510_7 | +| ir.cpp:1513:17:1513:17 | StoreValue | r1513_4 | +| ir.cpp:1517:14:1517:35 | Address | &:r1517_1 | +| ir.cpp:1517:39:1517:39 | Address | &:r1517_2 | +| ir.cpp:1517:39:1517:39 | Load | m1502_8 | +| ir.cpp:1517:39:1517:39 | StoreValue | r1517_3 | +| ir.cpp:1518:15:1518:15 | Address | &:r1518_1 | +| ir.cpp:1518:19:1518:40 | Unary | r1518_2 | +| ir.cpp:1518:19:1518:42 | StoreValue | r1518_4 | +| ir.cpp:1518:42:1518:42 | Unary | r1518_3 | | ir.cpp:1519:15:1519:15 | Address | &:r1519_1 | | ir.cpp:1519:19:1519:40 | Unary | r1519_2 | -| ir.cpp:1519:19:1519:42 | StoreValue | r1519_6 | -| ir.cpp:1519:19:1519:42 | Unary | r1519_5 | -| ir.cpp:1519:42:1519:42 | Address | &:r1519_3 | -| ir.cpp:1519:42:1519:42 | Load | ~m1515_4 | -| ir.cpp:1519:42:1519:42 | Unary | r1519_4 | -| ir.cpp:1520:15:1520:15 | Address | &:r1520_1 | -| ir.cpp:1520:19:1520:40 | Unary | r1520_2 | -| ir.cpp:1520:19:1520:42 | StoreValue | r1520_4 | -| ir.cpp:1520:42:1520:42 | Unary | r1520_3 | -| ir.cpp:1521:9:1521:9 | Address | &:r1521_2 | -| ir.cpp:1521:9:1521:9 | Address | &:r1521_4 | -| ir.cpp:1521:9:1521:9 | Load | m1517_5 | -| ir.cpp:1521:9:1521:9 | Unary | r1521_3 | -| ir.cpp:1521:9:1521:15 | ChiPartial | partial:m1521_5 | -| ir.cpp:1521:9:1521:15 | ChiTotal | total:m1515_4 | -| ir.cpp:1521:13:1521:15 | StoreValue | r1521_1 | -| ir.cpp:1522:17:1522:18 | Address | &:r1522_1 | -| ir.cpp:1522:22:1522:22 | Address | &:r1522_2 | -| ir.cpp:1522:22:1522:22 | Load | m1517_5 | -| ir.cpp:1522:22:1522:22 | StoreValue | r1522_5 | -| ir.cpp:1522:22:1522:22 | Unary | r1522_3 | -| ir.cpp:1522:22:1522:22 | Unary | r1522_4 | -| ir.cpp:1523:13:1523:13 | Address | &:r1523_1 | -| ir.cpp:1523:17:1523:17 | Address | &:r1523_2 | -| ir.cpp:1523:17:1523:17 | Address | &:r1523_3 | -| ir.cpp:1523:17:1523:17 | Load | m1516_5 | -| ir.cpp:1523:17:1523:17 | Load | ~m1515_4 | -| ir.cpp:1523:17:1523:17 | StoreValue | r1523_4 | -| ir.cpp:1524:9:1524:9 | Address | &:r1524_2 | -| ir.cpp:1524:9:1524:9 | Address | &:r1524_4 | -| ir.cpp:1524:9:1524:9 | Load | m1519_7 | -| ir.cpp:1524:9:1524:9 | Unary | r1524_3 | -| ir.cpp:1524:9:1524:13 | ChiPartial | partial:m1524_5 | -| ir.cpp:1524:9:1524:13 | ChiTotal | total:m1508_7 | -| ir.cpp:1524:13:1524:13 | StoreValue | r1524_1 | -| ir.cpp:1525:9:1525:10 | Address | &:r1525_5 | -| ir.cpp:1525:9:1525:14 | ChiPartial | partial:m1525_6 | -| ir.cpp:1525:9:1525:14 | ChiTotal | total:m1524_6 | -| ir.cpp:1525:10:1525:10 | Address | &:r1525_2 | -| ir.cpp:1525:10:1525:10 | Address | &:r1525_3 | -| ir.cpp:1525:10:1525:10 | Load | m1520_5 | -| ir.cpp:1525:10:1525:10 | Load | ~m1515_4 | -| ir.cpp:1525:10:1525:10 | Unary | r1525_4 | -| ir.cpp:1525:14:1525:14 | StoreValue | r1525_1 | -| ir.cpp:1526:14:1526:15 | Address | &:r1526_1 | -| ir.cpp:1526:19:1526:19 | Address | &:r1526_2 | -| ir.cpp:1526:19:1526:19 | Load | m1519_7 | -| ir.cpp:1526:19:1526:19 | StoreValue | r1526_5 | -| ir.cpp:1526:19:1526:19 | Unary | r1526_3 | -| ir.cpp:1526:19:1526:19 | Unary | r1526_4 | -| ir.cpp:1527:14:1527:15 | Address | &:r1527_1 | -| ir.cpp:1527:19:1527:20 | StoreValue | r1527_5 | -| ir.cpp:1527:20:1527:20 | Address | &:r1527_2 | -| ir.cpp:1527:20:1527:20 | Load | m1519_7 | -| ir.cpp:1527:20:1527:20 | Unary | r1527_3 | -| ir.cpp:1527:20:1527:20 | Unary | r1527_4 | -| ir.cpp:1528:13:1528:13 | Address | &:r1528_1 | -| ir.cpp:1528:17:1528:17 | Address | &:r1528_2 | -| ir.cpp:1528:17:1528:17 | Address | &:r1528_3 | -| ir.cpp:1528:17:1528:17 | Load | m1519_7 | -| ir.cpp:1528:17:1528:17 | Load | ~m1525_7 | -| ir.cpp:1528:17:1528:17 | StoreValue | r1528_4 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_5 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_7 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_9 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_10 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_13 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_17 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_18 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_21 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_25 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_26 | -| ir.cpp:1539:8:1539:8 | Address | &:r1539_29 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_3 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_3 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_15 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_23 | -| ir.cpp:1539:8:1539:8 | ChiPartial | partial:m1539_31 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_2 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_2 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_8 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_16 | -| ir.cpp:1539:8:1539:8 | ChiTotal | total:m1539_24 | -| ir.cpp:1539:8:1539:8 | Load | m0_2 | -| ir.cpp:1539:8:1539:8 | Load | m0_2 | -| ir.cpp:1539:8:1539:8 | Load | m0_2 | -| ir.cpp:1539:8:1539:8 | Load | m1539_6 | -| ir.cpp:1539:8:1539:8 | Load | m1539_6 | -| ir.cpp:1539:8:1539:8 | Load | ~m0_4 | -| ir.cpp:1539:8:1539:8 | Load | ~m0_4 | -| ir.cpp:1539:8:1539:8 | Load | ~m0_4 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_3 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_3 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_8 | -| ir.cpp:1539:8:1539:8 | SideEffect | m1539_32 | -| ir.cpp:1539:8:1539:8 | StoreValue | r1539_14 | -| ir.cpp:1539:8:1539:8 | StoreValue | r1539_22 | -| ir.cpp:1539:8:1539:8 | StoreValue | r1539_30 | -| ir.cpp:1539:8:1539:8 | Unary | m1539_6 | -| ir.cpp:1539:8:1539:8 | Unary | m1539_6 | -| ir.cpp:1539:8:1539:8 | Unary | m1539_6 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_11 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_12 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_19 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_20 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_27 | -| ir.cpp:1539:8:1539:8 | Unary | r1539_28 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_5 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_5 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_7 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_7 | -| ir.cpp:1567:60:1567:95 | Address | &:r1567_10 | -| ir.cpp:1567:60:1567:95 | ChiPartial | partial:m1567_3 | -| ir.cpp:1567:60:1567:95 | ChiTotal | total:m1567_2 | -| ir.cpp:1567:60:1567:95 | Load | m0_2 | -| ir.cpp:1567:60:1567:95 | Load | m1567_6 | -| ir.cpp:1567:60:1567:95 | SideEffect | m1567_3 | -| ir.cpp:1567:60:1567:95 | SideEffect | m1567_8 | -| ir.cpp:1568:5:1568:13 | Address | &:r1568_1 | -| ir.cpp:1568:12:1568:12 | Address | &:r1568_2 | -| ir.cpp:1568:12:1568:12 | Load | m1567_6 | -| ir.cpp:1568:12:1568:12 | Unary | r1568_3 | -| ir.cpp:1568:12:1568:12 | Unary | r1568_4 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_5 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_5 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_7 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_7 | -| ir.cpp:1571:60:1571:95 | Address | &:r1571_10 | -| ir.cpp:1571:60:1571:95 | ChiPartial | partial:m1571_3 | -| ir.cpp:1571:60:1571:95 | ChiTotal | total:m1571_2 | -| ir.cpp:1571:60:1571:95 | Load | m0_2 | -| ir.cpp:1571:60:1571:95 | Load | m1571_6 | -| ir.cpp:1571:60:1571:95 | SideEffect | m1571_3 | -| ir.cpp:1571:60:1571:95 | SideEffect | m1571_8 | -| ir.cpp:1572:5:1572:13 | Address | &:r1572_1 | -| ir.cpp:1572:12:1572:12 | Address | &:r1572_2 | -| ir.cpp:1572:12:1572:12 | Load | m1571_6 | -| ir.cpp:1572:12:1572:12 | Unary | r1572_3 | -| ir.cpp:1572:12:1572:12 | Unary | r1572_4 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_5 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_5 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_7 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_7 | -| ir.cpp:1575:60:1575:95 | Address | &:r1575_10 | -| ir.cpp:1575:60:1575:95 | ChiPartial | partial:m1575_3 | -| ir.cpp:1575:60:1575:95 | ChiTotal | total:m1575_2 | -| ir.cpp:1575:60:1575:95 | Load | m1575_6 | -| ir.cpp:1575:60:1575:95 | Load | m1576_8 | -| ir.cpp:1575:60:1575:95 | SideEffect | m1575_3 | -| ir.cpp:1575:60:1575:95 | SideEffect | m1575_8 | -| ir.cpp:1576:5:1576:13 | Address | &:r1576_1 | -| ir.cpp:1576:12:1576:12 | Address | &:r1576_2 | -| ir.cpp:1576:12:1576:12 | Address | &:r1576_4 | -| ir.cpp:1576:12:1576:12 | Load | m1575_6 | -| ir.cpp:1576:12:1576:12 | Load | ~m1575_8 | -| ir.cpp:1576:12:1576:12 | StoreValue | r1576_7 | -| ir.cpp:1576:12:1576:12 | Unary | r1576_3 | -| ir.cpp:1576:12:1576:12 | Unary | r1576_5 | -| ir.cpp:1576:12:1576:12 | Unary | r1576_6 | -| ir.cpp:1579:6:1579:37 | ChiPartial | partial:m1579_3 | -| ir.cpp:1579:6:1579:37 | ChiTotal | total:m1579_2 | -| ir.cpp:1579:6:1579:37 | SideEffect | ~m1600_6 | -| ir.cpp:1580:34:1580:34 | Address | &:r1580_1 | -| ir.cpp:1580:34:1580:34 | Address | &:r1580_1 | -| ir.cpp:1580:34:1580:34 | Arg(this) | this:r1580_1 | -| ir.cpp:1580:34:1580:34 | CallTarget | func:r1580_3 | -| ir.cpp:1580:34:1580:34 | ChiPartial | partial:m1580_5 | -| ir.cpp:1580:34:1580:34 | ChiPartial | partial:m1580_7 | -| ir.cpp:1580:34:1580:34 | ChiTotal | total:m1579_4 | -| ir.cpp:1580:34:1580:34 | ChiTotal | total:m1580_2 | -| ir.cpp:1580:34:1580:34 | SideEffect | ~m1579_4 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_1 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_6 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_6 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_18 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_18 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_30 | -| ir.cpp:1583:14:1583:14 | Address | &:r1583_30 | -| ir.cpp:1583:14:1583:14 | Arg(this) | this:r1583_6 | -| ir.cpp:1583:14:1583:14 | Arg(this) | this:r1583_18 | -| ir.cpp:1583:14:1583:14 | Arg(this) | this:r1583_30 | -| ir.cpp:1583:14:1583:14 | CallTarget | func:r1583_7 | -| ir.cpp:1583:14:1583:14 | CallTarget | func:r1583_19 | -| ir.cpp:1583:14:1583:14 | CallTarget | func:r1583_31 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_9 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_12 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_21 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_24 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_33 | -| ir.cpp:1583:14:1583:14 | ChiPartial | partial:m1583_36 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1580_6 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_4 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_10 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_13 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_22 | -| ir.cpp:1583:14:1583:14 | ChiTotal | total:m1583_25 | -| ir.cpp:1583:14:1583:14 | SideEffect | m1583_4 | -| ir.cpp:1583:14:1583:14 | SideEffect | m1583_13 | -| ir.cpp:1583:14:1583:14 | SideEffect | m1583_25 | -| ir.cpp:1583:14:1583:14 | SideEffect | ~m1580_6 | -| ir.cpp:1583:14:1583:14 | SideEffect | ~m1583_10 | -| ir.cpp:1583:14:1583:14 | SideEffect | ~m1583_22 | -| ir.cpp:1583:14:1583:14 | Unary | r1583_8 | -| ir.cpp:1583:14:1583:14 | Unary | r1583_20 | -| ir.cpp:1583:14:1583:14 | Unary | r1583_32 | -| ir.cpp:1583:14:1583:27 | StoreValue | r1583_15 | -| ir.cpp:1583:14:1583:27 | StoreValue | r1583_27 | -| ir.cpp:1583:14:1583:27 | StoreValue | r1583_39 | -| ir.cpp:1583:14:1583:27 | Unary | r1583_14 | -| ir.cpp:1583:14:1583:27 | Unary | r1583_26 | -| ir.cpp:1583:14:1583:27 | Unary | r1583_38 | -| ir.cpp:1583:15:1583:15 | Address | &:r1583_5 | -| ir.cpp:1583:18:1583:18 | Address | &:r1583_17 | -| ir.cpp:1583:21:1583:21 | Address | &:r1583_29 | -| ir.cpp:1583:26:1583:26 | Address | &:r1583_2 | -| ir.cpp:1583:26:1583:26 | Load | m1580_8 | -| ir.cpp:1583:26:1583:26 | StoreValue | r1583_3 | -| ir.cpp:1584:9:1584:9 | Address | &:r1584_2 | -| ir.cpp:1584:9:1584:9 | Address | &:r1584_4 | -| ir.cpp:1584:9:1584:9 | Load | m1583_28 | -| ir.cpp:1584:9:1584:9 | Unary | r1584_3 | -| ir.cpp:1584:9:1584:15 | ChiPartial | partial:m1584_5 | -| ir.cpp:1584:9:1584:15 | ChiTotal | total:m1583_37 | -| ir.cpp:1584:13:1584:15 | StoreValue | r1584_1 | -| ir.cpp:1585:17:1585:18 | Address | &:r1585_1 | -| ir.cpp:1585:22:1585:22 | Address | &:r1585_2 | -| ir.cpp:1585:22:1585:22 | Load | m1583_28 | -| ir.cpp:1585:22:1585:22 | StoreValue | r1585_5 | -| ir.cpp:1585:22:1585:22 | Unary | r1585_3 | -| ir.cpp:1585:22:1585:22 | Unary | r1585_4 | -| ir.cpp:1586:13:1586:13 | Address | &:r1586_1 | -| ir.cpp:1586:17:1586:17 | Address | &:r1586_2 | -| ir.cpp:1586:17:1586:17 | Address | &:r1586_3 | -| ir.cpp:1586:17:1586:17 | Load | m1583_16 | -| ir.cpp:1586:17:1586:17 | Load | ~m1583_37 | -| ir.cpp:1586:17:1586:17 | StoreValue | r1586_4 | -| ir.cpp:1587:9:1587:9 | Address | &:r1587_2 | -| ir.cpp:1587:9:1587:9 | Address | &:r1587_4 | -| ir.cpp:1587:9:1587:9 | Load | m1583_40 | -| ir.cpp:1587:9:1587:9 | Unary | r1587_3 | -| ir.cpp:1587:9:1587:13 | ChiPartial | partial:m1587_5 | -| ir.cpp:1587:9:1587:13 | ChiTotal | total:m1583_34 | -| ir.cpp:1587:13:1587:13 | StoreValue | r1587_1 | -| ir.cpp:1588:14:1588:15 | Address | &:r1588_1 | -| ir.cpp:1588:19:1588:19 | Address | &:r1588_2 | -| ir.cpp:1588:19:1588:19 | Load | m1583_40 | -| ir.cpp:1588:19:1588:19 | StoreValue | r1588_5 | -| ir.cpp:1588:19:1588:19 | Unary | r1588_3 | -| ir.cpp:1588:19:1588:19 | Unary | r1588_4 | -| ir.cpp:1589:13:1589:13 | Address | &:r1589_1 | -| ir.cpp:1589:17:1589:17 | Address | &:r1589_2 | -| ir.cpp:1589:17:1589:17 | Address | &:r1589_3 | -| ir.cpp:1589:17:1589:17 | Load | m1583_40 | -| ir.cpp:1589:17:1589:17 | Load | ~m1587_6 | -| ir.cpp:1589:17:1589:17 | StoreValue | r1589_4 | -| ir.cpp:1593:14:1593:35 | Address | &:r1593_1 | -| ir.cpp:1593:39:1593:39 | Address | &:r1593_2 | -| ir.cpp:1593:39:1593:39 | Load | m1580_8 | -| ir.cpp:1593:39:1593:39 | StoreValue | r1593_3 | -| ir.cpp:1594:15:1594:15 | Address | &:r1594_1 | -| ir.cpp:1594:19:1594:40 | Address | &:r1594_2 | -| ir.cpp:1594:19:1594:40 | Address | &:r1594_2 | -| ir.cpp:1594:19:1594:40 | Arg(this) | this:r1594_2 | -| ir.cpp:1594:19:1594:40 | ChiPartial | partial:m1594_8 | -| ir.cpp:1594:19:1594:40 | ChiTotal | total:m1593_4 | -| ir.cpp:1594:19:1594:40 | SideEffect | m1593_4 | -| ir.cpp:1594:42:1594:47 | CallTarget | func:r1594_3 | -| ir.cpp:1594:42:1594:47 | ChiPartial | partial:m1594_5 | -| ir.cpp:1594:42:1594:47 | ChiTotal | total:m1587_6 | -| ir.cpp:1594:42:1594:47 | SideEffect | ~m1587_6 | -| ir.cpp:1594:42:1594:47 | Unary | r1594_4 | -| ir.cpp:1594:48:1594:50 | StoreValue | r1594_11 | -| ir.cpp:1594:48:1594:50 | Unary | r1594_10 | -| ir.cpp:1595:15:1595:15 | Address | &:r1595_1 | -| ir.cpp:1595:19:1595:40 | Address | &:r1595_2 | -| ir.cpp:1595:19:1595:40 | Address | &:r1595_2 | -| ir.cpp:1595:19:1595:40 | Arg(this) | this:r1595_2 | -| ir.cpp:1595:19:1595:40 | ChiPartial | partial:m1595_8 | -| ir.cpp:1595:19:1595:40 | ChiTotal | total:m1594_9 | -| ir.cpp:1595:19:1595:40 | SideEffect | m1594_9 | -| ir.cpp:1595:42:1595:47 | CallTarget | func:r1595_3 | -| ir.cpp:1595:42:1595:47 | ChiPartial | partial:m1595_5 | -| ir.cpp:1595:42:1595:47 | ChiTotal | total:m1594_6 | -| ir.cpp:1595:42:1595:47 | SideEffect | ~m1594_6 | -| ir.cpp:1595:42:1595:47 | Unary | r1595_4 | -| ir.cpp:1595:48:1595:50 | StoreValue | r1595_11 | -| ir.cpp:1595:48:1595:50 | Unary | r1595_10 | +| ir.cpp:1519:19:1519:42 | StoreValue | r1519_4 | +| ir.cpp:1519:42:1519:42 | Unary | r1519_3 | +| ir.cpp:1521:15:1521:15 | Address | &:r1521_1 | +| ir.cpp:1521:19:1521:40 | Unary | r1521_2 | +| ir.cpp:1521:19:1521:42 | StoreValue | r1521_6 | +| ir.cpp:1521:19:1521:42 | Unary | r1521_5 | +| ir.cpp:1521:42:1521:42 | Address | &:r1521_3 | +| ir.cpp:1521:42:1521:42 | Load | ~m1517_4 | +| ir.cpp:1521:42:1521:42 | Unary | r1521_4 | +| ir.cpp:1522:15:1522:15 | Address | &:r1522_1 | +| ir.cpp:1522:19:1522:40 | Unary | r1522_2 | +| ir.cpp:1522:19:1522:42 | StoreValue | r1522_4 | +| ir.cpp:1522:42:1522:42 | Unary | r1522_3 | +| ir.cpp:1523:9:1523:9 | Address | &:r1523_2 | +| ir.cpp:1523:9:1523:9 | Address | &:r1523_4 | +| ir.cpp:1523:9:1523:9 | Load | m1519_5 | +| ir.cpp:1523:9:1523:9 | Unary | r1523_3 | +| ir.cpp:1523:9:1523:15 | ChiPartial | partial:m1523_5 | +| ir.cpp:1523:9:1523:15 | ChiTotal | total:m1517_4 | +| ir.cpp:1523:13:1523:15 | StoreValue | r1523_1 | +| ir.cpp:1524:17:1524:18 | Address | &:r1524_1 | +| ir.cpp:1524:22:1524:22 | Address | &:r1524_2 | +| ir.cpp:1524:22:1524:22 | Load | m1519_5 | +| ir.cpp:1524:22:1524:22 | StoreValue | r1524_5 | +| ir.cpp:1524:22:1524:22 | Unary | r1524_3 | +| ir.cpp:1524:22:1524:22 | Unary | r1524_4 | +| ir.cpp:1525:13:1525:13 | Address | &:r1525_1 | +| ir.cpp:1525:17:1525:17 | Address | &:r1525_2 | +| ir.cpp:1525:17:1525:17 | Address | &:r1525_3 | +| ir.cpp:1525:17:1525:17 | Load | m1518_5 | +| ir.cpp:1525:17:1525:17 | Load | ~m1517_4 | +| ir.cpp:1525:17:1525:17 | StoreValue | r1525_4 | +| ir.cpp:1526:9:1526:9 | Address | &:r1526_2 | +| ir.cpp:1526:9:1526:9 | Address | &:r1526_4 | +| ir.cpp:1526:9:1526:9 | Load | m1521_7 | +| ir.cpp:1526:9:1526:9 | Unary | r1526_3 | +| ir.cpp:1526:9:1526:13 | ChiPartial | partial:m1526_5 | +| ir.cpp:1526:9:1526:13 | ChiTotal | total:m1510_7 | +| ir.cpp:1526:13:1526:13 | StoreValue | r1526_1 | +| ir.cpp:1527:9:1527:10 | Address | &:r1527_5 | +| ir.cpp:1527:9:1527:14 | ChiPartial | partial:m1527_6 | +| ir.cpp:1527:9:1527:14 | ChiTotal | total:m1526_6 | +| ir.cpp:1527:10:1527:10 | Address | &:r1527_2 | +| ir.cpp:1527:10:1527:10 | Address | &:r1527_3 | +| ir.cpp:1527:10:1527:10 | Load | m1522_5 | +| ir.cpp:1527:10:1527:10 | Load | ~m1517_4 | +| ir.cpp:1527:10:1527:10 | Unary | r1527_4 | +| ir.cpp:1527:14:1527:14 | StoreValue | r1527_1 | +| ir.cpp:1528:14:1528:15 | Address | &:r1528_1 | +| ir.cpp:1528:19:1528:19 | Address | &:r1528_2 | +| ir.cpp:1528:19:1528:19 | Load | m1521_7 | +| ir.cpp:1528:19:1528:19 | StoreValue | r1528_5 | +| ir.cpp:1528:19:1528:19 | Unary | r1528_3 | +| ir.cpp:1528:19:1528:19 | Unary | r1528_4 | +| ir.cpp:1529:14:1529:15 | Address | &:r1529_1 | +| ir.cpp:1529:19:1529:20 | StoreValue | r1529_5 | +| ir.cpp:1529:20:1529:20 | Address | &:r1529_2 | +| ir.cpp:1529:20:1529:20 | Load | m1521_7 | +| ir.cpp:1529:20:1529:20 | Unary | r1529_3 | +| ir.cpp:1529:20:1529:20 | Unary | r1529_4 | +| ir.cpp:1530:13:1530:13 | Address | &:r1530_1 | +| ir.cpp:1530:17:1530:17 | Address | &:r1530_2 | +| ir.cpp:1530:17:1530:17 | Address | &:r1530_3 | +| ir.cpp:1530:17:1530:17 | Load | m1521_7 | +| ir.cpp:1530:17:1530:17 | Load | ~m1527_7 | +| ir.cpp:1530:17:1530:17 | StoreValue | r1530_4 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_5 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_7 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_9 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_10 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_13 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_17 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_18 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_21 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_25 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_26 | +| ir.cpp:1541:8:1541:8 | Address | &:r1541_29 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_3 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_3 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_15 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_23 | +| ir.cpp:1541:8:1541:8 | ChiPartial | partial:m1541_31 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_2 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_2 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_8 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_16 | +| ir.cpp:1541:8:1541:8 | ChiTotal | total:m1541_24 | +| ir.cpp:1541:8:1541:8 | Load | m0_2 | +| ir.cpp:1541:8:1541:8 | Load | m0_2 | +| ir.cpp:1541:8:1541:8 | Load | m0_2 | +| ir.cpp:1541:8:1541:8 | Load | m1541_6 | +| ir.cpp:1541:8:1541:8 | Load | m1541_6 | +| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | +| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | +| ir.cpp:1541:8:1541:8 | Load | ~m0_4 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_3 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_3 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_8 | +| ir.cpp:1541:8:1541:8 | SideEffect | m1541_32 | +| ir.cpp:1541:8:1541:8 | StoreValue | r1541_14 | +| ir.cpp:1541:8:1541:8 | StoreValue | r1541_22 | +| ir.cpp:1541:8:1541:8 | StoreValue | r1541_30 | +| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | +| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | +| ir.cpp:1541:8:1541:8 | Unary | m1541_6 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_11 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_12 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_19 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_20 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_27 | +| ir.cpp:1541:8:1541:8 | Unary | r1541_28 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_5 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_5 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_7 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_7 | +| ir.cpp:1569:60:1569:95 | Address | &:r1569_10 | +| ir.cpp:1569:60:1569:95 | ChiPartial | partial:m1569_3 | +| ir.cpp:1569:60:1569:95 | ChiTotal | total:m1569_2 | +| ir.cpp:1569:60:1569:95 | Load | m0_2 | +| ir.cpp:1569:60:1569:95 | Load | m1569_6 | +| ir.cpp:1569:60:1569:95 | SideEffect | m1569_3 | +| ir.cpp:1569:60:1569:95 | SideEffect | m1569_8 | +| ir.cpp:1570:5:1570:13 | Address | &:r1570_1 | +| ir.cpp:1570:12:1570:12 | Address | &:r1570_2 | +| ir.cpp:1570:12:1570:12 | Load | m1569_6 | +| ir.cpp:1570:12:1570:12 | Unary | r1570_3 | +| ir.cpp:1570:12:1570:12 | Unary | r1570_4 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_5 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_5 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_7 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_7 | +| ir.cpp:1573:60:1573:95 | Address | &:r1573_10 | +| ir.cpp:1573:60:1573:95 | ChiPartial | partial:m1573_3 | +| ir.cpp:1573:60:1573:95 | ChiTotal | total:m1573_2 | +| ir.cpp:1573:60:1573:95 | Load | m0_2 | +| ir.cpp:1573:60:1573:95 | Load | m1573_6 | +| ir.cpp:1573:60:1573:95 | SideEffect | m1573_3 | +| ir.cpp:1573:60:1573:95 | SideEffect | m1573_8 | +| ir.cpp:1574:5:1574:13 | Address | &:r1574_1 | +| ir.cpp:1574:12:1574:12 | Address | &:r1574_2 | +| ir.cpp:1574:12:1574:12 | Load | m1573_6 | +| ir.cpp:1574:12:1574:12 | Unary | r1574_3 | +| ir.cpp:1574:12:1574:12 | Unary | r1574_4 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_5 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_5 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_7 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_7 | +| ir.cpp:1577:60:1577:95 | Address | &:r1577_10 | +| ir.cpp:1577:60:1577:95 | ChiPartial | partial:m1577_3 | +| ir.cpp:1577:60:1577:95 | ChiTotal | total:m1577_2 | +| ir.cpp:1577:60:1577:95 | Load | m1577_6 | +| ir.cpp:1577:60:1577:95 | Load | m1578_8 | +| ir.cpp:1577:60:1577:95 | SideEffect | m1577_3 | +| ir.cpp:1577:60:1577:95 | SideEffect | m1577_8 | +| ir.cpp:1578:5:1578:13 | Address | &:r1578_1 | +| ir.cpp:1578:12:1578:12 | Address | &:r1578_2 | +| ir.cpp:1578:12:1578:12 | Address | &:r1578_4 | +| ir.cpp:1578:12:1578:12 | Load | m1577_6 | +| ir.cpp:1578:12:1578:12 | Load | ~m1577_8 | +| ir.cpp:1578:12:1578:12 | StoreValue | r1578_7 | +| ir.cpp:1578:12:1578:12 | Unary | r1578_3 | +| ir.cpp:1578:12:1578:12 | Unary | r1578_5 | +| ir.cpp:1578:12:1578:12 | Unary | r1578_6 | +| ir.cpp:1581:6:1581:37 | ChiPartial | partial:m1581_3 | +| ir.cpp:1581:6:1581:37 | ChiTotal | total:m1581_2 | +| ir.cpp:1581:6:1581:37 | SideEffect | ~m1602_6 | +| ir.cpp:1582:34:1582:34 | Address | &:r1582_1 | +| ir.cpp:1582:34:1582:34 | Address | &:r1582_1 | +| ir.cpp:1582:34:1582:34 | Arg(this) | this:r1582_1 | +| ir.cpp:1582:34:1582:34 | CallTarget | func:r1582_3 | +| ir.cpp:1582:34:1582:34 | ChiPartial | partial:m1582_5 | +| ir.cpp:1582:34:1582:34 | ChiPartial | partial:m1582_7 | +| ir.cpp:1582:34:1582:34 | ChiTotal | total:m1581_4 | +| ir.cpp:1582:34:1582:34 | ChiTotal | total:m1582_2 | +| ir.cpp:1582:34:1582:34 | SideEffect | ~m1581_4 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_1 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_6 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_6 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_18 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_18 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_30 | +| ir.cpp:1585:14:1585:14 | Address | &:r1585_30 | +| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_6 | +| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_18 | +| ir.cpp:1585:14:1585:14 | Arg(this) | this:r1585_30 | +| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_7 | +| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_19 | +| ir.cpp:1585:14:1585:14 | CallTarget | func:r1585_31 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_9 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_12 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_21 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_24 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_33 | +| ir.cpp:1585:14:1585:14 | ChiPartial | partial:m1585_36 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1582_6 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_4 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_10 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_13 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_22 | +| ir.cpp:1585:14:1585:14 | ChiTotal | total:m1585_25 | +| ir.cpp:1585:14:1585:14 | SideEffect | m1585_4 | +| ir.cpp:1585:14:1585:14 | SideEffect | m1585_13 | +| ir.cpp:1585:14:1585:14 | SideEffect | m1585_25 | +| ir.cpp:1585:14:1585:14 | SideEffect | ~m1582_6 | +| ir.cpp:1585:14:1585:14 | SideEffect | ~m1585_10 | +| ir.cpp:1585:14:1585:14 | SideEffect | ~m1585_22 | +| ir.cpp:1585:14:1585:14 | Unary | r1585_8 | +| ir.cpp:1585:14:1585:14 | Unary | r1585_20 | +| ir.cpp:1585:14:1585:14 | Unary | r1585_32 | +| ir.cpp:1585:14:1585:27 | StoreValue | r1585_15 | +| ir.cpp:1585:14:1585:27 | StoreValue | r1585_27 | +| ir.cpp:1585:14:1585:27 | StoreValue | r1585_39 | +| ir.cpp:1585:14:1585:27 | Unary | r1585_14 | +| ir.cpp:1585:14:1585:27 | Unary | r1585_26 | +| ir.cpp:1585:14:1585:27 | Unary | r1585_38 | +| ir.cpp:1585:15:1585:15 | Address | &:r1585_5 | +| ir.cpp:1585:18:1585:18 | Address | &:r1585_17 | +| ir.cpp:1585:21:1585:21 | Address | &:r1585_29 | +| ir.cpp:1585:26:1585:26 | Address | &:r1585_2 | +| ir.cpp:1585:26:1585:26 | Load | m1582_8 | +| ir.cpp:1585:26:1585:26 | StoreValue | r1585_3 | +| ir.cpp:1586:9:1586:9 | Address | &:r1586_2 | +| ir.cpp:1586:9:1586:9 | Address | &:r1586_4 | +| ir.cpp:1586:9:1586:9 | Load | m1585_28 | +| ir.cpp:1586:9:1586:9 | Unary | r1586_3 | +| ir.cpp:1586:9:1586:15 | ChiPartial | partial:m1586_5 | +| ir.cpp:1586:9:1586:15 | ChiTotal | total:m1585_37 | +| ir.cpp:1586:13:1586:15 | StoreValue | r1586_1 | +| ir.cpp:1587:17:1587:18 | Address | &:r1587_1 | +| ir.cpp:1587:22:1587:22 | Address | &:r1587_2 | +| ir.cpp:1587:22:1587:22 | Load | m1585_28 | +| ir.cpp:1587:22:1587:22 | StoreValue | r1587_5 | +| ir.cpp:1587:22:1587:22 | Unary | r1587_3 | +| ir.cpp:1587:22:1587:22 | Unary | r1587_4 | +| ir.cpp:1588:13:1588:13 | Address | &:r1588_1 | +| ir.cpp:1588:17:1588:17 | Address | &:r1588_2 | +| ir.cpp:1588:17:1588:17 | Address | &:r1588_3 | +| ir.cpp:1588:17:1588:17 | Load | m1585_16 | +| ir.cpp:1588:17:1588:17 | Load | ~m1585_37 | +| ir.cpp:1588:17:1588:17 | StoreValue | r1588_4 | +| ir.cpp:1589:9:1589:9 | Address | &:r1589_2 | +| ir.cpp:1589:9:1589:9 | Address | &:r1589_4 | +| ir.cpp:1589:9:1589:9 | Load | m1585_40 | +| ir.cpp:1589:9:1589:9 | Unary | r1589_3 | +| ir.cpp:1589:9:1589:13 | ChiPartial | partial:m1589_5 | +| ir.cpp:1589:9:1589:13 | ChiTotal | total:m1585_34 | +| ir.cpp:1589:13:1589:13 | StoreValue | r1589_1 | +| ir.cpp:1590:14:1590:15 | Address | &:r1590_1 | +| ir.cpp:1590:19:1590:19 | Address | &:r1590_2 | +| ir.cpp:1590:19:1590:19 | Load | m1585_40 | +| ir.cpp:1590:19:1590:19 | StoreValue | r1590_5 | +| ir.cpp:1590:19:1590:19 | Unary | r1590_3 | +| ir.cpp:1590:19:1590:19 | Unary | r1590_4 | +| ir.cpp:1591:13:1591:13 | Address | &:r1591_1 | +| ir.cpp:1591:17:1591:17 | Address | &:r1591_2 | +| ir.cpp:1591:17:1591:17 | Address | &:r1591_3 | +| ir.cpp:1591:17:1591:17 | Load | m1585_40 | +| ir.cpp:1591:17:1591:17 | Load | ~m1589_6 | +| ir.cpp:1591:17:1591:17 | StoreValue | r1591_4 | +| ir.cpp:1595:14:1595:35 | Address | &:r1595_1 | +| ir.cpp:1595:39:1595:39 | Address | &:r1595_2 | +| ir.cpp:1595:39:1595:39 | Load | m1582_8 | +| ir.cpp:1595:39:1595:39 | StoreValue | r1595_3 | | ir.cpp:1596:15:1596:15 | Address | &:r1596_1 | | ir.cpp:1596:19:1596:40 | Address | &:r1596_2 | | ir.cpp:1596:19:1596:40 | Address | &:r1596_2 | | ir.cpp:1596:19:1596:40 | Arg(this) | this:r1596_2 | | ir.cpp:1596:19:1596:40 | ChiPartial | partial:m1596_8 | -| ir.cpp:1596:19:1596:40 | ChiTotal | total:m1595_9 | -| ir.cpp:1596:19:1596:40 | SideEffect | m1595_9 | +| ir.cpp:1596:19:1596:40 | ChiTotal | total:m1595_4 | +| ir.cpp:1596:19:1596:40 | SideEffect | m1595_4 | | ir.cpp:1596:42:1596:47 | CallTarget | func:r1596_3 | | ir.cpp:1596:42:1596:47 | ChiPartial | partial:m1596_5 | -| ir.cpp:1596:42:1596:47 | ChiTotal | total:m1595_6 | -| ir.cpp:1596:42:1596:47 | SideEffect | ~m1595_6 | +| ir.cpp:1596:42:1596:47 | ChiTotal | total:m1589_6 | +| ir.cpp:1596:42:1596:47 | SideEffect | ~m1589_6 | | ir.cpp:1596:42:1596:47 | Unary | r1596_4 | | ir.cpp:1596:48:1596:50 | StoreValue | r1596_11 | | ir.cpp:1596:48:1596:50 | Unary | r1596_10 | -| ir.cpp:1597:9:1597:9 | Address | &:r1597_2 | -| ir.cpp:1597:9:1597:9 | Address | &:r1597_4 | -| ir.cpp:1597:9:1597:9 | Load | m1595_12 | -| ir.cpp:1597:9:1597:9 | Unary | r1597_3 | -| ir.cpp:1597:9:1597:15 | ChiPartial | partial:m1597_5 | -| ir.cpp:1597:9:1597:15 | ChiTotal | total:m1596_9 | -| ir.cpp:1597:13:1597:15 | StoreValue | r1597_1 | -| ir.cpp:1598:17:1598:18 | Address | &:r1598_1 | -| ir.cpp:1598:22:1598:22 | Address | &:r1598_2 | -| ir.cpp:1598:22:1598:22 | Load | m1595_12 | -| ir.cpp:1598:22:1598:22 | StoreValue | r1598_5 | -| ir.cpp:1598:22:1598:22 | Unary | r1598_3 | -| ir.cpp:1598:22:1598:22 | Unary | r1598_4 | -| ir.cpp:1599:13:1599:13 | Address | &:r1599_1 | -| ir.cpp:1599:17:1599:17 | Address | &:r1599_2 | -| ir.cpp:1599:17:1599:17 | Address | &:r1599_3 | -| ir.cpp:1599:17:1599:17 | Load | m1594_12 | -| ir.cpp:1599:17:1599:17 | Load | ~m1596_9 | -| ir.cpp:1599:17:1599:17 | StoreValue | r1599_4 | -| ir.cpp:1600:9:1600:9 | Address | &:r1600_2 | -| ir.cpp:1600:9:1600:9 | Address | &:r1600_4 | -| ir.cpp:1600:9:1600:9 | Load | m1596_12 | -| ir.cpp:1600:9:1600:9 | Unary | r1600_3 | -| ir.cpp:1600:9:1600:13 | ChiPartial | partial:m1600_5 | -| ir.cpp:1600:9:1600:13 | ChiTotal | total:m1596_6 | -| ir.cpp:1600:13:1600:13 | StoreValue | r1600_1 | -| ir.cpp:1601:14:1601:15 | Address | &:r1601_1 | -| ir.cpp:1601:19:1601:19 | Address | &:r1601_2 | -| ir.cpp:1601:19:1601:19 | Load | m1596_12 | -| ir.cpp:1601:19:1601:19 | StoreValue | r1601_5 | -| ir.cpp:1601:19:1601:19 | Unary | r1601_3 | -| ir.cpp:1601:19:1601:19 | Unary | r1601_4 | -| ir.cpp:1602:13:1602:13 | Address | &:r1602_1 | -| ir.cpp:1602:17:1602:17 | Address | &:r1602_2 | -| ir.cpp:1602:17:1602:17 | Address | &:r1602_3 | -| ir.cpp:1602:17:1602:17 | Load | m1596_12 | -| ir.cpp:1602:17:1602:17 | Load | ~m1600_6 | -| ir.cpp:1602:17:1602:17 | StoreValue | r1602_4 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_5 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_5 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_7 | -| ir.cpp:1606:8:1606:8 | Address | &:r1606_7 | -| ir.cpp:1606:8:1606:8 | ChiPartial | partial:m1606_3 | -| ir.cpp:1606:8:1606:8 | ChiTotal | total:m1606_2 | -| ir.cpp:1606:8:1606:8 | Load | m1606_6 | -| ir.cpp:1606:8:1606:8 | SideEffect | m1606_3 | -| ir.cpp:1606:8:1606:8 | SideEffect | m1606_8 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_5 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_5 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_7 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_7 | -| ir.cpp:1633:61:1633:98 | Address | &:r1633_10 | -| ir.cpp:1633:61:1633:98 | ChiPartial | partial:m1633_3 | -| ir.cpp:1633:61:1633:98 | ChiTotal | total:m1633_2 | -| ir.cpp:1633:61:1633:98 | Load | m1633_6 | -| ir.cpp:1633:61:1633:98 | Load | m1634_6 | -| ir.cpp:1633:61:1633:98 | SideEffect | m1633_3 | -| ir.cpp:1633:61:1633:98 | SideEffect | m1633_8 | -| ir.cpp:1634:5:1634:13 | Address | &:r1634_1 | -| ir.cpp:1634:12:1634:12 | Address | &:r1634_2 | -| ir.cpp:1634:12:1634:12 | Address | &:r1634_4 | -| ir.cpp:1634:12:1634:12 | Load | m1633_6 | -| ir.cpp:1634:12:1634:12 | Load | ~m1633_8 | -| ir.cpp:1634:12:1634:12 | StoreValue | r1634_5 | -| ir.cpp:1634:12:1634:12 | Unary | r1634_3 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_5 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_5 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_7 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_7 | -| ir.cpp:1637:61:1637:98 | Address | &:r1637_10 | -| ir.cpp:1637:61:1637:98 | ChiPartial | partial:m1637_3 | -| ir.cpp:1637:61:1637:98 | ChiTotal | total:m1637_2 | -| ir.cpp:1637:61:1637:98 | Load | m1637_6 | -| ir.cpp:1637:61:1637:98 | Load | m1638_8 | -| ir.cpp:1637:61:1637:98 | SideEffect | m1637_3 | -| ir.cpp:1637:61:1637:98 | SideEffect | m1637_8 | -| ir.cpp:1638:5:1638:13 | Address | &:r1638_1 | -| ir.cpp:1638:12:1638:12 | Address | &:r1638_2 | -| ir.cpp:1638:12:1638:12 | Address | &:r1638_4 | -| ir.cpp:1638:12:1638:12 | Load | m1637_6 | -| ir.cpp:1638:12:1638:12 | Load | ~m1637_8 | -| ir.cpp:1638:12:1638:12 | StoreValue | r1638_7 | -| ir.cpp:1638:12:1638:12 | Unary | r1638_3 | -| ir.cpp:1638:12:1638:12 | Unary | r1638_5 | -| ir.cpp:1638:12:1638:12 | Unary | r1638_6 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_5 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_5 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_7 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_7 | -| ir.cpp:1641:61:1641:98 | Address | &:r1641_10 | -| ir.cpp:1641:61:1641:98 | ChiPartial | partial:m1641_3 | -| ir.cpp:1641:61:1641:98 | ChiTotal | total:m1641_2 | -| ir.cpp:1641:61:1641:98 | Load | m1641_6 | -| ir.cpp:1641:61:1641:98 | Load | m1642_6 | -| ir.cpp:1641:61:1641:98 | SideEffect | m1641_3 | -| ir.cpp:1641:61:1641:98 | SideEffect | m1641_8 | -| ir.cpp:1642:5:1642:13 | Address | &:r1642_1 | -| ir.cpp:1642:12:1642:12 | Address | &:r1642_2 | -| ir.cpp:1642:12:1642:12 | StoreValue | r1642_3 | -| ir.cpp:1642:12:1642:12 | StoreValue | r1642_5 | -| ir.cpp:1642:12:1642:12 | Unary | r1642_2 | -| ir.cpp:1645:6:1645:40 | ChiPartial | partial:m1645_3 | -| ir.cpp:1645:6:1645:40 | ChiTotal | total:m1645_2 | -| ir.cpp:1645:6:1645:40 | SideEffect | ~m1666_6 | -| ir.cpp:1646:36:1646:36 | Address | &:r1646_1 | -| ir.cpp:1646:36:1646:36 | Address | &:r1646_1 | -| ir.cpp:1646:36:1646:36 | Arg(this) | this:r1646_1 | -| ir.cpp:1646:36:1646:36 | CallTarget | func:r1646_3 | -| ir.cpp:1646:36:1646:36 | ChiPartial | partial:m1646_5 | -| ir.cpp:1646:36:1646:36 | ChiPartial | partial:m1646_7 | -| ir.cpp:1646:36:1646:36 | ChiTotal | total:m1645_4 | -| ir.cpp:1646:36:1646:36 | ChiTotal | total:m1646_2 | -| ir.cpp:1646:36:1646:36 | SideEffect | ~m1645_4 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_1 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_7 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_21 | -| ir.cpp:1649:16:1649:16 | Address | &:r1649_35 | -| ir.cpp:1649:16:1649:16 | CallTarget | func:r1649_10 | -| ir.cpp:1649:16:1649:16 | CallTarget | func:r1649_24 | -| ir.cpp:1649:16:1649:16 | CallTarget | func:r1649_38 | -| ir.cpp:1649:16:1649:16 | ChiPartial | partial:m1649_12 | -| ir.cpp:1649:16:1649:16 | ChiPartial | partial:m1649_26 | -| ir.cpp:1649:16:1649:16 | ChiPartial | partial:m1649_40 | -| ir.cpp:1649:16:1649:16 | ChiTotal | total:m1646_6 | -| ir.cpp:1649:16:1649:16 | ChiTotal | total:m1649_13 | -| ir.cpp:1649:16:1649:16 | ChiTotal | total:m1649_27 | -| ir.cpp:1649:16:1649:16 | Load | m1649_4 | -| ir.cpp:1649:16:1649:16 | Load | m1649_4 | -| ir.cpp:1649:16:1649:16 | Load | m1649_4 | -| ir.cpp:1649:16:1649:16 | SideEffect | ~m1646_6 | -| ir.cpp:1649:16:1649:16 | SideEffect | ~m1649_13 | -| ir.cpp:1649:16:1649:16 | SideEffect | ~m1649_27 | -| ir.cpp:1649:16:1649:16 | StoreValue | r1649_11 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_8 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_22 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_25 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_36 | -| ir.cpp:1649:16:1649:16 | Unary | r1649_39 | -| ir.cpp:1649:16:1649:30 | Address | &:r1649_6 | -| ir.cpp:1649:16:1649:30 | StoreValue | r1649_18 | -| ir.cpp:1649:16:1649:30 | StoreValue | r1649_32 | -| ir.cpp:1649:16:1649:30 | StoreValue | r1649_46 | -| ir.cpp:1649:16:1649:30 | Unary | r1649_6 | -| ir.cpp:1649:16:1649:30 | Unary | r1649_31 | -| ir.cpp:1649:16:1649:30 | Unary | r1649_45 | -| ir.cpp:1649:17:1649:17 | Address | &:r1649_5 | -| ir.cpp:1649:20:1649:20 | Address | &:r1649_20 | -| ir.cpp:1649:23:1649:23 | Address | &:r1649_34 | -| ir.cpp:1649:29:1649:29 | StoreValue | r1649_3 | -| ir.cpp:1649:29:1649:29 | Unary | r1649_2 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_9 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_9 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_23 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_23 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_37 | -| ir.cpp:1649:30:1649:30 | Address | &:r1649_37 | -| ir.cpp:1649:30:1649:30 | Arg(this) | this:r1649_9 | -| ir.cpp:1649:30:1649:30 | Arg(this) | this:r1649_23 | -| ir.cpp:1649:30:1649:30 | Arg(this) | this:r1649_37 | -| ir.cpp:1649:30:1649:30 | ChiPartial | partial:m1649_15 | -| ir.cpp:1649:30:1649:30 | ChiPartial | partial:m1649_29 | -| ir.cpp:1649:30:1649:30 | ChiPartial | partial:m1649_43 | -| ir.cpp:1649:30:1649:30 | ChiTotal | total:m1646_8 | -| ir.cpp:1649:30:1649:30 | ChiTotal | total:m1649_16 | -| ir.cpp:1649:30:1649:30 | ChiTotal | total:m1649_30 | -| ir.cpp:1649:30:1649:30 | SideEffect | m1646_8 | -| ir.cpp:1649:30:1649:30 | SideEffect | m1649_16 | -| ir.cpp:1649:30:1649:30 | SideEffect | m1649_30 | -| ir.cpp:1650:9:1650:9 | Address | &:r1650_2 | -| ir.cpp:1650:9:1650:9 | Address | &:r1650_4 | -| ir.cpp:1650:9:1650:9 | Load | m1649_19 | -| ir.cpp:1650:9:1650:9 | Unary | r1650_3 | -| ir.cpp:1650:13:1650:13 | StoreValue | r1650_1 | -| ir.cpp:1651:14:1651:15 | Address | &:r1651_1 | -| ir.cpp:1651:19:1651:19 | Address | &:r1651_2 | -| ir.cpp:1651:19:1651:19 | Load | m1649_19 | -| ir.cpp:1651:19:1651:19 | StoreValue | r1651_5 | -| ir.cpp:1651:19:1651:19 | Unary | r1651_3 | -| ir.cpp:1651:19:1651:19 | Unary | r1651_4 | -| ir.cpp:1652:13:1652:13 | Address | &:r1652_1 | -| ir.cpp:1652:17:1652:17 | Address | &:r1652_2 | -| ir.cpp:1652:17:1652:17 | Address | &:r1652_3 | -| ir.cpp:1652:17:1652:17 | Load | m1649_19 | -| ir.cpp:1652:17:1652:17 | Load | m1650_5 | -| ir.cpp:1652:17:1652:17 | StoreValue | r1652_4 | -| ir.cpp:1653:9:1653:9 | Address | &:r1653_2 | -| ir.cpp:1653:9:1653:9 | Address | &:r1653_4 | -| ir.cpp:1653:9:1653:9 | Load | m1649_33 | -| ir.cpp:1653:9:1653:9 | Unary | r1653_3 | -| ir.cpp:1653:9:1653:13 | ChiPartial | partial:m1653_5 | -| ir.cpp:1653:9:1653:13 | ChiTotal | total:m1649_41 | -| ir.cpp:1653:13:1653:13 | StoreValue | r1653_1 | -| ir.cpp:1654:14:1654:15 | Address | &:r1654_1 | -| ir.cpp:1654:19:1654:19 | Address | &:r1654_2 | -| ir.cpp:1654:19:1654:19 | Load | m1649_33 | -| ir.cpp:1654:19:1654:19 | StoreValue | r1654_5 | -| ir.cpp:1654:19:1654:19 | Unary | r1654_3 | -| ir.cpp:1654:19:1654:19 | Unary | r1654_4 | -| ir.cpp:1655:13:1655:13 | Address | &:r1655_1 | -| ir.cpp:1655:17:1655:17 | Address | &:r1655_2 | -| ir.cpp:1655:17:1655:17 | Address | &:r1655_3 | -| ir.cpp:1655:17:1655:17 | Load | m1649_33 | -| ir.cpp:1655:17:1655:17 | Load | ~m1653_6 | -| ir.cpp:1655:17:1655:17 | StoreValue | r1655_4 | -| ir.cpp:1659:16:1659:37 | Address | &:r1659_1 | -| ir.cpp:1659:41:1659:41 | StoreValue | r1659_3 | -| ir.cpp:1659:41:1659:41 | Unary | r1659_2 | -| ir.cpp:1660:16:1660:16 | Address | &:r1660_1 | -| ir.cpp:1660:20:1660:41 | Address | &:r1660_3 | -| ir.cpp:1660:20:1660:41 | Address | &:r1660_5 | -| ir.cpp:1660:20:1660:41 | Address | &:r1660_5 | -| ir.cpp:1660:20:1660:41 | Arg(this) | this:r1660_5 | -| ir.cpp:1660:20:1660:41 | ChiPartial | partial:m1660_11 | -| ir.cpp:1660:20:1660:41 | ChiTotal | total:m1649_44 | -| ir.cpp:1660:20:1660:41 | Load | m1659_4 | -| ir.cpp:1660:20:1660:41 | SideEffect | m1649_44 | -| ir.cpp:1660:20:1660:41 | Unary | r1660_4 | -| ir.cpp:1660:20:1660:50 | Address | &:r1660_2 | -| ir.cpp:1660:20:1660:50 | StoreValue | r1660_14 | -| ir.cpp:1660:20:1660:50 | Unary | r1660_2 | -| ir.cpp:1660:43:1660:48 | CallTarget | func:r1660_6 | -| ir.cpp:1660:43:1660:48 | ChiPartial | partial:m1660_8 | -| ir.cpp:1660:43:1660:48 | ChiTotal | total:m1653_6 | -| ir.cpp:1660:43:1660:48 | SideEffect | ~m1653_6 | -| ir.cpp:1660:43:1660:48 | StoreValue | r1660_7 | -| ir.cpp:1661:15:1661:15 | Address | &:r1661_1 | -| ir.cpp:1661:19:1661:40 | Address | &:r1661_2 | -| ir.cpp:1661:19:1661:40 | Address | &:r1661_4 | -| ir.cpp:1661:19:1661:40 | Address | &:r1661_4 | -| ir.cpp:1661:19:1661:40 | Arg(this) | this:r1661_4 | -| ir.cpp:1661:19:1661:40 | ChiPartial | partial:m1661_10 | -| ir.cpp:1661:19:1661:40 | ChiTotal | total:m1660_12 | -| ir.cpp:1661:19:1661:40 | Load | m1659_4 | -| ir.cpp:1661:19:1661:40 | SideEffect | m1660_12 | -| ir.cpp:1661:19:1661:40 | Unary | r1661_3 | -| ir.cpp:1661:42:1661:47 | CallTarget | func:r1661_5 | -| ir.cpp:1661:42:1661:47 | ChiPartial | partial:m1661_7 | -| ir.cpp:1661:42:1661:47 | ChiTotal | total:m1660_9 | -| ir.cpp:1661:42:1661:47 | SideEffect | ~m1660_9 | -| ir.cpp:1661:42:1661:47 | Unary | r1661_6 | -| ir.cpp:1661:48:1661:50 | StoreValue | r1661_13 | -| ir.cpp:1661:48:1661:50 | Unary | r1661_12 | -| ir.cpp:1662:16:1662:17 | Address | &:r1662_1 | -| ir.cpp:1662:21:1662:42 | Address | &:r1662_2 | -| ir.cpp:1662:21:1662:42 | Address | &:r1662_4 | -| ir.cpp:1662:21:1662:42 | Address | &:r1662_4 | -| ir.cpp:1662:21:1662:42 | Arg(this) | this:r1662_4 | -| ir.cpp:1662:21:1662:42 | ChiPartial | partial:m1662_10 | -| ir.cpp:1662:21:1662:42 | ChiTotal | total:m1661_11 | -| ir.cpp:1662:21:1662:42 | Load | m1659_4 | -| ir.cpp:1662:21:1662:42 | SideEffect | m1661_11 | -| ir.cpp:1662:21:1662:42 | Unary | r1662_3 | -| ir.cpp:1662:44:1662:49 | CallTarget | func:r1662_5 | -| ir.cpp:1662:44:1662:49 | ChiPartial | partial:m1662_7 | -| ir.cpp:1662:44:1662:49 | ChiTotal | total:m1661_8 | -| ir.cpp:1662:44:1662:49 | SideEffect | ~m1661_8 | -| ir.cpp:1662:44:1662:49 | Unary | r1662_6 | -| ir.cpp:1662:50:1662:52 | StoreValue | r1662_13 | -| ir.cpp:1662:50:1662:52 | Unary | r1662_12 | -| ir.cpp:1663:9:1663:9 | Address | &:r1663_2 | -| ir.cpp:1663:9:1663:9 | Address | &:r1663_4 | -| ir.cpp:1663:9:1663:9 | Load | m1660_15 | -| ir.cpp:1663:9:1663:9 | Unary | r1663_3 | -| ir.cpp:1663:13:1663:13 | StoreValue | r1663_1 | -| ir.cpp:1664:14:1664:15 | Address | &:r1664_1 | -| ir.cpp:1664:19:1664:19 | Address | &:r1664_2 | -| ir.cpp:1664:19:1664:19 | Load | m1660_15 | -| ir.cpp:1664:19:1664:19 | StoreValue | r1664_5 | -| ir.cpp:1664:19:1664:19 | Unary | r1664_3 | -| ir.cpp:1664:19:1664:19 | Unary | r1664_4 | -| ir.cpp:1665:13:1665:13 | Address | &:r1665_1 | -| ir.cpp:1665:17:1665:17 | Address | &:r1665_2 | -| ir.cpp:1665:17:1665:17 | Address | &:r1665_3 | -| ir.cpp:1665:17:1665:17 | Load | m1660_15 | -| ir.cpp:1665:17:1665:17 | Load | m1663_5 | -| ir.cpp:1665:17:1665:17 | StoreValue | r1665_4 | -| ir.cpp:1666:9:1666:9 | Address | &:r1666_2 | -| ir.cpp:1666:9:1666:9 | Address | &:r1666_4 | -| ir.cpp:1666:9:1666:9 | Load | m1661_14 | -| ir.cpp:1666:9:1666:9 | Unary | r1666_3 | -| ir.cpp:1666:9:1666:13 | ChiPartial | partial:m1666_5 | -| ir.cpp:1666:9:1666:13 | ChiTotal | total:m1662_8 | -| ir.cpp:1666:13:1666:13 | StoreValue | r1666_1 | -| ir.cpp:1667:14:1667:15 | Address | &:r1667_1 | -| ir.cpp:1667:19:1667:19 | Address | &:r1667_2 | -| ir.cpp:1667:19:1667:19 | Load | m1661_14 | -| ir.cpp:1667:19:1667:19 | StoreValue | r1667_5 | -| ir.cpp:1667:19:1667:19 | Unary | r1667_3 | -| ir.cpp:1667:19:1667:19 | Unary | r1667_4 | -| ir.cpp:1668:13:1668:13 | Address | &:r1668_1 | -| ir.cpp:1668:17:1668:17 | Address | &:r1668_2 | -| ir.cpp:1668:17:1668:17 | Address | &:r1668_3 | -| ir.cpp:1668:17:1668:17 | Load | m1661_14 | -| ir.cpp:1668:17:1668:17 | Load | ~m1666_6 | -| ir.cpp:1668:17:1668:17 | StoreValue | r1668_4 | -| ir.cpp:1672:6:1672:42 | ChiPartial | partial:m1672_3 | -| ir.cpp:1672:6:1672:42 | ChiTotal | total:m1672_2 | -| ir.cpp:1672:6:1672:42 | SideEffect | m1672_3 | -| ir.cpp:1673:9:1673:10 | Address | &:r1673_1 | -| ir.cpp:1673:9:1673:10 | Left | r1673_1 | -| ir.cpp:1673:9:1673:10 | Left | r1673_1 | -| ir.cpp:1673:16:1673:22 | Address | &:r1673_4 | -| ir.cpp:1673:16:1673:22 | Address | &:r1673_9 | -| ir.cpp:1673:16:1673:22 | Right | r1673_3 | -| ir.cpp:1673:16:1673:22 | Right | r1673_8 | -| ir.cpp:1673:18:1673:18 | ChiPartial | partial:m1673_6 | -| ir.cpp:1673:18:1673:18 | ChiTotal | total:m1673_2 | -| ir.cpp:1673:18:1673:18 | StoreValue | r1673_5 | -| ir.cpp:1673:21:1673:21 | ChiPartial | partial:m1673_11 | -| ir.cpp:1673:21:1673:21 | ChiTotal | total:m1673_7 | -| ir.cpp:1673:21:1673:21 | StoreValue | r1673_10 | -| ir.cpp:1674:10:1674:10 | Address | &:r1674_1 | -| ir.cpp:1674:11:1674:11 | Address | &:r1674_5 | -| ir.cpp:1674:15:1674:15 | Address | &:r1674_6 | -| ir.cpp:1674:21:1674:22 | Address | &:r1674_2 | -| ir.cpp:1674:21:1674:22 | Load | m1673_12 | -| ir.cpp:1674:21:1674:22 | StoreValue | r1674_3 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_5 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_5 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_7 | -| ir.cpp:1680:5:1680:23 | Address | &:r1680_7 | -| ir.cpp:1680:5:1680:23 | ChiPartial | partial:m1680_3 | -| ir.cpp:1680:5:1680:23 | ChiTotal | total:m1680_2 | -| ir.cpp:1680:5:1680:23 | Load | m1680_6 | -| ir.cpp:1680:5:1680:23 | SideEffect | m1680_3 | -| ir.cpp:1680:5:1680:23 | SideEffect | m1680_8 | -| ir.cpp:1683:6:1683:20 | ChiPartial | partial:m1683_3 | -| ir.cpp:1683:6:1683:20 | ChiTotal | total:m1683_2 | -| ir.cpp:1683:6:1683:20 | SideEffect | ~m1686_6 | -| ir.cpp:1683:26:1683:26 | Address | &:r1683_5 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_7 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_7 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_9 | -| ir.cpp:1683:34:1683:34 | Address | &:r1683_9 | -| ir.cpp:1683:34:1683:34 | Load | m1683_8 | -| ir.cpp:1683:34:1683:34 | SideEffect | m1683_10 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_11 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_11 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_13 | -| ir.cpp:1683:43:1683:43 | Address | &:r1683_13 | -| ir.cpp:1683:43:1683:43 | Load | m1683_12 | -| ir.cpp:1683:43:1683:43 | SideEffect | m1683_14 | -| ir.cpp:1685:17:1685:20 | Address | &:r1685_1 | -| ir.cpp:1685:24:1685:44 | Address | &:r1685_2 | -| ir.cpp:1685:24:1685:44 | Address | &:r1685_2 | -| ir.cpp:1685:24:1685:44 | Arg(this) | this:r1685_2 | -| ir.cpp:1685:24:1685:44 | CallTarget | func:r1685_4 | -| ir.cpp:1685:24:1685:44 | ChiPartial | partial:m1685_6 | -| ir.cpp:1685:24:1685:44 | ChiPartial | partial:m1685_8 | -| ir.cpp:1685:24:1685:44 | ChiTotal | total:m1683_4 | -| ir.cpp:1685:24:1685:44 | ChiTotal | total:m1685_3 | -| ir.cpp:1685:24:1685:44 | SideEffect | ~m1683_4 | -| ir.cpp:1685:24:1685:44 | StoreValue | r1685_11 | -| ir.cpp:1685:24:1685:44 | Unary | r1685_2 | -| ir.cpp:1685:24:1685:44 | Unary | r1685_10 | -| ir.cpp:1686:10:1686:13 | Address | &:r1686_1 | -| ir.cpp:1686:10:1686:13 | Address | &:r1686_1 | -| ir.cpp:1686:10:1686:13 | Arg(this) | this:r1686_1 | -| ir.cpp:1686:16:1686:37 | CallTarget | func:r1686_3 | -| ir.cpp:1686:16:1686:37 | ChiPartial | partial:m1686_5 | -| ir.cpp:1686:16:1686:37 | ChiPartial | partial:m1686_7 | -| ir.cpp:1686:16:1686:37 | ChiTotal | total:m1685_7 | -| ir.cpp:1686:16:1686:37 | ChiTotal | total:m1686_2 | -| ir.cpp:1686:16:1686:37 | SideEffect | ~m1685_7 | -| ir.cpp:1688:10:1688:21 | Address | &:r1688_1 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_2 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_2 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_4 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_5 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_6 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_7 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_8 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_12 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_17 | -| ir.cpp:1688:24:1690:5 | Address | &:r1688_20 | -| ir.cpp:1688:24:1690:5 | ChiPartial | partial:m1688_10 | -| ir.cpp:1688:24:1690:5 | ChiTotal | total:m0_3 | -| ir.cpp:1688:24:1690:5 | Load | m1685_12 | -| ir.cpp:1688:24:1690:5 | Load | m1686_8 | -| ir.cpp:1688:24:1690:5 | Load | m1690_6 | -| ir.cpp:1688:24:1690:5 | StoreValue | r1688_9 | -| ir.cpp:1688:24:1690:5 | StoreValue | r1688_23 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:24:1690:5 | Unary | r1688_2 | -| ir.cpp:1688:38:1688:38 | Address | &:r1688_13 | -| ir.cpp:1688:38:1688:38 | ChiPartial | partial:m1688_15 | -| ir.cpp:1688:38:1688:38 | ChiTotal | total:m1688_11 | -| ir.cpp:1688:38:1688:38 | Load | m1683_6 | -| ir.cpp:1688:38:1688:38 | StoreValue | r1688_14 | -| ir.cpp:1688:41:1688:41 | Address | &:r1688_18 | -| ir.cpp:1688:41:1688:41 | Address | &:r1688_19 | -| ir.cpp:1688:41:1688:41 | Load | m1683_8 | -| ir.cpp:1688:44:1688:44 | Address | &:r1688_21 | -| ir.cpp:1688:44:1688:44 | Address | &:r1688_22 | -| ir.cpp:1688:44:1688:44 | Load | m1683_12 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_5 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_5 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_7 | -| ir.cpp:1688:46:1688:46 | Address | &:r1688_7 | -| ir.cpp:1688:46:1688:46 | ChiPartial | partial:m1688_3 | -| ir.cpp:1688:46:1688:46 | ChiTotal | total:m1688_2 | -| ir.cpp:1688:46:1688:46 | Load | m1688_6 | -| ir.cpp:1688:46:1688:46 | SideEffect | m1688_3 | -| ir.cpp:1688:46:1688:46 | SideEffect | m1688_8 | -| ir.cpp:1689:14:1689:25 | Address | &:r1689_1 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_2 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_2 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_4 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_5 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_7 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_11 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_12 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_14 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_18 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_19 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_21 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_25 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_26 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_28 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_32 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_33 | -| ir.cpp:1689:28:1689:54 | Address | &:r1689_35 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_9 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_16 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_23 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_30 | -| ir.cpp:1689:28:1689:54 | ChiPartial | partial:m1689_37 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_3 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_10 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_17 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_24 | -| ir.cpp:1689:28:1689:54 | ChiTotal | total:m1689_31 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1688_6 | -| ir.cpp:1689:28:1689:54 | Load | m1689_38 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | Load | ~m1688_8 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_8 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_15 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_22 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_29 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_36 | -| ir.cpp:1689:28:1689:54 | StoreValue | r1689_39 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_2 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_6 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_13 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_20 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_27 | -| ir.cpp:1689:28:1689:54 | Unary | r1689_34 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_5 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_5 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_7 | -| ir.cpp:1689:50:1689:50 | Address | &:r1689_7 | -| ir.cpp:1689:50:1689:50 | ChiPartial | partial:m1689_3 | -| ir.cpp:1689:50:1689:50 | ChiTotal | total:m1689_2 | -| ir.cpp:1689:50:1689:50 | Load | m1689_6 | -| ir.cpp:1689:50:1689:50 | SideEffect | m1689_3 | -| ir.cpp:1689:50:1689:50 | SideEffect | m1689_8 | -| ir.cpp:1690:6:1690:6 | ChiPartial | partial:m1690_2 | -| ir.cpp:1690:6:1690:6 | ChiPartial | partial:m1690_5 | -| ir.cpp:1690:6:1690:6 | ChiTotal | total:m1688_16 | -| ir.cpp:1690:6:1690:6 | ChiTotal | total:m1690_3 | -| ir.cpp:1690:6:1690:6 | Load | ~m1683_10 | -| ir.cpp:1690:6:1690:6 | Load | ~m1683_14 | -| ir.cpp:1690:6:1690:6 | StoreValue | r1690_1 | -| ir.cpp:1690:6:1690:6 | StoreValue | r1690_4 | -| ir.cpp:1693:5:1693:21 | Address | &:r1693_5 | -| ir.cpp:1693:5:1693:21 | ChiPartial | partial:m1693_3 | -| ir.cpp:1693:5:1693:21 | ChiTotal | total:m1693_2 | -| ir.cpp:1693:5:1693:21 | Load | m1696_4 | -| ir.cpp:1693:5:1693:21 | SideEffect | m1693_3 | -| ir.cpp:1694:7:1694:7 | Address | &:r1694_1 | -| ir.cpp:1694:10:1694:12 | StoreValue | r1694_2 | -| ir.cpp:1696:3:1696:11 | Address | &:r1696_1 | -| ir.cpp:1696:10:1696:10 | Address | &:r1696_2 | -| ir.cpp:1696:10:1696:10 | Load | m1694_3 | -| ir.cpp:1696:10:1696:10 | StoreValue | r1696_3 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_5 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_5 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_7 | -| ir.cpp:1701:10:1701:10 | Address | &:r1701_7 | -| ir.cpp:1701:10:1701:10 | ChiPartial | partial:m1701_3 | -| ir.cpp:1701:10:1701:10 | ChiTotal | total:m1701_2 | -| ir.cpp:1701:10:1701:10 | Load | m1701_6 | -| ir.cpp:1701:10:1701:10 | SideEffect | m1701_3 | -| ir.cpp:1701:10:1701:10 | SideEffect | m1701_8 | -| ir.cpp:1702:14:1702:22 | Address | &:r1702_1 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_2 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_2 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_4 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_5 | -| ir.cpp:1702:25:1708:9 | Address | &:r1702_6 | -| ir.cpp:1702:25:1708:9 | Load | m1701_6 | -| ir.cpp:1702:25:1708:9 | Load | ~m1701_8 | -| ir.cpp:1702:25:1708:9 | Load | ~m1702_8 | -| ir.cpp:1702:25:1708:9 | StoreValue | r1702_7 | -| ir.cpp:1702:25:1708:9 | StoreValue | r1702_9 | -| ir.cpp:1702:25:1708:9 | Unary | r1702_2 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_5 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_5 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_7 | -| ir.cpp:1702:34:1702:34 | Address | &:r1702_7 | -| ir.cpp:1702:34:1702:34 | ChiPartial | partial:m1702_3 | -| ir.cpp:1702:34:1702:34 | ChiTotal | total:m1702_2 | -| ir.cpp:1702:34:1702:34 | Load | m1702_6 | -| ir.cpp:1702:34:1702:34 | SideEffect | m1702_8 | -| ir.cpp:1702:34:1702:34 | SideEffect | ~m1703_8 | -| ir.cpp:1703:13:1703:13 | Address | &:r1703_1 | -| ir.cpp:1703:13:1703:13 | Address | &:r1703_4 | -| ir.cpp:1703:13:1703:13 | Arg(this) | this:r1703_4 | -| ir.cpp:1703:13:1703:13 | CallTarget | func:r1703_5 | -| ir.cpp:1703:13:1703:13 | ChiPartial | partial:m1703_7 | -| ir.cpp:1703:13:1703:13 | ChiTotal | total:m1702_4 | -| ir.cpp:1703:13:1703:13 | Load | m1702_6 | -| ir.cpp:1703:13:1703:13 | SideEffect | ~m1702_4 | -| ir.cpp:1703:13:1703:13 | SideEffect | ~m1702_8 | -| ir.cpp:1703:13:1703:13 | Unary | r1703_2 | -| ir.cpp:1703:13:1703:13 | Unary | r1703_3 | -| ir.cpp:1705:18:1705:26 | Address | &:r1705_1 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_2 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_2 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_4 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_5 | -| ir.cpp:1705:29:1707:13 | Address | &:r1705_7 | -| ir.cpp:1705:29:1707:13 | Load | m1702_6 | -| ir.cpp:1705:29:1707:13 | Load | ~m1702_8 | -| ir.cpp:1705:29:1707:13 | Load | ~m1705_9 | -| ir.cpp:1705:29:1707:13 | StoreValue | r1705_8 | -| ir.cpp:1705:29:1707:13 | StoreValue | r1705_10 | -| ir.cpp:1705:29:1707:13 | Unary | r1705_2 | -| ir.cpp:1705:29:1707:13 | Unary | r1705_6 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_5 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_5 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_7 | -| ir.cpp:1705:38:1705:38 | Address | &:r1705_7 | -| ir.cpp:1705:38:1705:38 | ChiPartial | partial:m1705_3 | -| ir.cpp:1705:38:1705:38 | ChiTotal | total:m1705_2 | -| ir.cpp:1705:38:1705:38 | Load | m1705_6 | -| ir.cpp:1705:38:1705:38 | SideEffect | m1705_8 | -| ir.cpp:1705:38:1705:38 | SideEffect | ~m1706_8 | -| ir.cpp:1706:17:1706:17 | Address | &:r1706_1 | -| ir.cpp:1706:17:1706:17 | Address | &:r1706_4 | -| ir.cpp:1706:17:1706:17 | Arg(this) | this:r1706_4 | -| ir.cpp:1706:17:1706:17 | CallTarget | func:r1706_5 | -| ir.cpp:1706:17:1706:17 | ChiPartial | partial:m1706_7 | -| ir.cpp:1706:17:1706:17 | ChiTotal | total:m1705_4 | -| ir.cpp:1706:17:1706:17 | Load | m1705_6 | -| ir.cpp:1706:17:1706:17 | SideEffect | ~m1705_4 | -| ir.cpp:1706:17:1706:17 | SideEffect | ~m1705_8 | -| ir.cpp:1706:17:1706:17 | Unary | r1706_2 | -| ir.cpp:1706:17:1706:17 | Unary | r1706_3 | -| ir.cpp:1712:6:1712:21 | ChiPartial | partial:m1712_3 | -| ir.cpp:1712:6:1712:21 | ChiTotal | total:m1712_2 | -| ir.cpp:1712:6:1712:21 | SideEffect | m1712_3 | -| ir.cpp:1712:42:1712:43 | Address | &:r1712_5 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_7 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_7 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_9 | -| ir.cpp:1712:66:1712:67 | Address | &:r1712_9 | -| ir.cpp:1712:66:1712:67 | Load | m1712_8 | -| ir.cpp:1712:66:1712:67 | SideEffect | m1712_10 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_11 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_11 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_13 | -| ir.cpp:1712:91:1712:92 | Address | &:r1712_13 | -| ir.cpp:1712:91:1712:92 | Load | m1712_12 | -| ir.cpp:1712:91:1712:92 | SideEffect | m1712_14 | -| ir.cpp:1713:30:1713:31 | Address | &:r1713_1 | -| ir.cpp:1714:31:1714:32 | Address | &:r1714_1 | -| ir.cpp:1714:36:1714:55 | Address | &:r1714_2 | -| ir.cpp:1714:36:1714:55 | StoreValue | r1714_3 | -| ir.cpp:1714:36:1714:55 | StoreValue | r1714_6 | -| ir.cpp:1714:36:1714:55 | Unary | r1714_2 | -| ir.cpp:1714:36:1714:55 | Unary | r1714_5 | -| ir.cpp:1716:10:1716:17 | Address | &:r1716_1 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_2 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_2 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_4 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_5 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_9 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_10 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_11 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_12 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_13 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_14 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_15 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_16 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_20 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_21 | -| ir.cpp:1716:20:1718:5 | Address | &:r1716_22 | -| ir.cpp:1716:20:1718:5 | ChiPartial | partial:m1716_7 | -| ir.cpp:1716:20:1718:5 | ChiPartial | partial:m1716_18 | -| ir.cpp:1716:20:1718:5 | ChiTotal | total:m0_6 | -| ir.cpp:1716:20:1718:5 | ChiTotal | total:m1716_3 | -| ir.cpp:1716:20:1718:5 | Load | m0_9 | -| ir.cpp:1716:20:1718:5 | Load | m1712_6 | -| ir.cpp:1716:20:1718:5 | Load | m1712_8 | -| ir.cpp:1716:20:1718:5 | Load | m1712_12 | -| ir.cpp:1716:20:1718:5 | Load | m1713_2 | -| ir.cpp:1716:20:1718:5 | Load | m1714_7 | -| ir.cpp:1716:20:1718:5 | StoreValue | r1716_6 | -| ir.cpp:1716:20:1718:5 | StoreValue | r1716_17 | -| ir.cpp:1716:20:1718:5 | StoreValue | r1716_23 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:20:1718:5 | Unary | r1716_2 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_5 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_5 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_7 | -| ir.cpp:1716:42:1716:42 | Address | &:r1716_7 | -| ir.cpp:1716:42:1716:42 | ChiPartial | partial:m1716_3 | -| ir.cpp:1716:42:1716:42 | ChiTotal | total:m1716_2 | -| ir.cpp:1716:42:1716:42 | Load | m1716_6 | -| ir.cpp:1716:42:1716:42 | SideEffect | m1716_3 | -| ir.cpp:1716:42:1716:42 | SideEffect | m1716_8 | -| ir.cpp:1717:14:1717:21 | Address | &:r1717_1 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_2 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_2 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_4 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_5 | -| ir.cpp:1717:24:1717:31 | Address | &:r1717_7 | -| ir.cpp:1717:24:1717:31 | Load | m1716_6 | -| ir.cpp:1717:24:1717:31 | Load | ~m1716_8 | -| ir.cpp:1717:24:1717:31 | Load | ~m1717_9 | -| ir.cpp:1717:24:1717:31 | StoreValue | r1717_8 | -| ir.cpp:1717:24:1717:31 | StoreValue | r1717_10 | -| ir.cpp:1717:24:1717:31 | Unary | r1717_2 | -| ir.cpp:1717:24:1717:31 | Unary | r1717_6 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_5 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_5 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_7 | -| ir.cpp:1717:30:1717:30 | Address | &:r1717_7 | -| ir.cpp:1717:30:1717:30 | ChiPartial | partial:m1717_3 | -| ir.cpp:1717:30:1717:30 | ChiTotal | total:m1717_2 | -| ir.cpp:1717:30:1717:30 | Load | m1717_6 | -| ir.cpp:1717:30:1717:30 | SideEffect | m1717_3 | -| ir.cpp:1717:30:1717:30 | SideEffect | m1717_8 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_5 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_5 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_7 | -| ir.cpp:1724:5:1724:44 | Address | &:r1724_7 | -| ir.cpp:1724:5:1724:44 | ChiPartial | partial:m1724_3 | -| ir.cpp:1724:5:1724:44 | ChiTotal | total:m1724_2 | -| ir.cpp:1724:5:1724:44 | Load | m1724_6 | -| ir.cpp:1724:5:1724:44 | SideEffect | m1724_3 | -| ir.cpp:1724:5:1724:44 | SideEffect | m1724_8 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_5 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_5 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_7 | -| ir.cpp:1725:5:1725:44 | Address | &:r1725_7 | -| ir.cpp:1725:5:1725:44 | ChiPartial | partial:m1725_3 | -| ir.cpp:1725:5:1725:44 | ChiTotal | total:m1725_2 | -| ir.cpp:1725:5:1725:44 | Load | m1725_6 | -| ir.cpp:1725:5:1725:44 | SideEffect | m1725_3 | -| ir.cpp:1725:5:1725:44 | SideEffect | m1726_10 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_9 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_9 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_11 | -| ir.cpp:1725:94:1725:94 | Address | &:r1725_11 | -| ir.cpp:1725:94:1725:94 | Load | m1725_10 | -| ir.cpp:1725:94:1725:94 | SideEffect | m1725_12 | -| ir.cpp:1726:9:1726:9 | Address | &:r1726_6 | -| ir.cpp:1726:9:1726:9 | Address | &:r1726_8 | -| ir.cpp:1726:9:1726:9 | Load | m1725_6 | -| ir.cpp:1726:9:1726:9 | Unary | r1726_7 | -| ir.cpp:1726:9:1726:15 | ChiPartial | partial:m1726_9 | -| ir.cpp:1726:9:1726:15 | ChiTotal | total:m1725_8 | -| ir.cpp:1726:13:1726:13 | Address | &:r1726_1 | -| ir.cpp:1726:13:1726:13 | Load | m1725_10 | -| ir.cpp:1726:13:1726:13 | Unary | r1726_2 | -| ir.cpp:1726:13:1726:13 | Unary | r1726_3 | -| ir.cpp:1726:15:1726:15 | Address | &:r1726_4 | -| ir.cpp:1726:15:1726:15 | Load | ~m1725_12 | -| ir.cpp:1726:15:1726:15 | StoreValue | r1726_5 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_5 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_5 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_7 | -| ir.cpp:1733:5:1733:39 | Address | &:r1733_7 | -| ir.cpp:1733:5:1733:39 | ChiPartial | partial:m1733_3 | -| ir.cpp:1733:5:1733:39 | ChiTotal | total:m1733_2 | -| ir.cpp:1733:5:1733:39 | Load | m1733_6 | -| ir.cpp:1733:5:1733:39 | SideEffect | m1733_3 | -| ir.cpp:1733:5:1733:39 | SideEffect | m1733_8 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_5 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_5 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_7 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_7 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_9 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_11 | -| ir.cpp:1736:7:1736:7 | Address | &:r1736_15 | -| ir.cpp:1736:7:1736:7 | Arg(0) | 0:r1736_15 | -| ir.cpp:1736:7:1736:7 | Arg(this) | this:r1736_9 | -| ir.cpp:1736:7:1736:7 | CallTarget | func:r1736_10 | -| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_3 | -| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_17 | -| ir.cpp:1736:7:1736:7 | ChiPartial | partial:m1736_20 | -| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_2 | -| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_4 | -| ir.cpp:1736:7:1736:7 | ChiTotal | total:m1736_8 | -| ir.cpp:1736:7:1736:7 | Load | m0_2 | -| ir.cpp:1736:7:1736:7 | Load | m1736_6 | -| ir.cpp:1736:7:1736:7 | SideEffect | m1736_21 | -| ir.cpp:1736:7:1736:7 | SideEffect | ~m0_4 | -| ir.cpp:1736:7:1736:7 | SideEffect | ~m1736_4 | -| ir.cpp:1736:7:1736:7 | SideEffect | ~m1736_18 | -| ir.cpp:1736:7:1736:7 | Unary | m1736_6 | -| ir.cpp:1736:7:1736:7 | Unary | r1736_12 | -| ir.cpp:1736:7:1736:7 | Unary | r1736_13 | -| ir.cpp:1736:7:1736:7 | Unary | r1736_14 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_5 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_5 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_7 | -| ir.cpp:1740:5:1740:38 | Address | &:r1740_7 | -| ir.cpp:1740:5:1740:38 | ChiPartial | partial:m1740_3 | -| ir.cpp:1740:5:1740:38 | ChiTotal | total:m1740_2 | -| ir.cpp:1740:5:1740:38 | Load | m1740_6 | -| ir.cpp:1740:5:1740:38 | SideEffect | m1740_22 | -| ir.cpp:1740:5:1740:38 | SideEffect | ~m1740_20 | -| ir.cpp:1740:5:1740:38 | Unary | m1740_6 | -| ir.cpp:1740:5:1740:38 | Unary | m1740_6 | -| ir.cpp:1740:42:1740:42 | Address | &:r1740_9 | -| ir.cpp:1740:42:1740:42 | Address | &:r1740_16 | -| ir.cpp:1740:42:1740:42 | Arg(this) | this:r1740_9 | -| ir.cpp:1740:42:1740:42 | Arg(this) | this:r1740_16 | -| ir.cpp:1740:42:1740:42 | CallTarget | func:r1740_10 | -| ir.cpp:1740:42:1740:42 | CallTarget | func:r1740_17 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_12 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_14 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_19 | -| ir.cpp:1740:42:1740:42 | ChiPartial | partial:m1740_21 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_4 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_8 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_13 | -| ir.cpp:1740:42:1740:42 | ChiTotal | total:m1740_15 | -| ir.cpp:1740:42:1740:42 | SideEffect | ~m1740_4 | -| ir.cpp:1740:42:1740:42 | SideEffect | ~m1740_13 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_5 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_5 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_7 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_7 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_9 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_11 | -| ir.cpp:1743:7:1743:7 | Address | &:r1743_15 | -| ir.cpp:1743:7:1743:7 | Arg(0) | 0:r1743_15 | -| ir.cpp:1743:7:1743:7 | Arg(this) | this:r1743_9 | -| ir.cpp:1743:7:1743:7 | CallTarget | func:r1743_10 | -| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_3 | -| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_17 | -| ir.cpp:1743:7:1743:7 | ChiPartial | partial:m1743_20 | -| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_2 | -| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_4 | -| ir.cpp:1743:7:1743:7 | ChiTotal | total:m1743_18 | -| ir.cpp:1743:7:1743:7 | Load | m0_2 | -| ir.cpp:1743:7:1743:7 | Load | m1743_6 | -| ir.cpp:1743:7:1743:7 | SideEffect | m1743_8 | -| ir.cpp:1743:7:1743:7 | SideEffect | ~m0_4 | -| ir.cpp:1743:7:1743:7 | SideEffect | ~m1743_4 | -| ir.cpp:1743:7:1743:7 | SideEffect | ~m1743_21 | -| ir.cpp:1743:7:1743:7 | Unary | m1743_6 | -| ir.cpp:1743:7:1743:7 | Unary | r1743_12 | -| ir.cpp:1743:7:1743:7 | Unary | r1743_13 | -| ir.cpp:1743:7:1743:7 | Unary | r1743_14 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_5 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_5 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_7 | -| ir.cpp:1747:5:1747:35 | Address | &:r1747_7 | -| ir.cpp:1747:5:1747:35 | ChiPartial | partial:m1747_3 | -| ir.cpp:1747:5:1747:35 | ChiTotal | total:m1747_2 | -| ir.cpp:1747:5:1747:35 | Load | m1747_6 | -| ir.cpp:1747:5:1747:35 | SideEffect | m1747_8 | -| ir.cpp:1747:5:1747:35 | SideEffect | ~m1747_22 | -| ir.cpp:1747:5:1747:35 | Unary | m1747_6 | -| ir.cpp:1747:5:1747:35 | Unary | m1747_6 | -| ir.cpp:1747:39:1747:39 | Address | &:r1747_9 | -| ir.cpp:1747:39:1747:39 | Address | &:r1747_16 | -| ir.cpp:1747:39:1747:39 | Arg(this) | this:r1747_9 | -| ir.cpp:1747:39:1747:39 | Arg(this) | this:r1747_16 | -| ir.cpp:1747:39:1747:39 | CallTarget | func:r1747_10 | -| ir.cpp:1747:39:1747:39 | CallTarget | func:r1747_17 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_12 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_14 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_19 | -| ir.cpp:1747:39:1747:39 | ChiPartial | partial:m1747_21 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_4 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_13 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_15 | -| ir.cpp:1747:39:1747:39 | ChiTotal | total:m1747_20 | -| ir.cpp:1747:39:1747:39 | SideEffect | ~m1747_4 | -| ir.cpp:1747:39:1747:39 | SideEffect | ~m1747_15 | -| ir.cpp:1750:5:1750:34 | Address | &:r1750_5 | -| ir.cpp:1750:5:1750:34 | ChiPartial | partial:m1750_3 | -| ir.cpp:1750:5:1750:34 | ChiTotal | total:m1750_2 | -| ir.cpp:1750:5:1750:34 | Load | m1755_2 | -| ir.cpp:1750:5:1750:34 | SideEffect | ~m1754_10 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_1 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_1 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_3 | -| ir.cpp:1751:51:1751:51 | Address | &:r1751_3 | -| ir.cpp:1751:51:1751:51 | Load | m1751_2 | -| ir.cpp:1751:51:1751:51 | SideEffect | m1751_4 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_1 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_1 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_3 | -| ir.cpp:1752:48:1752:48 | Address | &:r1752_3 | -| ir.cpp:1752:48:1752:48 | Load | m1752_2 | -| ir.cpp:1752:48:1752:48 | SideEffect | m1752_4 | -| ir.cpp:1753:40:1753:41 | Address | &:r1753_1 | -| ir.cpp:1753:40:1753:41 | Address | &:r1753_1 | -| ir.cpp:1753:40:1753:41 | Arg(this) | this:r1753_1 | -| ir.cpp:1753:44:1753:45 | CallTarget | func:r1753_3 | -| ir.cpp:1753:44:1753:45 | ChiPartial | partial:m1753_9 | -| ir.cpp:1753:44:1753:45 | ChiPartial | partial:m1753_12 | -| ir.cpp:1753:44:1753:45 | ChiTotal | total:m1750_4 | -| ir.cpp:1753:44:1753:45 | ChiTotal | total:m1753_2 | -| ir.cpp:1753:44:1753:45 | SideEffect | ~m1750_4 | -| ir.cpp:1753:45:1753:45 | Address | &:r1753_4 | -| ir.cpp:1753:45:1753:45 | Address | &:r1753_7 | -| ir.cpp:1753:45:1753:45 | Arg(0) | 0:r1753_7 | -| ir.cpp:1753:45:1753:45 | Load | m1751_2 | -| ir.cpp:1753:45:1753:45 | SideEffect | ~m1751_4 | -| ir.cpp:1753:45:1753:45 | Unary | r1753_5 | -| ir.cpp:1753:45:1753:45 | Unary | r1753_6 | -| ir.cpp:1754:37:1754:38 | Address | &:r1754_1 | -| ir.cpp:1754:37:1754:38 | Address | &:r1754_1 | -| ir.cpp:1754:37:1754:38 | Arg(this) | this:r1754_1 | -| ir.cpp:1754:41:1754:42 | CallTarget | func:r1754_3 | -| ir.cpp:1754:41:1754:42 | ChiPartial | partial:m1754_9 | -| ir.cpp:1754:41:1754:42 | ChiPartial | partial:m1754_12 | -| ir.cpp:1754:41:1754:42 | ChiTotal | total:m1753_10 | -| ir.cpp:1754:41:1754:42 | ChiTotal | total:m1754_2 | -| ir.cpp:1754:41:1754:42 | SideEffect | ~m1753_10 | -| ir.cpp:1754:42:1754:42 | Address | &:r1754_4 | -| ir.cpp:1754:42:1754:42 | Address | &:r1754_7 | -| ir.cpp:1754:42:1754:42 | Arg(0) | 0:r1754_7 | -| ir.cpp:1754:42:1754:42 | Load | m1752_2 | -| ir.cpp:1754:42:1754:42 | SideEffect | ~m1752_4 | -| ir.cpp:1754:42:1754:42 | Unary | r1754_5 | -| ir.cpp:1754:42:1754:42 | Unary | r1754_6 | -| ir.cpp:1755:1:1755:1 | Address | &:r1755_1 | -| ir.cpp:1757:6:1757:22 | ChiPartial | partial:m1757_3 | -| ir.cpp:1757:6:1757:22 | ChiTotal | total:m1757_2 | -| ir.cpp:1757:6:1757:22 | SideEffect | m1757_3 | -| ir.cpp:1757:28:1757:28 | Address | &:r1757_5 | -| ir.cpp:1758:13:1758:13 | Address | &:r1758_1 | -| ir.cpp:1758:17:1758:17 | Address | &:r1758_2 | -| ir.cpp:1758:17:1758:17 | Load | m1757_6 | -| ir.cpp:1758:17:1758:17 | StoreValue | r1758_3 | -| ir.cpp:1758:20:1758:20 | Address | &:r1758_5 | -| ir.cpp:1758:20:1758:20 | Left | r1758_6 | -| ir.cpp:1758:20:1758:20 | Load | m1757_6 | -| ir.cpp:1758:20:1758:24 | Condition | r1758_10 | -| ir.cpp:1758:20:1758:24 | Left | r1758_8 | -| ir.cpp:1758:20:1758:24 | Right | r1758_9 | -| ir.cpp:1758:24:1758:24 | Right | r1758_7 | -| ir.cpp:1759:9:1759:9 | Address | &:r1759_6 | -| ir.cpp:1759:13:1759:13 | Address | &:r1759_1 | -| ir.cpp:1759:13:1759:13 | Left | r1759_2 | -| ir.cpp:1759:13:1759:13 | Load | m1757_6 | -| ir.cpp:1759:13:1759:17 | StoreValue | r1759_5 | -| ir.cpp:1759:17:1759:17 | Address | &:r1759_3 | -| ir.cpp:1759:17:1759:17 | Load | m1758_4 | -| ir.cpp:1759:17:1759:17 | Right | r1759_4 | -| ir.cpp:1762:9:1762:9 | Address | &:r1762_2 | -| ir.cpp:1762:9:1762:9 | Phi | from 0:m1757_6 | -| ir.cpp:1762:9:1762:9 | Phi | from 1:m1759_7 | -| ir.cpp:1763:9:1763:9 | Address | &:r1763_3 | -| ir.cpp:1763:13:1763:13 | Address | &:r1763_1 | -| ir.cpp:1763:13:1763:13 | Load | m1762_1 | -| ir.cpp:1763:13:1763:13 | StoreValue | r1763_2 | -| ir.cpp:1763:16:1763:16 | Address | &:r1763_5 | -| ir.cpp:1763:16:1763:16 | Left | r1763_6 | -| ir.cpp:1763:16:1763:16 | Load | m1762_1 | -| ir.cpp:1763:16:1763:20 | Condition | r1763_10 | -| ir.cpp:1763:16:1763:20 | Left | r1763_8 | -| ir.cpp:1763:16:1763:20 | Right | r1763_9 | -| ir.cpp:1763:20:1763:20 | Right | r1763_7 | -| ir.cpp:1764:9:1764:9 | Address | &:r1764_6 | -| ir.cpp:1764:13:1764:13 | Address | &:r1764_1 | -| ir.cpp:1764:13:1764:13 | Left | r1764_2 | -| ir.cpp:1764:13:1764:13 | Load | m1762_1 | -| ir.cpp:1764:13:1764:17 | StoreValue | r1764_5 | -| ir.cpp:1764:17:1764:17 | Address | &:r1764_3 | -| ir.cpp:1764:17:1764:17 | Load | m1763_4 | -| ir.cpp:1764:17:1764:17 | Right | r1764_4 | -| ir.cpp:1767:9:1767:9 | Address | &:r1767_4 | -| ir.cpp:1767:13:1767:13 | Address | &:r1767_2 | -| ir.cpp:1767:13:1767:13 | Load | m1767_1 | -| ir.cpp:1767:13:1767:13 | Phi | from 2:m1762_1 | -| ir.cpp:1767:13:1767:13 | Phi | from 3:m1764_7 | -| ir.cpp:1767:13:1767:13 | StoreValue | r1767_3 | -| ir.cpp:1767:14:1767:25 | Address | &:r1767_6 | -| ir.cpp:1767:14:1767:25 | Condition | r1767_14 | -| ir.cpp:1767:20:1767:21 | Address | &:r1767_10 | -| ir.cpp:1767:20:1767:21 | Left | r1767_11 | -| ir.cpp:1767:20:1767:21 | Load | m1767_9 | -| ir.cpp:1767:20:1767:21 | Right | r1767_12 | -| ir.cpp:1767:20:1767:21 | Unary | r1767_13 | -| ir.cpp:1767:25:1767:25 | Address | &:r1767_7 | -| ir.cpp:1767:25:1767:25 | Load | m1767_5 | -| ir.cpp:1767:25:1767:25 | StoreValue | r1767_8 | -| ir.cpp:1768:9:1768:9 | Address | &:r1768_6 | -| ir.cpp:1768:13:1768:13 | Address | &:r1768_1 | -| ir.cpp:1768:13:1768:13 | Left | r1768_2 | -| ir.cpp:1768:13:1768:13 | Load | m1767_1 | -| ir.cpp:1768:13:1768:17 | StoreValue | r1768_5 | -| ir.cpp:1768:17:1768:17 | Address | &:r1768_3 | -| ir.cpp:1768:17:1768:17 | Load | m1767_5 | -| ir.cpp:1768:17:1768:17 | Right | r1768_4 | -| ir.cpp:1771:9:1771:29 | Address | &:r1771_6 | -| ir.cpp:1771:9:1771:29 | Condition | r1771_14 | -| ir.cpp:1771:13:1771:13 | Address | &:r1771_2 | -| ir.cpp:1771:13:1771:13 | Phi | from 4:m1767_1 | -| ir.cpp:1771:13:1771:13 | Phi | from 5:m1768_7 | -| ir.cpp:1771:17:1771:17 | Address | &:r1771_3 | -| ir.cpp:1771:17:1771:17 | Load | m1771_1 | -| ir.cpp:1771:17:1771:17 | StoreValue | r1771_4 | -| ir.cpp:1771:24:1771:25 | Address | &:r1771_10 | -| ir.cpp:1771:24:1771:25 | Left | r1771_11 | -| ir.cpp:1771:24:1771:25 | Load | m1771_9 | -| ir.cpp:1771:24:1771:25 | Right | r1771_12 | -| ir.cpp:1771:24:1771:25 | Unary | r1771_13 | -| ir.cpp:1771:29:1771:29 | Address | &:r1771_7 | -| ir.cpp:1771:29:1771:29 | Load | m1771_5 | -| ir.cpp:1771:29:1771:29 | StoreValue | r1771_8 | -| ir.cpp:1772:9:1772:9 | Address | &:r1772_6 | -| ir.cpp:1772:13:1772:13 | Address | &:r1772_1 | -| ir.cpp:1772:13:1772:13 | Left | r1772_2 | -| ir.cpp:1772:13:1772:13 | Load | m1771_1 | -| ir.cpp:1772:13:1772:17 | StoreValue | r1772_5 | -| ir.cpp:1772:17:1772:17 | Address | &:r1772_3 | -| ir.cpp:1772:17:1772:17 | Load | m1771_5 | -| ir.cpp:1772:17:1772:17 | Right | r1772_4 | -| ir.cpp:1775:9:1775:9 | Address | &:r1775_2 | -| ir.cpp:1775:9:1775:9 | Phi | from 6:m1771_1 | -| ir.cpp:1775:9:1775:9 | Phi | from 7:m1772_7 | -| ir.cpp:1775:13:1775:13 | Address | &:r1775_3 | -| ir.cpp:1775:13:1775:13 | Load | m1775_1 | -| ir.cpp:1775:13:1775:13 | StoreValue | r1775_4 | -| ir.cpp:1776:9:1776:9 | Address | &:r1776_1 | -| ir.cpp:1776:9:1776:9 | Condition | r1776_4 | -| ir.cpp:1776:9:1776:9 | Left | r1776_2 | -| ir.cpp:1776:9:1776:9 | Load | m1775_5 | -| ir.cpp:1776:9:1776:9 | Right | r1776_3 | -| ir.cpp:1777:9:1777:9 | Address | &:r1777_6 | -| ir.cpp:1777:13:1777:13 | Address | &:r1777_1 | -| ir.cpp:1777:13:1777:13 | Left | r1777_2 | -| ir.cpp:1777:13:1777:13 | Load | m1775_1 | -| ir.cpp:1777:13:1777:17 | StoreValue | r1777_5 | -| ir.cpp:1777:17:1777:17 | Address | &:r1777_3 | -| ir.cpp:1777:17:1777:17 | Load | m1775_5 | -| ir.cpp:1777:17:1777:17 | Right | r1777_4 | -| ir.cpp:1780:9:1780:18 | Address | &:r1780_2 | -| ir.cpp:1780:9:1780:18 | Condition | r1780_10 | -| ir.cpp:1780:9:1780:18 | Phi | from 8:m1775_1 | -| ir.cpp:1780:9:1780:18 | Phi | from 9:m1777_7 | -| ir.cpp:1780:13:1780:14 | Address | &:r1780_6 | -| ir.cpp:1780:13:1780:14 | Left | r1780_7 | -| ir.cpp:1780:13:1780:14 | Load | m1780_5 | -| ir.cpp:1780:13:1780:14 | Right | r1780_8 | -| ir.cpp:1780:13:1780:14 | Unary | r1780_9 | -| ir.cpp:1780:18:1780:18 | Address | &:r1780_3 | -| ir.cpp:1780:18:1780:18 | Load | m1775_5 | -| ir.cpp:1780:18:1780:18 | StoreValue | r1780_4 | -| ir.cpp:1781:9:1781:9 | Address | &:r1781_3 | -| ir.cpp:1781:9:1781:9 | Address | &:r1781_3 | -| ir.cpp:1781:9:1781:9 | Left | r1781_4 | -| ir.cpp:1781:9:1781:9 | Load | m1780_1 | -| ir.cpp:1781:9:1781:15 | StoreValue | r1781_5 | -| ir.cpp:1781:14:1781:15 | Address | &:r1781_1 | -| ir.cpp:1781:14:1781:15 | Load | m1780_5 | -| ir.cpp:1781:14:1781:15 | Right | r1781_2 | -| ir.cpp:1785:6:1785:26 | ChiPartial | partial:m1785_3 | -| ir.cpp:1785:6:1785:26 | ChiTotal | total:m1785_2 | -| ir.cpp:1785:6:1785:26 | SideEffect | m1785_3 | -| ir.cpp:1785:32:1785:32 | Address | &:r1785_5 | -| ir.cpp:1786:17:1786:17 | Address | &:r1786_1 | -| ir.cpp:1786:21:1786:21 | Address | &:r1786_2 | -| ir.cpp:1786:21:1786:21 | Load | m1785_6 | -| ir.cpp:1786:21:1786:21 | StoreValue | r1786_3 | -| ir.cpp:1786:24:1786:24 | Address | &:r1786_5 | -| ir.cpp:1786:24:1786:24 | Left | r1786_6 | -| ir.cpp:1786:24:1786:24 | Load | m1785_6 | -| ir.cpp:1786:24:1786:28 | Condition | r1786_8 | -| ir.cpp:1786:28:1786:28 | Right | r1786_7 | -| ir.cpp:1788:9:1788:9 | Address | &:r1788_6 | -| ir.cpp:1788:13:1788:13 | Address | &:r1788_1 | -| ir.cpp:1788:13:1788:13 | Left | r1788_2 | -| ir.cpp:1788:13:1788:13 | Load | m1785_6 | -| ir.cpp:1788:13:1788:17 | StoreValue | r1788_5 | -| ir.cpp:1788:17:1788:17 | Address | &:r1788_3 | -| ir.cpp:1788:17:1788:17 | Load | m1786_4 | -| ir.cpp:1788:17:1788:17 | Right | r1788_4 | -| ir.cpp:1791:9:1791:9 | Address | &:r1791_1 | -| ir.cpp:1792:13:1792:13 | Address | &:r1792_3 | -| ir.cpp:1792:17:1792:17 | Address | &:r1792_1 | -| ir.cpp:1792:17:1792:17 | Load | m1788_7 | -| ir.cpp:1792:17:1792:17 | StoreValue | r1792_2 | -| ir.cpp:1792:20:1792:20 | Address | &:r1792_5 | -| ir.cpp:1792:20:1792:20 | Left | r1792_6 | -| ir.cpp:1792:20:1792:20 | Load | m1788_7 | -| ir.cpp:1792:20:1792:24 | Condition | r1792_8 | -| ir.cpp:1792:24:1792:24 | Right | r1792_7 | -| ir.cpp:1794:9:1794:9 | Address | &:r1794_6 | -| ir.cpp:1794:13:1794:13 | Address | &:r1794_1 | -| ir.cpp:1794:13:1794:13 | Left | r1794_2 | -| ir.cpp:1794:13:1794:13 | Load | m1788_7 | -| ir.cpp:1794:13:1794:17 | StoreValue | r1794_5 | -| ir.cpp:1794:17:1794:17 | Address | &:r1794_3 | -| ir.cpp:1794:17:1794:17 | Load | m1792_4 | -| ir.cpp:1794:17:1794:17 | Right | r1794_4 | -| ir.cpp:1797:13:1797:13 | Address | &:r1797_3 | -| ir.cpp:1797:17:1797:17 | Address | &:r1797_1 | -| ir.cpp:1797:17:1797:17 | Load | m1794_7 | -| ir.cpp:1797:17:1797:17 | StoreValue | r1797_2 | -| ir.cpp:1797:18:1797:29 | Address | &:r1797_5 | -| ir.cpp:1797:18:1797:29 | Condition | r1797_11 | -| ir.cpp:1797:24:1797:25 | Address | &:r1797_9 | -| ir.cpp:1797:24:1797:25 | Load | m1797_8 | -| ir.cpp:1797:24:1797:25 | Unary | r1797_10 | -| ir.cpp:1797:29:1797:29 | Address | &:r1797_6 | -| ir.cpp:1797:29:1797:29 | Load | m1797_4 | -| ir.cpp:1797:29:1797:29 | StoreValue | r1797_7 | -| ir.cpp:1799:9:1799:9 | Address | &:r1799_6 | -| ir.cpp:1799:13:1799:13 | Address | &:r1799_1 | -| ir.cpp:1799:13:1799:13 | Left | r1799_2 | -| ir.cpp:1799:13:1799:13 | Load | m1794_7 | -| ir.cpp:1799:13:1799:17 | StoreValue | r1799_5 | -| ir.cpp:1799:17:1799:17 | Address | &:r1799_3 | -| ir.cpp:1799:17:1799:17 | Load | m1797_4 | -| ir.cpp:1799:17:1799:17 | Right | r1799_4 | -| ir.cpp:1802:13:1802:33 | Address | &:r1802_5 | -| ir.cpp:1802:13:1802:33 | Condition | r1802_11 | -| ir.cpp:1802:17:1802:17 | Address | &:r1802_1 | -| ir.cpp:1802:21:1802:21 | Address | &:r1802_2 | -| ir.cpp:1802:21:1802:21 | Load | m1799_7 | -| ir.cpp:1802:21:1802:21 | StoreValue | r1802_3 | -| ir.cpp:1802:28:1802:29 | Address | &:r1802_9 | -| ir.cpp:1802:28:1802:29 | Load | m1802_8 | -| ir.cpp:1802:28:1802:29 | Unary | r1802_10 | -| ir.cpp:1802:33:1802:33 | Address | &:r1802_6 | -| ir.cpp:1802:33:1802:33 | Load | m1802_4 | -| ir.cpp:1802:33:1802:33 | StoreValue | r1802_7 | -| ir.cpp:1804:9:1804:9 | Address | &:r1804_6 | -| ir.cpp:1804:13:1804:13 | Address | &:r1804_1 | -| ir.cpp:1804:13:1804:13 | Left | r1804_2 | -| ir.cpp:1804:13:1804:13 | Load | m1799_7 | -| ir.cpp:1804:13:1804:17 | StoreValue | r1804_5 | -| ir.cpp:1804:17:1804:17 | Address | &:r1804_3 | -| ir.cpp:1804:17:1804:17 | Load | m1802_4 | -| ir.cpp:1804:17:1804:17 | Right | r1804_4 | -| ir.cpp:1807:9:1807:9 | Address | &:r1807_1 | -| ir.cpp:1807:13:1807:13 | Address | &:r1807_2 | -| ir.cpp:1807:13:1807:13 | Load | m1804_7 | -| ir.cpp:1807:13:1807:13 | StoreValue | r1807_3 | -| ir.cpp:1808:13:1808:13 | Address | &:r1808_1 | -| ir.cpp:1808:13:1808:13 | Condition | r1808_2 | -| ir.cpp:1808:13:1808:13 | Load | m1807_4 | -| ir.cpp:1810:9:1810:9 | Address | &:r1810_6 | +| ir.cpp:1597:15:1597:15 | Address | &:r1597_1 | +| ir.cpp:1597:19:1597:40 | Address | &:r1597_2 | +| ir.cpp:1597:19:1597:40 | Address | &:r1597_2 | +| ir.cpp:1597:19:1597:40 | Arg(this) | this:r1597_2 | +| ir.cpp:1597:19:1597:40 | ChiPartial | partial:m1597_8 | +| ir.cpp:1597:19:1597:40 | ChiTotal | total:m1596_9 | +| ir.cpp:1597:19:1597:40 | SideEffect | m1596_9 | +| ir.cpp:1597:42:1597:47 | CallTarget | func:r1597_3 | +| ir.cpp:1597:42:1597:47 | ChiPartial | partial:m1597_5 | +| ir.cpp:1597:42:1597:47 | ChiTotal | total:m1596_6 | +| ir.cpp:1597:42:1597:47 | SideEffect | ~m1596_6 | +| ir.cpp:1597:42:1597:47 | Unary | r1597_4 | +| ir.cpp:1597:48:1597:50 | StoreValue | r1597_11 | +| ir.cpp:1597:48:1597:50 | Unary | r1597_10 | +| ir.cpp:1598:15:1598:15 | Address | &:r1598_1 | +| ir.cpp:1598:19:1598:40 | Address | &:r1598_2 | +| ir.cpp:1598:19:1598:40 | Address | &:r1598_2 | +| ir.cpp:1598:19:1598:40 | Arg(this) | this:r1598_2 | +| ir.cpp:1598:19:1598:40 | ChiPartial | partial:m1598_8 | +| ir.cpp:1598:19:1598:40 | ChiTotal | total:m1597_9 | +| ir.cpp:1598:19:1598:40 | SideEffect | m1597_9 | +| ir.cpp:1598:42:1598:47 | CallTarget | func:r1598_3 | +| ir.cpp:1598:42:1598:47 | ChiPartial | partial:m1598_5 | +| ir.cpp:1598:42:1598:47 | ChiTotal | total:m1597_6 | +| ir.cpp:1598:42:1598:47 | SideEffect | ~m1597_6 | +| ir.cpp:1598:42:1598:47 | Unary | r1598_4 | +| ir.cpp:1598:48:1598:50 | StoreValue | r1598_11 | +| ir.cpp:1598:48:1598:50 | Unary | r1598_10 | +| ir.cpp:1599:9:1599:9 | Address | &:r1599_2 | +| ir.cpp:1599:9:1599:9 | Address | &:r1599_4 | +| ir.cpp:1599:9:1599:9 | Load | m1597_12 | +| ir.cpp:1599:9:1599:9 | Unary | r1599_3 | +| ir.cpp:1599:9:1599:15 | ChiPartial | partial:m1599_5 | +| ir.cpp:1599:9:1599:15 | ChiTotal | total:m1598_9 | +| ir.cpp:1599:13:1599:15 | StoreValue | r1599_1 | +| ir.cpp:1600:17:1600:18 | Address | &:r1600_1 | +| ir.cpp:1600:22:1600:22 | Address | &:r1600_2 | +| ir.cpp:1600:22:1600:22 | Load | m1597_12 | +| ir.cpp:1600:22:1600:22 | StoreValue | r1600_5 | +| ir.cpp:1600:22:1600:22 | Unary | r1600_3 | +| ir.cpp:1600:22:1600:22 | Unary | r1600_4 | +| ir.cpp:1601:13:1601:13 | Address | &:r1601_1 | +| ir.cpp:1601:17:1601:17 | Address | &:r1601_2 | +| ir.cpp:1601:17:1601:17 | Address | &:r1601_3 | +| ir.cpp:1601:17:1601:17 | Load | m1596_12 | +| ir.cpp:1601:17:1601:17 | Load | ~m1598_9 | +| ir.cpp:1601:17:1601:17 | StoreValue | r1601_4 | +| ir.cpp:1602:9:1602:9 | Address | &:r1602_2 | +| ir.cpp:1602:9:1602:9 | Address | &:r1602_4 | +| ir.cpp:1602:9:1602:9 | Load | m1598_12 | +| ir.cpp:1602:9:1602:9 | Unary | r1602_3 | +| ir.cpp:1602:9:1602:13 | ChiPartial | partial:m1602_5 | +| ir.cpp:1602:9:1602:13 | ChiTotal | total:m1598_6 | +| ir.cpp:1602:13:1602:13 | StoreValue | r1602_1 | +| ir.cpp:1603:14:1603:15 | Address | &:r1603_1 | +| ir.cpp:1603:19:1603:19 | Address | &:r1603_2 | +| ir.cpp:1603:19:1603:19 | Load | m1598_12 | +| ir.cpp:1603:19:1603:19 | StoreValue | r1603_5 | +| ir.cpp:1603:19:1603:19 | Unary | r1603_3 | +| ir.cpp:1603:19:1603:19 | Unary | r1603_4 | +| ir.cpp:1604:13:1604:13 | Address | &:r1604_1 | +| ir.cpp:1604:17:1604:17 | Address | &:r1604_2 | +| ir.cpp:1604:17:1604:17 | Address | &:r1604_3 | +| ir.cpp:1604:17:1604:17 | Load | m1598_12 | +| ir.cpp:1604:17:1604:17 | Load | ~m1602_6 | +| ir.cpp:1604:17:1604:17 | StoreValue | r1604_4 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_5 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_5 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_7 | +| ir.cpp:1608:8:1608:8 | Address | &:r1608_7 | +| ir.cpp:1608:8:1608:8 | ChiPartial | partial:m1608_3 | +| ir.cpp:1608:8:1608:8 | ChiTotal | total:m1608_2 | +| ir.cpp:1608:8:1608:8 | Load | m1608_6 | +| ir.cpp:1608:8:1608:8 | SideEffect | m1608_3 | +| ir.cpp:1608:8:1608:8 | SideEffect | m1608_8 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_5 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_5 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_7 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_7 | +| ir.cpp:1635:61:1635:98 | Address | &:r1635_10 | +| ir.cpp:1635:61:1635:98 | ChiPartial | partial:m1635_3 | +| ir.cpp:1635:61:1635:98 | ChiTotal | total:m1635_2 | +| ir.cpp:1635:61:1635:98 | Load | m1635_6 | +| ir.cpp:1635:61:1635:98 | Load | m1636_6 | +| ir.cpp:1635:61:1635:98 | SideEffect | m1635_3 | +| ir.cpp:1635:61:1635:98 | SideEffect | m1635_8 | +| ir.cpp:1636:5:1636:13 | Address | &:r1636_1 | +| ir.cpp:1636:12:1636:12 | Address | &:r1636_2 | +| ir.cpp:1636:12:1636:12 | Address | &:r1636_4 | +| ir.cpp:1636:12:1636:12 | Load | m1635_6 | +| ir.cpp:1636:12:1636:12 | Load | ~m1635_8 | +| ir.cpp:1636:12:1636:12 | StoreValue | r1636_5 | +| ir.cpp:1636:12:1636:12 | Unary | r1636_3 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_5 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_5 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_7 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_7 | +| ir.cpp:1639:61:1639:98 | Address | &:r1639_10 | +| ir.cpp:1639:61:1639:98 | ChiPartial | partial:m1639_3 | +| ir.cpp:1639:61:1639:98 | ChiTotal | total:m1639_2 | +| ir.cpp:1639:61:1639:98 | Load | m1639_6 | +| ir.cpp:1639:61:1639:98 | Load | m1640_8 | +| ir.cpp:1639:61:1639:98 | SideEffect | m1639_3 | +| ir.cpp:1639:61:1639:98 | SideEffect | m1639_8 | +| ir.cpp:1640:5:1640:13 | Address | &:r1640_1 | +| ir.cpp:1640:12:1640:12 | Address | &:r1640_2 | +| ir.cpp:1640:12:1640:12 | Address | &:r1640_4 | +| ir.cpp:1640:12:1640:12 | Load | m1639_6 | +| ir.cpp:1640:12:1640:12 | Load | ~m1639_8 | +| ir.cpp:1640:12:1640:12 | StoreValue | r1640_7 | +| ir.cpp:1640:12:1640:12 | Unary | r1640_3 | +| ir.cpp:1640:12:1640:12 | Unary | r1640_5 | +| ir.cpp:1640:12:1640:12 | Unary | r1640_6 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_5 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_5 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_7 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_7 | +| ir.cpp:1643:61:1643:98 | Address | &:r1643_10 | +| ir.cpp:1643:61:1643:98 | ChiPartial | partial:m1643_3 | +| ir.cpp:1643:61:1643:98 | ChiTotal | total:m1643_2 | +| ir.cpp:1643:61:1643:98 | Load | m1643_6 | +| ir.cpp:1643:61:1643:98 | Load | m1644_6 | +| ir.cpp:1643:61:1643:98 | SideEffect | m1643_3 | +| ir.cpp:1643:61:1643:98 | SideEffect | m1643_8 | +| ir.cpp:1644:5:1644:13 | Address | &:r1644_1 | +| ir.cpp:1644:12:1644:12 | Address | &:r1644_2 | +| ir.cpp:1644:12:1644:12 | StoreValue | r1644_3 | +| ir.cpp:1644:12:1644:12 | StoreValue | r1644_5 | +| ir.cpp:1644:12:1644:12 | Unary | r1644_2 | +| ir.cpp:1647:6:1647:40 | ChiPartial | partial:m1647_3 | +| ir.cpp:1647:6:1647:40 | ChiTotal | total:m1647_2 | +| ir.cpp:1647:6:1647:40 | SideEffect | ~m1668_6 | +| ir.cpp:1648:36:1648:36 | Address | &:r1648_1 | +| ir.cpp:1648:36:1648:36 | Address | &:r1648_1 | +| ir.cpp:1648:36:1648:36 | Arg(this) | this:r1648_1 | +| ir.cpp:1648:36:1648:36 | CallTarget | func:r1648_3 | +| ir.cpp:1648:36:1648:36 | ChiPartial | partial:m1648_5 | +| ir.cpp:1648:36:1648:36 | ChiPartial | partial:m1648_7 | +| ir.cpp:1648:36:1648:36 | ChiTotal | total:m1647_4 | +| ir.cpp:1648:36:1648:36 | ChiTotal | total:m1648_2 | +| ir.cpp:1648:36:1648:36 | SideEffect | ~m1647_4 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_1 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_7 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_21 | +| ir.cpp:1651:16:1651:16 | Address | &:r1651_35 | +| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_10 | +| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_24 | +| ir.cpp:1651:16:1651:16 | CallTarget | func:r1651_38 | +| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_12 | +| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_26 | +| ir.cpp:1651:16:1651:16 | ChiPartial | partial:m1651_40 | +| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1648_6 | +| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1651_13 | +| ir.cpp:1651:16:1651:16 | ChiTotal | total:m1651_27 | +| ir.cpp:1651:16:1651:16 | Load | m1651_4 | +| ir.cpp:1651:16:1651:16 | Load | m1651_4 | +| ir.cpp:1651:16:1651:16 | Load | m1651_4 | +| ir.cpp:1651:16:1651:16 | SideEffect | ~m1648_6 | +| ir.cpp:1651:16:1651:16 | SideEffect | ~m1651_13 | +| ir.cpp:1651:16:1651:16 | SideEffect | ~m1651_27 | +| ir.cpp:1651:16:1651:16 | StoreValue | r1651_11 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_8 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_22 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_25 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_36 | +| ir.cpp:1651:16:1651:16 | Unary | r1651_39 | +| ir.cpp:1651:16:1651:30 | Address | &:r1651_6 | +| ir.cpp:1651:16:1651:30 | StoreValue | r1651_18 | +| ir.cpp:1651:16:1651:30 | StoreValue | r1651_32 | +| ir.cpp:1651:16:1651:30 | StoreValue | r1651_46 | +| ir.cpp:1651:16:1651:30 | Unary | r1651_6 | +| ir.cpp:1651:16:1651:30 | Unary | r1651_31 | +| ir.cpp:1651:16:1651:30 | Unary | r1651_45 | +| ir.cpp:1651:17:1651:17 | Address | &:r1651_5 | +| ir.cpp:1651:20:1651:20 | Address | &:r1651_20 | +| ir.cpp:1651:23:1651:23 | Address | &:r1651_34 | +| ir.cpp:1651:29:1651:29 | StoreValue | r1651_3 | +| ir.cpp:1651:29:1651:29 | Unary | r1651_2 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_9 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_9 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_23 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_23 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_37 | +| ir.cpp:1651:30:1651:30 | Address | &:r1651_37 | +| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_9 | +| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_23 | +| ir.cpp:1651:30:1651:30 | Arg(this) | this:r1651_37 | +| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_15 | +| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_29 | +| ir.cpp:1651:30:1651:30 | ChiPartial | partial:m1651_43 | +| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1648_8 | +| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1651_16 | +| ir.cpp:1651:30:1651:30 | ChiTotal | total:m1651_30 | +| ir.cpp:1651:30:1651:30 | SideEffect | m1648_8 | +| ir.cpp:1651:30:1651:30 | SideEffect | m1651_16 | +| ir.cpp:1651:30:1651:30 | SideEffect | m1651_30 | +| ir.cpp:1652:9:1652:9 | Address | &:r1652_2 | +| ir.cpp:1652:9:1652:9 | Address | &:r1652_4 | +| ir.cpp:1652:9:1652:9 | Load | m1651_19 | +| ir.cpp:1652:9:1652:9 | Unary | r1652_3 | +| ir.cpp:1652:13:1652:13 | StoreValue | r1652_1 | +| ir.cpp:1653:14:1653:15 | Address | &:r1653_1 | +| ir.cpp:1653:19:1653:19 | Address | &:r1653_2 | +| ir.cpp:1653:19:1653:19 | Load | m1651_19 | +| ir.cpp:1653:19:1653:19 | StoreValue | r1653_5 | +| ir.cpp:1653:19:1653:19 | Unary | r1653_3 | +| ir.cpp:1653:19:1653:19 | Unary | r1653_4 | +| ir.cpp:1654:13:1654:13 | Address | &:r1654_1 | +| ir.cpp:1654:17:1654:17 | Address | &:r1654_2 | +| ir.cpp:1654:17:1654:17 | Address | &:r1654_3 | +| ir.cpp:1654:17:1654:17 | Load | m1651_19 | +| ir.cpp:1654:17:1654:17 | Load | m1652_5 | +| ir.cpp:1654:17:1654:17 | StoreValue | r1654_4 | +| ir.cpp:1655:9:1655:9 | Address | &:r1655_2 | +| ir.cpp:1655:9:1655:9 | Address | &:r1655_4 | +| ir.cpp:1655:9:1655:9 | Load | m1651_33 | +| ir.cpp:1655:9:1655:9 | Unary | r1655_3 | +| ir.cpp:1655:9:1655:13 | ChiPartial | partial:m1655_5 | +| ir.cpp:1655:9:1655:13 | ChiTotal | total:m1651_41 | +| ir.cpp:1655:13:1655:13 | StoreValue | r1655_1 | +| ir.cpp:1656:14:1656:15 | Address | &:r1656_1 | +| ir.cpp:1656:19:1656:19 | Address | &:r1656_2 | +| ir.cpp:1656:19:1656:19 | Load | m1651_33 | +| ir.cpp:1656:19:1656:19 | StoreValue | r1656_5 | +| ir.cpp:1656:19:1656:19 | Unary | r1656_3 | +| ir.cpp:1656:19:1656:19 | Unary | r1656_4 | +| ir.cpp:1657:13:1657:13 | Address | &:r1657_1 | +| ir.cpp:1657:17:1657:17 | Address | &:r1657_2 | +| ir.cpp:1657:17:1657:17 | Address | &:r1657_3 | +| ir.cpp:1657:17:1657:17 | Load | m1651_33 | +| ir.cpp:1657:17:1657:17 | Load | ~m1655_6 | +| ir.cpp:1657:17:1657:17 | StoreValue | r1657_4 | +| ir.cpp:1661:16:1661:37 | Address | &:r1661_1 | +| ir.cpp:1661:41:1661:41 | StoreValue | r1661_3 | +| ir.cpp:1661:41:1661:41 | Unary | r1661_2 | +| ir.cpp:1662:16:1662:16 | Address | &:r1662_1 | +| ir.cpp:1662:20:1662:41 | Address | &:r1662_3 | +| ir.cpp:1662:20:1662:41 | Address | &:r1662_5 | +| ir.cpp:1662:20:1662:41 | Address | &:r1662_5 | +| ir.cpp:1662:20:1662:41 | Arg(this) | this:r1662_5 | +| ir.cpp:1662:20:1662:41 | ChiPartial | partial:m1662_11 | +| ir.cpp:1662:20:1662:41 | ChiTotal | total:m1651_44 | +| ir.cpp:1662:20:1662:41 | Load | m1661_4 | +| ir.cpp:1662:20:1662:41 | SideEffect | m1651_44 | +| ir.cpp:1662:20:1662:41 | Unary | r1662_4 | +| ir.cpp:1662:20:1662:50 | Address | &:r1662_2 | +| ir.cpp:1662:20:1662:50 | StoreValue | r1662_14 | +| ir.cpp:1662:20:1662:50 | Unary | r1662_2 | +| ir.cpp:1662:43:1662:48 | CallTarget | func:r1662_6 | +| ir.cpp:1662:43:1662:48 | ChiPartial | partial:m1662_8 | +| ir.cpp:1662:43:1662:48 | ChiTotal | total:m1655_6 | +| ir.cpp:1662:43:1662:48 | SideEffect | ~m1655_6 | +| ir.cpp:1662:43:1662:48 | StoreValue | r1662_7 | +| ir.cpp:1663:15:1663:15 | Address | &:r1663_1 | +| ir.cpp:1663:19:1663:40 | Address | &:r1663_2 | +| ir.cpp:1663:19:1663:40 | Address | &:r1663_4 | +| ir.cpp:1663:19:1663:40 | Address | &:r1663_4 | +| ir.cpp:1663:19:1663:40 | Arg(this) | this:r1663_4 | +| ir.cpp:1663:19:1663:40 | ChiPartial | partial:m1663_10 | +| ir.cpp:1663:19:1663:40 | ChiTotal | total:m1662_12 | +| ir.cpp:1663:19:1663:40 | Load | m1661_4 | +| ir.cpp:1663:19:1663:40 | SideEffect | m1662_12 | +| ir.cpp:1663:19:1663:40 | Unary | r1663_3 | +| ir.cpp:1663:42:1663:47 | CallTarget | func:r1663_5 | +| ir.cpp:1663:42:1663:47 | ChiPartial | partial:m1663_7 | +| ir.cpp:1663:42:1663:47 | ChiTotal | total:m1662_9 | +| ir.cpp:1663:42:1663:47 | SideEffect | ~m1662_9 | +| ir.cpp:1663:42:1663:47 | Unary | r1663_6 | +| ir.cpp:1663:48:1663:50 | StoreValue | r1663_13 | +| ir.cpp:1663:48:1663:50 | Unary | r1663_12 | +| ir.cpp:1664:16:1664:17 | Address | &:r1664_1 | +| ir.cpp:1664:21:1664:42 | Address | &:r1664_2 | +| ir.cpp:1664:21:1664:42 | Address | &:r1664_4 | +| ir.cpp:1664:21:1664:42 | Address | &:r1664_4 | +| ir.cpp:1664:21:1664:42 | Arg(this) | this:r1664_4 | +| ir.cpp:1664:21:1664:42 | ChiPartial | partial:m1664_10 | +| ir.cpp:1664:21:1664:42 | ChiTotal | total:m1663_11 | +| ir.cpp:1664:21:1664:42 | Load | m1661_4 | +| ir.cpp:1664:21:1664:42 | SideEffect | m1663_11 | +| ir.cpp:1664:21:1664:42 | Unary | r1664_3 | +| ir.cpp:1664:44:1664:49 | CallTarget | func:r1664_5 | +| ir.cpp:1664:44:1664:49 | ChiPartial | partial:m1664_7 | +| ir.cpp:1664:44:1664:49 | ChiTotal | total:m1663_8 | +| ir.cpp:1664:44:1664:49 | SideEffect | ~m1663_8 | +| ir.cpp:1664:44:1664:49 | Unary | r1664_6 | +| ir.cpp:1664:50:1664:52 | StoreValue | r1664_13 | +| ir.cpp:1664:50:1664:52 | Unary | r1664_12 | +| ir.cpp:1665:9:1665:9 | Address | &:r1665_2 | +| ir.cpp:1665:9:1665:9 | Address | &:r1665_4 | +| ir.cpp:1665:9:1665:9 | Load | m1662_15 | +| ir.cpp:1665:9:1665:9 | Unary | r1665_3 | +| ir.cpp:1665:13:1665:13 | StoreValue | r1665_1 | +| ir.cpp:1666:14:1666:15 | Address | &:r1666_1 | +| ir.cpp:1666:19:1666:19 | Address | &:r1666_2 | +| ir.cpp:1666:19:1666:19 | Load | m1662_15 | +| ir.cpp:1666:19:1666:19 | StoreValue | r1666_5 | +| ir.cpp:1666:19:1666:19 | Unary | r1666_3 | +| ir.cpp:1666:19:1666:19 | Unary | r1666_4 | +| ir.cpp:1667:13:1667:13 | Address | &:r1667_1 | +| ir.cpp:1667:17:1667:17 | Address | &:r1667_2 | +| ir.cpp:1667:17:1667:17 | Address | &:r1667_3 | +| ir.cpp:1667:17:1667:17 | Load | m1662_15 | +| ir.cpp:1667:17:1667:17 | Load | m1665_5 | +| ir.cpp:1667:17:1667:17 | StoreValue | r1667_4 | +| ir.cpp:1668:9:1668:9 | Address | &:r1668_2 | +| ir.cpp:1668:9:1668:9 | Address | &:r1668_4 | +| ir.cpp:1668:9:1668:9 | Load | m1663_14 | +| ir.cpp:1668:9:1668:9 | Unary | r1668_3 | +| ir.cpp:1668:9:1668:13 | ChiPartial | partial:m1668_5 | +| ir.cpp:1668:9:1668:13 | ChiTotal | total:m1664_8 | +| ir.cpp:1668:13:1668:13 | StoreValue | r1668_1 | +| ir.cpp:1669:14:1669:15 | Address | &:r1669_1 | +| ir.cpp:1669:19:1669:19 | Address | &:r1669_2 | +| ir.cpp:1669:19:1669:19 | Load | m1663_14 | +| ir.cpp:1669:19:1669:19 | StoreValue | r1669_5 | +| ir.cpp:1669:19:1669:19 | Unary | r1669_3 | +| ir.cpp:1669:19:1669:19 | Unary | r1669_4 | +| ir.cpp:1670:13:1670:13 | Address | &:r1670_1 | +| ir.cpp:1670:17:1670:17 | Address | &:r1670_2 | +| ir.cpp:1670:17:1670:17 | Address | &:r1670_3 | +| ir.cpp:1670:17:1670:17 | Load | m1663_14 | +| ir.cpp:1670:17:1670:17 | Load | ~m1668_6 | +| ir.cpp:1670:17:1670:17 | StoreValue | r1670_4 | +| ir.cpp:1674:6:1674:42 | ChiPartial | partial:m1674_3 | +| ir.cpp:1674:6:1674:42 | ChiTotal | total:m1674_2 | +| ir.cpp:1674:6:1674:42 | SideEffect | m1674_3 | +| ir.cpp:1675:9:1675:10 | Address | &:r1675_1 | +| ir.cpp:1675:9:1675:10 | Left | r1675_1 | +| ir.cpp:1675:9:1675:10 | Left | r1675_1 | +| ir.cpp:1675:16:1675:22 | Address | &:r1675_4 | +| ir.cpp:1675:16:1675:22 | Address | &:r1675_9 | +| ir.cpp:1675:16:1675:22 | Right | r1675_3 | +| ir.cpp:1675:16:1675:22 | Right | r1675_8 | +| ir.cpp:1675:18:1675:18 | ChiPartial | partial:m1675_6 | +| ir.cpp:1675:18:1675:18 | ChiTotal | total:m1675_2 | +| ir.cpp:1675:18:1675:18 | StoreValue | r1675_5 | +| ir.cpp:1675:21:1675:21 | ChiPartial | partial:m1675_11 | +| ir.cpp:1675:21:1675:21 | ChiTotal | total:m1675_7 | +| ir.cpp:1675:21:1675:21 | StoreValue | r1675_10 | +| ir.cpp:1676:10:1676:10 | Address | &:r1676_1 | +| ir.cpp:1676:11:1676:11 | Address | &:r1676_5 | +| ir.cpp:1676:15:1676:15 | Address | &:r1676_6 | +| ir.cpp:1676:21:1676:22 | Address | &:r1676_2 | +| ir.cpp:1676:21:1676:22 | Load | m1675_12 | +| ir.cpp:1676:21:1676:22 | StoreValue | r1676_3 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_5 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_5 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_7 | +| ir.cpp:1682:5:1682:23 | Address | &:r1682_7 | +| ir.cpp:1682:5:1682:23 | ChiPartial | partial:m1682_3 | +| ir.cpp:1682:5:1682:23 | ChiTotal | total:m1682_2 | +| ir.cpp:1682:5:1682:23 | Load | m1682_6 | +| ir.cpp:1682:5:1682:23 | SideEffect | m1682_3 | +| ir.cpp:1682:5:1682:23 | SideEffect | m1682_8 | +| ir.cpp:1685:6:1685:20 | ChiPartial | partial:m1685_3 | +| ir.cpp:1685:6:1685:20 | ChiTotal | total:m1685_2 | +| ir.cpp:1685:6:1685:20 | SideEffect | ~m1688_6 | +| ir.cpp:1685:26:1685:26 | Address | &:r1685_5 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_7 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_7 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_9 | +| ir.cpp:1685:34:1685:34 | Address | &:r1685_9 | +| ir.cpp:1685:34:1685:34 | Load | m1685_8 | +| ir.cpp:1685:34:1685:34 | SideEffect | m1685_10 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_11 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_11 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_13 | +| ir.cpp:1685:43:1685:43 | Address | &:r1685_13 | +| ir.cpp:1685:43:1685:43 | Load | m1685_12 | +| ir.cpp:1685:43:1685:43 | SideEffect | m1685_14 | +| ir.cpp:1687:17:1687:20 | Address | &:r1687_1 | +| ir.cpp:1687:24:1687:44 | Address | &:r1687_2 | +| ir.cpp:1687:24:1687:44 | Address | &:r1687_2 | +| ir.cpp:1687:24:1687:44 | Arg(this) | this:r1687_2 | +| ir.cpp:1687:24:1687:44 | CallTarget | func:r1687_4 | +| ir.cpp:1687:24:1687:44 | ChiPartial | partial:m1687_6 | +| ir.cpp:1687:24:1687:44 | ChiPartial | partial:m1687_8 | +| ir.cpp:1687:24:1687:44 | ChiTotal | total:m1685_4 | +| ir.cpp:1687:24:1687:44 | ChiTotal | total:m1687_3 | +| ir.cpp:1687:24:1687:44 | SideEffect | ~m1685_4 | +| ir.cpp:1687:24:1687:44 | StoreValue | r1687_11 | +| ir.cpp:1687:24:1687:44 | Unary | r1687_2 | +| ir.cpp:1687:24:1687:44 | Unary | r1687_10 | +| ir.cpp:1688:10:1688:13 | Address | &:r1688_1 | +| ir.cpp:1688:10:1688:13 | Address | &:r1688_1 | +| ir.cpp:1688:10:1688:13 | Arg(this) | this:r1688_1 | +| ir.cpp:1688:16:1688:37 | CallTarget | func:r1688_3 | +| ir.cpp:1688:16:1688:37 | ChiPartial | partial:m1688_5 | +| ir.cpp:1688:16:1688:37 | ChiPartial | partial:m1688_7 | +| ir.cpp:1688:16:1688:37 | ChiTotal | total:m1687_7 | +| ir.cpp:1688:16:1688:37 | ChiTotal | total:m1688_2 | +| ir.cpp:1688:16:1688:37 | SideEffect | ~m1687_7 | +| ir.cpp:1690:10:1690:21 | Address | &:r1690_1 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_2 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_2 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_4 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_5 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_6 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_7 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_8 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_12 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_17 | +| ir.cpp:1690:24:1692:5 | Address | &:r1690_20 | +| ir.cpp:1690:24:1692:5 | ChiPartial | partial:m1690_10 | +| ir.cpp:1690:24:1692:5 | ChiTotal | total:m0_3 | +| ir.cpp:1690:24:1692:5 | Load | m1687_12 | +| ir.cpp:1690:24:1692:5 | Load | m1688_8 | +| ir.cpp:1690:24:1692:5 | Load | m1692_6 | +| ir.cpp:1690:24:1692:5 | StoreValue | r1690_9 | +| ir.cpp:1690:24:1692:5 | StoreValue | r1690_23 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:24:1692:5 | Unary | r1690_2 | +| ir.cpp:1690:38:1690:38 | Address | &:r1690_13 | +| ir.cpp:1690:38:1690:38 | ChiPartial | partial:m1690_15 | +| ir.cpp:1690:38:1690:38 | ChiTotal | total:m1690_11 | +| ir.cpp:1690:38:1690:38 | Load | m1685_6 | +| ir.cpp:1690:38:1690:38 | StoreValue | r1690_14 | +| ir.cpp:1690:41:1690:41 | Address | &:r1690_18 | +| ir.cpp:1690:41:1690:41 | Address | &:r1690_19 | +| ir.cpp:1690:41:1690:41 | Load | m1685_8 | +| ir.cpp:1690:44:1690:44 | Address | &:r1690_21 | +| ir.cpp:1690:44:1690:44 | Address | &:r1690_22 | +| ir.cpp:1690:44:1690:44 | Load | m1685_12 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_5 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_5 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_7 | +| ir.cpp:1690:46:1690:46 | Address | &:r1690_7 | +| ir.cpp:1690:46:1690:46 | ChiPartial | partial:m1690_3 | +| ir.cpp:1690:46:1690:46 | ChiTotal | total:m1690_2 | +| ir.cpp:1690:46:1690:46 | Load | m1690_6 | +| ir.cpp:1690:46:1690:46 | SideEffect | m1690_3 | +| ir.cpp:1690:46:1690:46 | SideEffect | m1690_8 | +| ir.cpp:1691:14:1691:25 | Address | &:r1691_1 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_2 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_2 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_4 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_5 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_7 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_11 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_12 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_14 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_18 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_19 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_21 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_25 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_26 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_28 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_32 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_33 | +| ir.cpp:1691:28:1691:54 | Address | &:r1691_35 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_9 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_16 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_23 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_30 | +| ir.cpp:1691:28:1691:54 | ChiPartial | partial:m1691_37 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_3 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_10 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_17 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_24 | +| ir.cpp:1691:28:1691:54 | ChiTotal | total:m1691_31 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1690_6 | +| ir.cpp:1691:28:1691:54 | Load | m1691_38 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | Load | ~m1690_8 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_8 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_15 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_22 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_29 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_36 | +| ir.cpp:1691:28:1691:54 | StoreValue | r1691_39 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_2 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_6 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_13 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_20 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_27 | +| ir.cpp:1691:28:1691:54 | Unary | r1691_34 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_5 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_5 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_7 | +| ir.cpp:1691:50:1691:50 | Address | &:r1691_7 | +| ir.cpp:1691:50:1691:50 | ChiPartial | partial:m1691_3 | +| ir.cpp:1691:50:1691:50 | ChiTotal | total:m1691_2 | +| ir.cpp:1691:50:1691:50 | Load | m1691_6 | +| ir.cpp:1691:50:1691:50 | SideEffect | m1691_3 | +| ir.cpp:1691:50:1691:50 | SideEffect | m1691_8 | +| ir.cpp:1692:6:1692:6 | ChiPartial | partial:m1692_2 | +| ir.cpp:1692:6:1692:6 | ChiPartial | partial:m1692_5 | +| ir.cpp:1692:6:1692:6 | ChiTotal | total:m1690_16 | +| ir.cpp:1692:6:1692:6 | ChiTotal | total:m1692_3 | +| ir.cpp:1692:6:1692:6 | Load | ~m1685_10 | +| ir.cpp:1692:6:1692:6 | Load | ~m1685_14 | +| ir.cpp:1692:6:1692:6 | StoreValue | r1692_1 | +| ir.cpp:1692:6:1692:6 | StoreValue | r1692_4 | +| ir.cpp:1695:5:1695:21 | Address | &:r1695_5 | +| ir.cpp:1695:5:1695:21 | ChiPartial | partial:m1695_3 | +| ir.cpp:1695:5:1695:21 | ChiTotal | total:m1695_2 | +| ir.cpp:1695:5:1695:21 | Load | m1698_4 | +| ir.cpp:1695:5:1695:21 | SideEffect | m1695_3 | +| ir.cpp:1696:7:1696:7 | Address | &:r1696_1 | +| ir.cpp:1696:10:1696:12 | StoreValue | r1696_2 | +| ir.cpp:1698:3:1698:11 | Address | &:r1698_1 | +| ir.cpp:1698:10:1698:10 | Address | &:r1698_2 | +| ir.cpp:1698:10:1698:10 | Load | m1696_3 | +| ir.cpp:1698:10:1698:10 | StoreValue | r1698_3 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_5 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_5 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_7 | +| ir.cpp:1703:10:1703:10 | Address | &:r1703_7 | +| ir.cpp:1703:10:1703:10 | ChiPartial | partial:m1703_3 | +| ir.cpp:1703:10:1703:10 | ChiTotal | total:m1703_2 | +| ir.cpp:1703:10:1703:10 | Load | m1703_6 | +| ir.cpp:1703:10:1703:10 | SideEffect | m1703_3 | +| ir.cpp:1703:10:1703:10 | SideEffect | m1703_8 | +| ir.cpp:1704:14:1704:22 | Address | &:r1704_1 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_2 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_2 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_4 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_5 | +| ir.cpp:1704:25:1710:9 | Address | &:r1704_6 | +| ir.cpp:1704:25:1710:9 | Load | m1703_6 | +| ir.cpp:1704:25:1710:9 | Load | ~m1703_8 | +| ir.cpp:1704:25:1710:9 | Load | ~m1704_8 | +| ir.cpp:1704:25:1710:9 | StoreValue | r1704_7 | +| ir.cpp:1704:25:1710:9 | StoreValue | r1704_9 | +| ir.cpp:1704:25:1710:9 | Unary | r1704_2 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_5 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_5 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_7 | +| ir.cpp:1704:34:1704:34 | Address | &:r1704_7 | +| ir.cpp:1704:34:1704:34 | ChiPartial | partial:m1704_3 | +| ir.cpp:1704:34:1704:34 | ChiTotal | total:m1704_2 | +| ir.cpp:1704:34:1704:34 | Load | m1704_6 | +| ir.cpp:1704:34:1704:34 | SideEffect | m1704_8 | +| ir.cpp:1704:34:1704:34 | SideEffect | ~m1705_8 | +| ir.cpp:1705:13:1705:13 | Address | &:r1705_1 | +| ir.cpp:1705:13:1705:13 | Address | &:r1705_4 | +| ir.cpp:1705:13:1705:13 | Arg(this) | this:r1705_4 | +| ir.cpp:1705:13:1705:13 | CallTarget | func:r1705_5 | +| ir.cpp:1705:13:1705:13 | ChiPartial | partial:m1705_7 | +| ir.cpp:1705:13:1705:13 | ChiTotal | total:m1704_4 | +| ir.cpp:1705:13:1705:13 | Load | m1704_6 | +| ir.cpp:1705:13:1705:13 | SideEffect | ~m1704_4 | +| ir.cpp:1705:13:1705:13 | SideEffect | ~m1704_8 | +| ir.cpp:1705:13:1705:13 | Unary | r1705_2 | +| ir.cpp:1705:13:1705:13 | Unary | r1705_3 | +| ir.cpp:1707:18:1707:26 | Address | &:r1707_1 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_2 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_2 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_4 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_5 | +| ir.cpp:1707:29:1709:13 | Address | &:r1707_7 | +| ir.cpp:1707:29:1709:13 | Load | m1704_6 | +| ir.cpp:1707:29:1709:13 | Load | ~m1704_8 | +| ir.cpp:1707:29:1709:13 | Load | ~m1707_9 | +| ir.cpp:1707:29:1709:13 | StoreValue | r1707_8 | +| ir.cpp:1707:29:1709:13 | StoreValue | r1707_10 | +| ir.cpp:1707:29:1709:13 | Unary | r1707_2 | +| ir.cpp:1707:29:1709:13 | Unary | r1707_6 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_5 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_5 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_7 | +| ir.cpp:1707:38:1707:38 | Address | &:r1707_7 | +| ir.cpp:1707:38:1707:38 | ChiPartial | partial:m1707_3 | +| ir.cpp:1707:38:1707:38 | ChiTotal | total:m1707_2 | +| ir.cpp:1707:38:1707:38 | Load | m1707_6 | +| ir.cpp:1707:38:1707:38 | SideEffect | m1707_8 | +| ir.cpp:1707:38:1707:38 | SideEffect | ~m1708_8 | +| ir.cpp:1708:17:1708:17 | Address | &:r1708_1 | +| ir.cpp:1708:17:1708:17 | Address | &:r1708_4 | +| ir.cpp:1708:17:1708:17 | Arg(this) | this:r1708_4 | +| ir.cpp:1708:17:1708:17 | CallTarget | func:r1708_5 | +| ir.cpp:1708:17:1708:17 | ChiPartial | partial:m1708_7 | +| ir.cpp:1708:17:1708:17 | ChiTotal | total:m1707_4 | +| ir.cpp:1708:17:1708:17 | Load | m1707_6 | +| ir.cpp:1708:17:1708:17 | SideEffect | ~m1707_4 | +| ir.cpp:1708:17:1708:17 | SideEffect | ~m1707_8 | +| ir.cpp:1708:17:1708:17 | Unary | r1708_2 | +| ir.cpp:1708:17:1708:17 | Unary | r1708_3 | +| ir.cpp:1714:6:1714:21 | ChiPartial | partial:m1714_3 | +| ir.cpp:1714:6:1714:21 | ChiTotal | total:m1714_2 | +| ir.cpp:1714:6:1714:21 | SideEffect | m1714_3 | +| ir.cpp:1714:42:1714:43 | Address | &:r1714_5 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_7 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_7 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_9 | +| ir.cpp:1714:66:1714:67 | Address | &:r1714_9 | +| ir.cpp:1714:66:1714:67 | Load | m1714_8 | +| ir.cpp:1714:66:1714:67 | SideEffect | m1714_10 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_11 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_11 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_13 | +| ir.cpp:1714:91:1714:92 | Address | &:r1714_13 | +| ir.cpp:1714:91:1714:92 | Load | m1714_12 | +| ir.cpp:1714:91:1714:92 | SideEffect | m1714_14 | +| ir.cpp:1715:30:1715:31 | Address | &:r1715_1 | +| ir.cpp:1716:31:1716:32 | Address | &:r1716_1 | +| ir.cpp:1716:36:1716:55 | Address | &:r1716_2 | +| ir.cpp:1716:36:1716:55 | StoreValue | r1716_3 | +| ir.cpp:1716:36:1716:55 | StoreValue | r1716_6 | +| ir.cpp:1716:36:1716:55 | Unary | r1716_2 | +| ir.cpp:1716:36:1716:55 | Unary | r1716_5 | +| ir.cpp:1718:10:1718:17 | Address | &:r1718_1 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_2 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_2 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_4 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_5 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_9 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_10 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_11 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_12 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_13 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_14 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_15 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_16 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_20 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_21 | +| ir.cpp:1718:20:1720:5 | Address | &:r1718_22 | +| ir.cpp:1718:20:1720:5 | ChiPartial | partial:m1718_7 | +| ir.cpp:1718:20:1720:5 | ChiPartial | partial:m1718_18 | +| ir.cpp:1718:20:1720:5 | ChiTotal | total:m0_6 | +| ir.cpp:1718:20:1720:5 | ChiTotal | total:m1718_3 | +| ir.cpp:1718:20:1720:5 | Load | m0_9 | +| ir.cpp:1718:20:1720:5 | Load | m1714_6 | +| ir.cpp:1718:20:1720:5 | Load | m1714_8 | +| ir.cpp:1718:20:1720:5 | Load | m1714_12 | +| ir.cpp:1718:20:1720:5 | Load | m1715_2 | +| ir.cpp:1718:20:1720:5 | Load | m1716_7 | +| ir.cpp:1718:20:1720:5 | StoreValue | r1718_6 | +| ir.cpp:1718:20:1720:5 | StoreValue | r1718_17 | +| ir.cpp:1718:20:1720:5 | StoreValue | r1718_23 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:20:1720:5 | Unary | r1718_2 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_5 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_5 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_7 | +| ir.cpp:1718:42:1718:42 | Address | &:r1718_7 | +| ir.cpp:1718:42:1718:42 | ChiPartial | partial:m1718_3 | +| ir.cpp:1718:42:1718:42 | ChiTotal | total:m1718_2 | +| ir.cpp:1718:42:1718:42 | Load | m1718_6 | +| ir.cpp:1718:42:1718:42 | SideEffect | m1718_3 | +| ir.cpp:1718:42:1718:42 | SideEffect | m1718_8 | +| ir.cpp:1719:14:1719:21 | Address | &:r1719_1 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_2 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_2 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_4 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_5 | +| ir.cpp:1719:24:1719:31 | Address | &:r1719_7 | +| ir.cpp:1719:24:1719:31 | Load | m1718_6 | +| ir.cpp:1719:24:1719:31 | Load | ~m1718_8 | +| ir.cpp:1719:24:1719:31 | Load | ~m1719_9 | +| ir.cpp:1719:24:1719:31 | StoreValue | r1719_8 | +| ir.cpp:1719:24:1719:31 | StoreValue | r1719_10 | +| ir.cpp:1719:24:1719:31 | Unary | r1719_2 | +| ir.cpp:1719:24:1719:31 | Unary | r1719_6 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_5 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_5 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_7 | +| ir.cpp:1719:30:1719:30 | Address | &:r1719_7 | +| ir.cpp:1719:30:1719:30 | ChiPartial | partial:m1719_3 | +| ir.cpp:1719:30:1719:30 | ChiTotal | total:m1719_2 | +| ir.cpp:1719:30:1719:30 | Load | m1719_6 | +| ir.cpp:1719:30:1719:30 | SideEffect | m1719_3 | +| ir.cpp:1719:30:1719:30 | SideEffect | m1719_8 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_5 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_5 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_7 | +| ir.cpp:1726:5:1726:44 | Address | &:r1726_7 | +| ir.cpp:1726:5:1726:44 | ChiPartial | partial:m1726_3 | +| ir.cpp:1726:5:1726:44 | ChiTotal | total:m1726_2 | +| ir.cpp:1726:5:1726:44 | Load | m1726_6 | +| ir.cpp:1726:5:1726:44 | SideEffect | m1726_3 | +| ir.cpp:1726:5:1726:44 | SideEffect | m1726_8 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_5 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_5 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_7 | +| ir.cpp:1727:5:1727:44 | Address | &:r1727_7 | +| ir.cpp:1727:5:1727:44 | ChiPartial | partial:m1727_3 | +| ir.cpp:1727:5:1727:44 | ChiTotal | total:m1727_2 | +| ir.cpp:1727:5:1727:44 | Load | m1727_6 | +| ir.cpp:1727:5:1727:44 | SideEffect | m1727_3 | +| ir.cpp:1727:5:1727:44 | SideEffect | m1728_10 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_9 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_9 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_11 | +| ir.cpp:1727:94:1727:94 | Address | &:r1727_11 | +| ir.cpp:1727:94:1727:94 | Load | m1727_10 | +| ir.cpp:1727:94:1727:94 | SideEffect | m1727_12 | +| ir.cpp:1728:9:1728:9 | Address | &:r1728_6 | +| ir.cpp:1728:9:1728:9 | Address | &:r1728_8 | +| ir.cpp:1728:9:1728:9 | Load | m1727_6 | +| ir.cpp:1728:9:1728:9 | Unary | r1728_7 | +| ir.cpp:1728:9:1728:15 | ChiPartial | partial:m1728_9 | +| ir.cpp:1728:9:1728:15 | ChiTotal | total:m1727_8 | +| ir.cpp:1728:13:1728:13 | Address | &:r1728_1 | +| ir.cpp:1728:13:1728:13 | Load | m1727_10 | +| ir.cpp:1728:13:1728:13 | Unary | r1728_2 | +| ir.cpp:1728:13:1728:13 | Unary | r1728_3 | +| ir.cpp:1728:15:1728:15 | Address | &:r1728_4 | +| ir.cpp:1728:15:1728:15 | Load | ~m1727_12 | +| ir.cpp:1728:15:1728:15 | StoreValue | r1728_5 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_5 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_5 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_7 | +| ir.cpp:1735:5:1735:39 | Address | &:r1735_7 | +| ir.cpp:1735:5:1735:39 | ChiPartial | partial:m1735_3 | +| ir.cpp:1735:5:1735:39 | ChiTotal | total:m1735_2 | +| ir.cpp:1735:5:1735:39 | Load | m1735_6 | +| ir.cpp:1735:5:1735:39 | SideEffect | m1735_3 | +| ir.cpp:1735:5:1735:39 | SideEffect | m1735_8 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_5 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_5 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_7 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_7 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_9 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_11 | +| ir.cpp:1738:7:1738:7 | Address | &:r1738_15 | +| ir.cpp:1738:7:1738:7 | Arg(0) | 0:r1738_15 | +| ir.cpp:1738:7:1738:7 | Arg(this) | this:r1738_9 | +| ir.cpp:1738:7:1738:7 | CallTarget | func:r1738_10 | +| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_3 | +| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_17 | +| ir.cpp:1738:7:1738:7 | ChiPartial | partial:m1738_20 | +| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_2 | +| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_4 | +| ir.cpp:1738:7:1738:7 | ChiTotal | total:m1738_8 | +| ir.cpp:1738:7:1738:7 | Load | m0_2 | +| ir.cpp:1738:7:1738:7 | Load | m1738_6 | +| ir.cpp:1738:7:1738:7 | SideEffect | m1738_21 | +| ir.cpp:1738:7:1738:7 | SideEffect | ~m0_4 | +| ir.cpp:1738:7:1738:7 | SideEffect | ~m1738_4 | +| ir.cpp:1738:7:1738:7 | SideEffect | ~m1738_18 | +| ir.cpp:1738:7:1738:7 | Unary | m1738_6 | +| ir.cpp:1738:7:1738:7 | Unary | r1738_12 | +| ir.cpp:1738:7:1738:7 | Unary | r1738_13 | +| ir.cpp:1738:7:1738:7 | Unary | r1738_14 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_5 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_5 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_7 | +| ir.cpp:1742:5:1742:38 | Address | &:r1742_7 | +| ir.cpp:1742:5:1742:38 | ChiPartial | partial:m1742_3 | +| ir.cpp:1742:5:1742:38 | ChiTotal | total:m1742_2 | +| ir.cpp:1742:5:1742:38 | Load | m1742_6 | +| ir.cpp:1742:5:1742:38 | SideEffect | m1742_22 | +| ir.cpp:1742:5:1742:38 | SideEffect | ~m1742_20 | +| ir.cpp:1742:5:1742:38 | Unary | m1742_6 | +| ir.cpp:1742:5:1742:38 | Unary | m1742_6 | +| ir.cpp:1742:42:1742:42 | Address | &:r1742_9 | +| ir.cpp:1742:42:1742:42 | Address | &:r1742_16 | +| ir.cpp:1742:42:1742:42 | Arg(this) | this:r1742_9 | +| ir.cpp:1742:42:1742:42 | Arg(this) | this:r1742_16 | +| ir.cpp:1742:42:1742:42 | CallTarget | func:r1742_10 | +| ir.cpp:1742:42:1742:42 | CallTarget | func:r1742_17 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_12 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_14 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_19 | +| ir.cpp:1742:42:1742:42 | ChiPartial | partial:m1742_21 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_4 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_8 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_13 | +| ir.cpp:1742:42:1742:42 | ChiTotal | total:m1742_15 | +| ir.cpp:1742:42:1742:42 | SideEffect | ~m1742_4 | +| ir.cpp:1742:42:1742:42 | SideEffect | ~m1742_13 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_5 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_5 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_7 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_7 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_9 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_11 | +| ir.cpp:1745:7:1745:7 | Address | &:r1745_15 | +| ir.cpp:1745:7:1745:7 | Arg(0) | 0:r1745_15 | +| ir.cpp:1745:7:1745:7 | Arg(this) | this:r1745_9 | +| ir.cpp:1745:7:1745:7 | CallTarget | func:r1745_10 | +| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_3 | +| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_17 | +| ir.cpp:1745:7:1745:7 | ChiPartial | partial:m1745_20 | +| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_2 | +| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_4 | +| ir.cpp:1745:7:1745:7 | ChiTotal | total:m1745_18 | +| ir.cpp:1745:7:1745:7 | Load | m0_2 | +| ir.cpp:1745:7:1745:7 | Load | m1745_6 | +| ir.cpp:1745:7:1745:7 | SideEffect | m1745_8 | +| ir.cpp:1745:7:1745:7 | SideEffect | ~m0_4 | +| ir.cpp:1745:7:1745:7 | SideEffect | ~m1745_4 | +| ir.cpp:1745:7:1745:7 | SideEffect | ~m1745_21 | +| ir.cpp:1745:7:1745:7 | Unary | m1745_6 | +| ir.cpp:1745:7:1745:7 | Unary | r1745_12 | +| ir.cpp:1745:7:1745:7 | Unary | r1745_13 | +| ir.cpp:1745:7:1745:7 | Unary | r1745_14 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_5 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_5 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_7 | +| ir.cpp:1749:5:1749:35 | Address | &:r1749_7 | +| ir.cpp:1749:5:1749:35 | ChiPartial | partial:m1749_3 | +| ir.cpp:1749:5:1749:35 | ChiTotal | total:m1749_2 | +| ir.cpp:1749:5:1749:35 | Load | m1749_6 | +| ir.cpp:1749:5:1749:35 | SideEffect | m1749_8 | +| ir.cpp:1749:5:1749:35 | SideEffect | ~m1749_22 | +| ir.cpp:1749:5:1749:35 | Unary | m1749_6 | +| ir.cpp:1749:5:1749:35 | Unary | m1749_6 | +| ir.cpp:1749:39:1749:39 | Address | &:r1749_9 | +| ir.cpp:1749:39:1749:39 | Address | &:r1749_16 | +| ir.cpp:1749:39:1749:39 | Arg(this) | this:r1749_9 | +| ir.cpp:1749:39:1749:39 | Arg(this) | this:r1749_16 | +| ir.cpp:1749:39:1749:39 | CallTarget | func:r1749_10 | +| ir.cpp:1749:39:1749:39 | CallTarget | func:r1749_17 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_12 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_14 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_19 | +| ir.cpp:1749:39:1749:39 | ChiPartial | partial:m1749_21 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_4 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_13 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_15 | +| ir.cpp:1749:39:1749:39 | ChiTotal | total:m1749_20 | +| ir.cpp:1749:39:1749:39 | SideEffect | ~m1749_4 | +| ir.cpp:1749:39:1749:39 | SideEffect | ~m1749_15 | +| ir.cpp:1752:5:1752:34 | Address | &:r1752_5 | +| ir.cpp:1752:5:1752:34 | ChiPartial | partial:m1752_3 | +| ir.cpp:1752:5:1752:34 | ChiTotal | total:m1752_2 | +| ir.cpp:1752:5:1752:34 | Load | m1757_2 | +| ir.cpp:1752:5:1752:34 | SideEffect | ~m1756_10 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_1 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_1 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_3 | +| ir.cpp:1753:51:1753:51 | Address | &:r1753_3 | +| ir.cpp:1753:51:1753:51 | Load | m1753_2 | +| ir.cpp:1753:51:1753:51 | SideEffect | m1753_4 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_1 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_1 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_3 | +| ir.cpp:1754:48:1754:48 | Address | &:r1754_3 | +| ir.cpp:1754:48:1754:48 | Load | m1754_2 | +| ir.cpp:1754:48:1754:48 | SideEffect | m1754_4 | +| ir.cpp:1755:40:1755:41 | Address | &:r1755_1 | +| ir.cpp:1755:40:1755:41 | Address | &:r1755_1 | +| ir.cpp:1755:40:1755:41 | Arg(this) | this:r1755_1 | +| ir.cpp:1755:44:1755:45 | CallTarget | func:r1755_3 | +| ir.cpp:1755:44:1755:45 | ChiPartial | partial:m1755_9 | +| ir.cpp:1755:44:1755:45 | ChiPartial | partial:m1755_12 | +| ir.cpp:1755:44:1755:45 | ChiTotal | total:m1752_4 | +| ir.cpp:1755:44:1755:45 | ChiTotal | total:m1755_2 | +| ir.cpp:1755:44:1755:45 | SideEffect | ~m1752_4 | +| ir.cpp:1755:45:1755:45 | Address | &:r1755_4 | +| ir.cpp:1755:45:1755:45 | Address | &:r1755_7 | +| ir.cpp:1755:45:1755:45 | Arg(0) | 0:r1755_7 | +| ir.cpp:1755:45:1755:45 | Load | m1753_2 | +| ir.cpp:1755:45:1755:45 | SideEffect | ~m1753_4 | +| ir.cpp:1755:45:1755:45 | Unary | r1755_5 | +| ir.cpp:1755:45:1755:45 | Unary | r1755_6 | +| ir.cpp:1756:37:1756:38 | Address | &:r1756_1 | +| ir.cpp:1756:37:1756:38 | Address | &:r1756_1 | +| ir.cpp:1756:37:1756:38 | Arg(this) | this:r1756_1 | +| ir.cpp:1756:41:1756:42 | CallTarget | func:r1756_3 | +| ir.cpp:1756:41:1756:42 | ChiPartial | partial:m1756_9 | +| ir.cpp:1756:41:1756:42 | ChiPartial | partial:m1756_12 | +| ir.cpp:1756:41:1756:42 | ChiTotal | total:m1755_10 | +| ir.cpp:1756:41:1756:42 | ChiTotal | total:m1756_2 | +| ir.cpp:1756:41:1756:42 | SideEffect | ~m1755_10 | +| ir.cpp:1756:42:1756:42 | Address | &:r1756_4 | +| ir.cpp:1756:42:1756:42 | Address | &:r1756_7 | +| ir.cpp:1756:42:1756:42 | Arg(0) | 0:r1756_7 | +| ir.cpp:1756:42:1756:42 | Load | m1754_2 | +| ir.cpp:1756:42:1756:42 | SideEffect | ~m1754_4 | +| ir.cpp:1756:42:1756:42 | Unary | r1756_5 | +| ir.cpp:1756:42:1756:42 | Unary | r1756_6 | +| ir.cpp:1757:1:1757:1 | Address | &:r1757_1 | +| ir.cpp:1759:6:1759:22 | ChiPartial | partial:m1759_3 | +| ir.cpp:1759:6:1759:22 | ChiTotal | total:m1759_2 | +| ir.cpp:1759:6:1759:22 | SideEffect | m1759_3 | +| ir.cpp:1759:28:1759:28 | Address | &:r1759_5 | +| ir.cpp:1760:13:1760:13 | Address | &:r1760_1 | +| ir.cpp:1760:17:1760:17 | Address | &:r1760_2 | +| ir.cpp:1760:17:1760:17 | Load | m1759_6 | +| ir.cpp:1760:17:1760:17 | StoreValue | r1760_3 | +| ir.cpp:1760:20:1760:20 | Address | &:r1760_5 | +| ir.cpp:1760:20:1760:20 | Left | r1760_6 | +| ir.cpp:1760:20:1760:20 | Load | m1759_6 | +| ir.cpp:1760:20:1760:24 | Condition | r1760_10 | +| ir.cpp:1760:20:1760:24 | Left | r1760_8 | +| ir.cpp:1760:20:1760:24 | Right | r1760_9 | +| ir.cpp:1760:24:1760:24 | Right | r1760_7 | +| ir.cpp:1761:9:1761:9 | Address | &:r1761_6 | +| ir.cpp:1761:13:1761:13 | Address | &:r1761_1 | +| ir.cpp:1761:13:1761:13 | Left | r1761_2 | +| ir.cpp:1761:13:1761:13 | Load | m1759_6 | +| ir.cpp:1761:13:1761:17 | StoreValue | r1761_5 | +| ir.cpp:1761:17:1761:17 | Address | &:r1761_3 | +| ir.cpp:1761:17:1761:17 | Load | m1760_4 | +| ir.cpp:1761:17:1761:17 | Right | r1761_4 | +| ir.cpp:1764:9:1764:9 | Address | &:r1764_2 | +| ir.cpp:1764:9:1764:9 | Phi | from 0:m1759_6 | +| ir.cpp:1764:9:1764:9 | Phi | from 1:m1761_7 | +| ir.cpp:1765:9:1765:9 | Address | &:r1765_3 | +| ir.cpp:1765:13:1765:13 | Address | &:r1765_1 | +| ir.cpp:1765:13:1765:13 | Load | m1764_1 | +| ir.cpp:1765:13:1765:13 | StoreValue | r1765_2 | +| ir.cpp:1765:16:1765:16 | Address | &:r1765_5 | +| ir.cpp:1765:16:1765:16 | Left | r1765_6 | +| ir.cpp:1765:16:1765:16 | Load | m1764_1 | +| ir.cpp:1765:16:1765:20 | Condition | r1765_10 | +| ir.cpp:1765:16:1765:20 | Left | r1765_8 | +| ir.cpp:1765:16:1765:20 | Right | r1765_9 | +| ir.cpp:1765:20:1765:20 | Right | r1765_7 | +| ir.cpp:1766:9:1766:9 | Address | &:r1766_6 | +| ir.cpp:1766:13:1766:13 | Address | &:r1766_1 | +| ir.cpp:1766:13:1766:13 | Left | r1766_2 | +| ir.cpp:1766:13:1766:13 | Load | m1764_1 | +| ir.cpp:1766:13:1766:17 | StoreValue | r1766_5 | +| ir.cpp:1766:17:1766:17 | Address | &:r1766_3 | +| ir.cpp:1766:17:1766:17 | Load | m1765_4 | +| ir.cpp:1766:17:1766:17 | Right | r1766_4 | +| ir.cpp:1769:9:1769:9 | Address | &:r1769_4 | +| ir.cpp:1769:13:1769:13 | Address | &:r1769_2 | +| ir.cpp:1769:13:1769:13 | Load | m1769_1 | +| ir.cpp:1769:13:1769:13 | Phi | from 2:m1764_1 | +| ir.cpp:1769:13:1769:13 | Phi | from 3:m1766_7 | +| ir.cpp:1769:13:1769:13 | StoreValue | r1769_3 | +| ir.cpp:1769:14:1769:25 | Address | &:r1769_6 | +| ir.cpp:1769:14:1769:25 | Condition | r1769_14 | +| ir.cpp:1769:20:1769:21 | Address | &:r1769_10 | +| ir.cpp:1769:20:1769:21 | Left | r1769_11 | +| ir.cpp:1769:20:1769:21 | Load | m1769_9 | +| ir.cpp:1769:20:1769:21 | Right | r1769_12 | +| ir.cpp:1769:20:1769:21 | Unary | r1769_13 | +| ir.cpp:1769:25:1769:25 | Address | &:r1769_7 | +| ir.cpp:1769:25:1769:25 | Load | m1769_5 | +| ir.cpp:1769:25:1769:25 | StoreValue | r1769_8 | +| ir.cpp:1770:9:1770:9 | Address | &:r1770_6 | +| ir.cpp:1770:13:1770:13 | Address | &:r1770_1 | +| ir.cpp:1770:13:1770:13 | Left | r1770_2 | +| ir.cpp:1770:13:1770:13 | Load | m1769_1 | +| ir.cpp:1770:13:1770:17 | StoreValue | r1770_5 | +| ir.cpp:1770:17:1770:17 | Address | &:r1770_3 | +| ir.cpp:1770:17:1770:17 | Load | m1769_5 | +| ir.cpp:1770:17:1770:17 | Right | r1770_4 | +| ir.cpp:1773:9:1773:29 | Address | &:r1773_6 | +| ir.cpp:1773:9:1773:29 | Condition | r1773_14 | +| ir.cpp:1773:13:1773:13 | Address | &:r1773_2 | +| ir.cpp:1773:13:1773:13 | Phi | from 4:m1769_1 | +| ir.cpp:1773:13:1773:13 | Phi | from 5:m1770_7 | +| ir.cpp:1773:17:1773:17 | Address | &:r1773_3 | +| ir.cpp:1773:17:1773:17 | Load | m1773_1 | +| ir.cpp:1773:17:1773:17 | StoreValue | r1773_4 | +| ir.cpp:1773:24:1773:25 | Address | &:r1773_10 | +| ir.cpp:1773:24:1773:25 | Left | r1773_11 | +| ir.cpp:1773:24:1773:25 | Load | m1773_9 | +| ir.cpp:1773:24:1773:25 | Right | r1773_12 | +| ir.cpp:1773:24:1773:25 | Unary | r1773_13 | +| ir.cpp:1773:29:1773:29 | Address | &:r1773_7 | +| ir.cpp:1773:29:1773:29 | Load | m1773_5 | +| ir.cpp:1773:29:1773:29 | StoreValue | r1773_8 | +| ir.cpp:1774:9:1774:9 | Address | &:r1774_6 | +| ir.cpp:1774:13:1774:13 | Address | &:r1774_1 | +| ir.cpp:1774:13:1774:13 | Left | r1774_2 | +| ir.cpp:1774:13:1774:13 | Load | m1773_1 | +| ir.cpp:1774:13:1774:17 | StoreValue | r1774_5 | +| ir.cpp:1774:17:1774:17 | Address | &:r1774_3 | +| ir.cpp:1774:17:1774:17 | Load | m1773_5 | +| ir.cpp:1774:17:1774:17 | Right | r1774_4 | +| ir.cpp:1777:9:1777:9 | Address | &:r1777_2 | +| ir.cpp:1777:9:1777:9 | Phi | from 6:m1773_1 | +| ir.cpp:1777:9:1777:9 | Phi | from 7:m1774_7 | +| ir.cpp:1777:13:1777:13 | Address | &:r1777_3 | +| ir.cpp:1777:13:1777:13 | Load | m1777_1 | +| ir.cpp:1777:13:1777:13 | StoreValue | r1777_4 | +| ir.cpp:1778:9:1778:9 | Address | &:r1778_1 | +| ir.cpp:1778:9:1778:9 | Condition | r1778_4 | +| ir.cpp:1778:9:1778:9 | Left | r1778_2 | +| ir.cpp:1778:9:1778:9 | Load | m1777_5 | +| ir.cpp:1778:9:1778:9 | Right | r1778_3 | +| ir.cpp:1779:9:1779:9 | Address | &:r1779_6 | +| ir.cpp:1779:13:1779:13 | Address | &:r1779_1 | +| ir.cpp:1779:13:1779:13 | Left | r1779_2 | +| ir.cpp:1779:13:1779:13 | Load | m1777_1 | +| ir.cpp:1779:13:1779:17 | StoreValue | r1779_5 | +| ir.cpp:1779:17:1779:17 | Address | &:r1779_3 | +| ir.cpp:1779:17:1779:17 | Load | m1777_5 | +| ir.cpp:1779:17:1779:17 | Right | r1779_4 | +| ir.cpp:1782:9:1782:18 | Address | &:r1782_2 | +| ir.cpp:1782:9:1782:18 | Condition | r1782_10 | +| ir.cpp:1782:9:1782:18 | Phi | from 8:m1777_1 | +| ir.cpp:1782:9:1782:18 | Phi | from 9:m1779_7 | +| ir.cpp:1782:13:1782:14 | Address | &:r1782_6 | +| ir.cpp:1782:13:1782:14 | Left | r1782_7 | +| ir.cpp:1782:13:1782:14 | Load | m1782_5 | +| ir.cpp:1782:13:1782:14 | Right | r1782_8 | +| ir.cpp:1782:13:1782:14 | Unary | r1782_9 | +| ir.cpp:1782:18:1782:18 | Address | &:r1782_3 | +| ir.cpp:1782:18:1782:18 | Load | m1777_5 | +| ir.cpp:1782:18:1782:18 | StoreValue | r1782_4 | +| ir.cpp:1783:9:1783:9 | Address | &:r1783_3 | +| ir.cpp:1783:9:1783:9 | Address | &:r1783_3 | +| ir.cpp:1783:9:1783:9 | Left | r1783_4 | +| ir.cpp:1783:9:1783:9 | Load | m1782_1 | +| ir.cpp:1783:9:1783:15 | StoreValue | r1783_5 | +| ir.cpp:1783:14:1783:15 | Address | &:r1783_1 | +| ir.cpp:1783:14:1783:15 | Load | m1782_5 | +| ir.cpp:1783:14:1783:15 | Right | r1783_2 | +| ir.cpp:1787:6:1787:26 | ChiPartial | partial:m1787_3 | +| ir.cpp:1787:6:1787:26 | ChiTotal | total:m1787_2 | +| ir.cpp:1787:6:1787:26 | SideEffect | m1787_3 | +| ir.cpp:1787:32:1787:32 | Address | &:r1787_5 | +| ir.cpp:1788:17:1788:17 | Address | &:r1788_1 | +| ir.cpp:1788:21:1788:21 | Address | &:r1788_2 | +| ir.cpp:1788:21:1788:21 | Load | m1787_6 | +| ir.cpp:1788:21:1788:21 | StoreValue | r1788_3 | +| ir.cpp:1788:24:1788:24 | Address | &:r1788_5 | +| ir.cpp:1788:24:1788:24 | Left | r1788_6 | +| ir.cpp:1788:24:1788:24 | Load | m1787_6 | +| ir.cpp:1788:24:1788:28 | Condition | r1788_8 | +| ir.cpp:1788:28:1788:28 | Right | r1788_7 | +| ir.cpp:1790:9:1790:9 | Address | &:r1790_6 | +| ir.cpp:1790:13:1790:13 | Address | &:r1790_1 | +| ir.cpp:1790:13:1790:13 | Left | r1790_2 | +| ir.cpp:1790:13:1790:13 | Load | m1787_6 | +| ir.cpp:1790:13:1790:17 | StoreValue | r1790_5 | +| ir.cpp:1790:17:1790:17 | Address | &:r1790_3 | +| ir.cpp:1790:17:1790:17 | Load | m1788_4 | +| ir.cpp:1790:17:1790:17 | Right | r1790_4 | +| ir.cpp:1793:9:1793:9 | Address | &:r1793_1 | +| ir.cpp:1794:13:1794:13 | Address | &:r1794_3 | +| ir.cpp:1794:17:1794:17 | Address | &:r1794_1 | +| ir.cpp:1794:17:1794:17 | Load | m1790_7 | +| ir.cpp:1794:17:1794:17 | StoreValue | r1794_2 | +| ir.cpp:1794:20:1794:20 | Address | &:r1794_5 | +| ir.cpp:1794:20:1794:20 | Left | r1794_6 | +| ir.cpp:1794:20:1794:20 | Load | m1790_7 | +| ir.cpp:1794:20:1794:24 | Condition | r1794_8 | +| ir.cpp:1794:24:1794:24 | Right | r1794_7 | +| ir.cpp:1796:9:1796:9 | Address | &:r1796_6 | +| ir.cpp:1796:13:1796:13 | Address | &:r1796_1 | +| ir.cpp:1796:13:1796:13 | Left | r1796_2 | +| ir.cpp:1796:13:1796:13 | Load | m1790_7 | +| ir.cpp:1796:13:1796:17 | StoreValue | r1796_5 | +| ir.cpp:1796:17:1796:17 | Address | &:r1796_3 | +| ir.cpp:1796:17:1796:17 | Load | m1794_4 | +| ir.cpp:1796:17:1796:17 | Right | r1796_4 | +| ir.cpp:1799:13:1799:13 | Address | &:r1799_3 | +| ir.cpp:1799:17:1799:17 | Address | &:r1799_1 | +| ir.cpp:1799:17:1799:17 | Load | m1796_7 | +| ir.cpp:1799:17:1799:17 | StoreValue | r1799_2 | +| ir.cpp:1799:18:1799:29 | Address | &:r1799_5 | +| ir.cpp:1799:18:1799:29 | Condition | r1799_11 | +| ir.cpp:1799:24:1799:25 | Address | &:r1799_9 | +| ir.cpp:1799:24:1799:25 | Load | m1799_8 | +| ir.cpp:1799:24:1799:25 | Unary | r1799_10 | +| ir.cpp:1799:29:1799:29 | Address | &:r1799_6 | +| ir.cpp:1799:29:1799:29 | Load | m1799_4 | +| ir.cpp:1799:29:1799:29 | StoreValue | r1799_7 | +| ir.cpp:1801:9:1801:9 | Address | &:r1801_6 | +| ir.cpp:1801:13:1801:13 | Address | &:r1801_1 | +| ir.cpp:1801:13:1801:13 | Left | r1801_2 | +| ir.cpp:1801:13:1801:13 | Load | m1796_7 | +| ir.cpp:1801:13:1801:17 | StoreValue | r1801_5 | +| ir.cpp:1801:17:1801:17 | Address | &:r1801_3 | +| ir.cpp:1801:17:1801:17 | Load | m1799_4 | +| ir.cpp:1801:17:1801:17 | Right | r1801_4 | +| ir.cpp:1804:13:1804:33 | Address | &:r1804_5 | +| ir.cpp:1804:13:1804:33 | Condition | r1804_11 | +| ir.cpp:1804:17:1804:17 | Address | &:r1804_1 | +| ir.cpp:1804:21:1804:21 | Address | &:r1804_2 | +| ir.cpp:1804:21:1804:21 | Load | m1801_7 | +| ir.cpp:1804:21:1804:21 | StoreValue | r1804_3 | +| ir.cpp:1804:28:1804:29 | Address | &:r1804_9 | +| ir.cpp:1804:28:1804:29 | Load | m1804_8 | +| ir.cpp:1804:28:1804:29 | Unary | r1804_10 | +| ir.cpp:1804:33:1804:33 | Address | &:r1804_6 | +| ir.cpp:1804:33:1804:33 | Load | m1804_4 | +| ir.cpp:1804:33:1804:33 | StoreValue | r1804_7 | +| ir.cpp:1806:9:1806:9 | Address | &:r1806_6 | +| ir.cpp:1806:13:1806:13 | Address | &:r1806_1 | +| ir.cpp:1806:13:1806:13 | Left | r1806_2 | +| ir.cpp:1806:13:1806:13 | Load | m1801_7 | +| ir.cpp:1806:13:1806:17 | StoreValue | r1806_5 | +| ir.cpp:1806:17:1806:17 | Address | &:r1806_3 | +| ir.cpp:1806:17:1806:17 | Load | m1804_4 | +| ir.cpp:1806:17:1806:17 | Right | r1806_4 | +| ir.cpp:1809:9:1809:9 | Address | &:r1809_1 | +| ir.cpp:1809:13:1809:13 | Address | &:r1809_2 | +| ir.cpp:1809:13:1809:13 | Load | m1806_7 | +| ir.cpp:1809:13:1809:13 | StoreValue | r1809_3 | | ir.cpp:1810:13:1810:13 | Address | &:r1810_1 | -| ir.cpp:1810:13:1810:13 | Left | r1810_2 | -| ir.cpp:1810:13:1810:13 | Load | m1804_7 | -| ir.cpp:1810:13:1810:17 | StoreValue | r1810_5 | -| ir.cpp:1810:17:1810:17 | Address | &:r1810_3 | -| ir.cpp:1810:17:1810:17 | Load | m1807_4 | -| ir.cpp:1810:17:1810:17 | Right | r1810_4 | -| ir.cpp:1813:13:1813:22 | Address | &:r1813_1 | -| ir.cpp:1813:13:1813:22 | Condition | r1813_7 | -| ir.cpp:1813:17:1813:18 | Address | &:r1813_5 | -| ir.cpp:1813:17:1813:18 | Load | m1813_4 | -| ir.cpp:1813:17:1813:18 | Unary | r1813_6 | -| ir.cpp:1813:22:1813:22 | Address | &:r1813_2 | -| ir.cpp:1813:22:1813:22 | Load | m1807_4 | -| ir.cpp:1813:22:1813:22 | StoreValue | r1813_3 | -| ir.cpp:1815:9:1815:9 | Address | &:r1815_3 | -| ir.cpp:1815:9:1815:9 | Address | &:r1815_3 | -| ir.cpp:1815:9:1815:9 | Left | r1815_4 | -| ir.cpp:1815:9:1815:9 | Load | m1810_7 | -| ir.cpp:1815:9:1815:15 | StoreValue | r1815_5 | -| ir.cpp:1815:14:1815:15 | Address | &:r1815_1 | -| ir.cpp:1815:14:1815:15 | Load | m1813_4 | -| ir.cpp:1815:14:1815:15 | Right | r1815_2 | -| ir.cpp:1821:5:1821:12 | Address | &:r1821_3 | -| ir.cpp:1821:5:1821:12 | SideEffect | ~m1821_6 | -| ir.cpp:1821:16:1821:16 | ChiPartial | partial:m1821_5 | -| ir.cpp:1821:16:1821:16 | ChiTotal | total:m1821_2 | -| ir.cpp:1821:16:1821:16 | StoreValue | r1821_4 | -| ir.cpp:1825:18:1825:25 | Address | &:r1825_3 | -| ir.cpp:1825:18:1825:25 | Arg(this) | this:r1825_3 | -| ir.cpp:1825:18:1825:25 | SideEffect | ~m1825_10 | -| ir.cpp:1825:27:1825:27 | Arg(0) | 0:r1825_5 | -| ir.cpp:1825:27:1825:28 | CallTarget | func:r1825_4 | -| ir.cpp:1825:27:1825:28 | ChiPartial | partial:m1825_7 | -| ir.cpp:1825:27:1825:28 | ChiPartial | partial:m1825_9 | -| ir.cpp:1825:27:1825:28 | ChiTotal | total:m1825_2 | -| ir.cpp:1825:27:1825:28 | ChiTotal | total:m1825_8 | -| ir.cpp:1825:27:1825:28 | SideEffect | ~m1825_2 | +| ir.cpp:1810:13:1810:13 | Condition | r1810_2 | +| ir.cpp:1810:13:1810:13 | Load | m1809_4 | +| ir.cpp:1812:9:1812:9 | Address | &:r1812_6 | +| ir.cpp:1812:13:1812:13 | Address | &:r1812_1 | +| ir.cpp:1812:13:1812:13 | Left | r1812_2 | +| ir.cpp:1812:13:1812:13 | Load | m1806_7 | +| ir.cpp:1812:13:1812:17 | StoreValue | r1812_5 | +| ir.cpp:1812:17:1812:17 | Address | &:r1812_3 | +| ir.cpp:1812:17:1812:17 | Load | m1809_4 | +| ir.cpp:1812:17:1812:17 | Right | r1812_4 | +| ir.cpp:1815:13:1815:22 | Address | &:r1815_1 | +| ir.cpp:1815:13:1815:22 | Condition | r1815_7 | +| ir.cpp:1815:17:1815:18 | Address | &:r1815_5 | +| ir.cpp:1815:17:1815:18 | Load | m1815_4 | +| ir.cpp:1815:17:1815:18 | Unary | r1815_6 | +| ir.cpp:1815:22:1815:22 | Address | &:r1815_2 | +| ir.cpp:1815:22:1815:22 | Load | m1809_4 | +| ir.cpp:1815:22:1815:22 | StoreValue | r1815_3 | +| ir.cpp:1817:9:1817:9 | Address | &:r1817_3 | +| ir.cpp:1817:9:1817:9 | Address | &:r1817_3 | +| ir.cpp:1817:9:1817:9 | Left | r1817_4 | +| ir.cpp:1817:9:1817:9 | Load | m1812_7 | +| ir.cpp:1817:9:1817:15 | StoreValue | r1817_5 | +| ir.cpp:1817:14:1817:15 | Address | &:r1817_1 | +| ir.cpp:1817:14:1817:15 | Load | m1815_4 | +| ir.cpp:1817:14:1817:15 | Right | r1817_2 | +| ir.cpp:1823:5:1823:12 | Address | &:r1823_3 | +| ir.cpp:1823:5:1823:12 | SideEffect | ~m1823_6 | +| ir.cpp:1823:16:1823:16 | ChiPartial | partial:m1823_5 | +| ir.cpp:1823:16:1823:16 | ChiTotal | total:m1823_2 | +| ir.cpp:1823:16:1823:16 | StoreValue | r1823_4 | | ir.cpp:1827:18:1827:25 | Address | &:r1827_3 | | ir.cpp:1827:18:1827:25 | Arg(this) | this:r1827_3 | | ir.cpp:1827:18:1827:25 | SideEffect | ~m1827_10 | -| ir.cpp:1827:28:1827:47 | CallTarget | func:r1827_4 | -| ir.cpp:1827:28:1827:47 | ChiPartial | partial:m1827_7 | -| ir.cpp:1827:28:1827:47 | ChiPartial | partial:m1827_9 | -| ir.cpp:1827:28:1827:47 | ChiTotal | total:m1827_2 | -| ir.cpp:1827:28:1827:47 | ChiTotal | total:m1827_8 | -| ir.cpp:1827:28:1827:47 | SideEffect | ~m1827_2 | -| ir.cpp:1827:46:1827:46 | Arg(0) | 0:r1827_5 | -| ir.cpp:1829:7:1829:19 | Address | &:r1829_3 | -| ir.cpp:1829:7:1829:19 | SideEffect | ~m1829_8 | -| ir.cpp:1829:23:1829:37 | ChiPartial | partial:m1829_7 | -| ir.cpp:1829:23:1829:37 | ChiTotal | total:m1829_2 | -| ir.cpp:1829:23:1829:37 | StoreValue | r1829_6 | -| ir.cpp:1829:23:1829:37 | Unary | r1829_4 | -| ir.cpp:1829:23:1829:37 | Unary | r1829_5 | -| ir.cpp:1831:5:1831:12 | Address | &:r1831_3 | -| ir.cpp:1831:5:1831:12 | SideEffect | ~m1831_7 | -| ir.cpp:1831:16:1831:23 | Address | &:r1831_4 | -| ir.cpp:1831:16:1831:23 | ChiPartial | partial:m1831_6 | -| ir.cpp:1831:16:1831:23 | ChiTotal | total:m1831_2 | -| ir.cpp:1831:16:1831:23 | Load | ~m1831_2 | -| ir.cpp:1831:16:1831:23 | StoreValue | r1831_5 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_5 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_7 | -| ir.cpp:1834:11:1834:11 | Address | &:r1834_10 | -| ir.cpp:1834:11:1834:11 | ChiPartial | partial:m1834_3 | -| ir.cpp:1834:11:1834:11 | ChiTotal | total:m1834_2 | -| ir.cpp:1834:11:1834:11 | Load | m0_20 | -| ir.cpp:1834:11:1834:11 | Load | m1834_6 | -| ir.cpp:1834:11:1834:11 | SideEffect | m0_14 | -| ir.cpp:1834:11:1834:11 | SideEffect | m1834_3 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_5 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_7 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_7 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_9 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_12 | -| ir.cpp:1839:12:1839:12 | Address | &:r1839_20 | -| ir.cpp:1839:12:1839:12 | Arg(this) | this:r0_5 | -| ir.cpp:1839:12:1839:12 | CallTarget | func:r1839_11 | -| ir.cpp:1839:12:1839:12 | ChiPartial | partial:m1839_3 | -| ir.cpp:1839:12:1839:12 | ChiPartial | partial:m1839_17 | -| ir.cpp:1839:12:1839:12 | ChiTotal | total:m1839_2 | -| ir.cpp:1839:12:1839:12 | ChiTotal | total:m1839_4 | -| ir.cpp:1839:12:1839:12 | Load | m0_2 | -| ir.cpp:1839:12:1839:12 | Load | m0_21 | -| ir.cpp:1839:12:1839:12 | Load | m1839_6 | -| ir.cpp:1839:12:1839:12 | Load | m1839_6 | -| ir.cpp:1839:12:1839:12 | SideEffect | m0_12 | -| ir.cpp:1839:12:1839:12 | SideEffect | ~m1839_4 | -| ir.cpp:1839:12:1839:12 | SideEffect | ~m1839_18 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_10 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_13 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_14 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_15 | -| ir.cpp:1839:12:1839:12 | Unary | r1839_16 | -| ir.cpp:1843:10:1843:12 | ChiPartial | partial:m1843_3 | -| ir.cpp:1843:10:1843:12 | ChiTotal | total:m1843_2 | -| ir.cpp:1843:10:1843:12 | SideEffect | ~m1845_18 | -| ir.cpp:1844:11:1844:11 | Address | &:r1844_1 | -| ir.cpp:1844:11:1844:11 | Address | &:r1844_1 | -| ir.cpp:1844:11:1844:11 | Arg(this) | this:r1844_1 | -| ir.cpp:1844:13:1844:13 | Address | &:r1844_4 | -| ir.cpp:1844:13:1844:13 | Address | &:r1844_4 | -| ir.cpp:1844:13:1844:13 | Arg(0) | 0:r1844_4 | -| ir.cpp:1844:13:1844:13 | ChiPartial | partial:m1844_11 | -| ir.cpp:1844:13:1844:13 | ChiTotal | total:m1844_7 | -| ir.cpp:1844:13:1844:13 | SideEffect | ~m1844_7 | -| ir.cpp:1844:13:1844:14 | CallTarget | func:r1844_3 | -| ir.cpp:1844:13:1844:14 | ChiPartial | partial:m1844_6 | -| ir.cpp:1844:13:1844:14 | ChiPartial | partial:m1844_9 | -| ir.cpp:1844:13:1844:14 | ChiTotal | total:m1843_4 | -| ir.cpp:1844:13:1844:14 | ChiTotal | total:m1844_2 | -| ir.cpp:1844:13:1844:14 | SideEffect | ~m1843_4 | -| ir.cpp:1845:9:1845:9 | Address | &:r1845_1 | -| ir.cpp:1845:9:1845:9 | Address | &:r1845_1 | -| ir.cpp:1845:9:1845:9 | Arg(this) | this:r1845_1 | -| ir.cpp:1845:9:1845:9 | ChiPartial | partial:m1845_21 | -| ir.cpp:1845:9:1845:9 | ChiTotal | total:m1844_10 | -| ir.cpp:1845:9:1845:9 | SideEffect | m1844_10 | -| ir.cpp:1845:11:1845:11 | CallTarget | func:r1845_2 | -| ir.cpp:1845:11:1845:11 | ChiPartial | partial:m1845_17 | -| ir.cpp:1845:11:1845:11 | ChiTotal | total:m1845_14 | -| ir.cpp:1845:11:1845:11 | SideEffect | ~m1845_14 | -| ir.cpp:1845:11:1845:11 | Unary | r1845_16 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_3 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_3 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_6 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_6 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_15 | -| ir.cpp:1845:13:1845:13 | Address | &:r1845_15 | -| ir.cpp:1845:13:1845:13 | Arg(0) | 0:r1845_6 | -| ir.cpp:1845:13:1845:13 | Arg(0) | 0:r1845_15 | -| ir.cpp:1845:13:1845:13 | Arg(this) | this:r1845_3 | -| ir.cpp:1845:13:1845:13 | CallTarget | func:r1845_5 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_8 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_11 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_13 | -| ir.cpp:1845:13:1845:13 | ChiPartial | partial:m1845_23 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1844_12 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_4 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_9 | -| ir.cpp:1845:13:1845:13 | ChiTotal | total:m1845_12 | -| ir.cpp:1845:13:1845:13 | SideEffect | ~m1844_12 | -| ir.cpp:1845:13:1845:13 | SideEffect | ~m1845_9 | -| ir.cpp:1845:13:1845:13 | SideEffect | ~m1845_12 | -| ir.cpp:1845:13:1845:13 | Unary | r1845_3 | -| ir.cpp:1849:6:1849:14 | ChiPartial | partial:m1849_3 | -| ir.cpp:1849:6:1849:14 | ChiTotal | total:m1849_2 | -| ir.cpp:1849:6:1849:14 | SideEffect | m1849_3 | -| ir.cpp:1850:17:1850:18 | Address | &:r1850_1 | -| ir.cpp:1850:22:1850:40 | StoreValue | r1850_3 | -| ir.cpp:1850:22:1850:40 | Unary | r1850_2 | -| ir.cpp:1851:17:1851:23 | Address | &:r1851_1 | -| ir.cpp:1851:27:1851:34 | StoreValue | r1851_3 | -| ir.cpp:1851:27:1851:34 | Unary | r1851_2 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_5 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_7 | -| ir.cpp:1862:15:1862:15 | Address | &:r1862_15 | -| ir.cpp:1862:15:1862:15 | ChiPartial | partial:m1862_3 | -| ir.cpp:1862:15:1862:15 | ChiTotal | total:m1862_2 | -| ir.cpp:1862:15:1862:15 | Load | m1862_6 | -| ir.cpp:1862:15:1862:15 | Load | m1864_5 | -| ir.cpp:1862:15:1862:15 | SideEffect | m1862_3 | -| ir.cpp:1862:15:1862:15 | SideEffect | m1862_8 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_9 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 | -| ir.cpp:1862:47:1862:47 | Address | &:r1862_11 | -| ir.cpp:1862:47:1862:47 | Load | m1862_10 | -| ir.cpp:1862:47:1862:47 | SideEffect | m1862_12 | -| ir.cpp:1864:13:1864:21 | Address | &:r1864_1 | -| ir.cpp:1864:20:1864:20 | Address | &:r1864_2 | -| ir.cpp:1864:20:1864:20 | Load | m1862_10 | -| ir.cpp:1864:20:1864:20 | StoreValue | r1864_4 | -| ir.cpp:1864:20:1864:20 | Unary | r1864_3 | -| ir.cpp:1868:10:1868:14 | ChiPartial | partial:m1868_3 | -| ir.cpp:1868:10:1868:14 | ChiTotal | total:m1868_2 | -| ir.cpp:1868:10:1868:14 | SideEffect | ~m1870_12 | -| ir.cpp:1869:19:1869:19 | Address | &:r1869_1 | -| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 | -| ir.cpp:1870:9:1870:9 | Address | &:r1870_1 | -| ir.cpp:1870:9:1870:9 | Arg(this) | this:r1870_1 | -| ir.cpp:1870:9:1870:9 | ChiPartial | partial:m1870_9 | -| ir.cpp:1870:9:1870:9 | ChiTotal | total:m1869_2 | -| ir.cpp:1870:9:1870:9 | SideEffect | m1869_2 | -| ir.cpp:1870:11:1870:33 | CallTarget | func:r1870_2 | -| ir.cpp:1870:11:1870:33 | ChiPartial | partial:m1870_5 | -| ir.cpp:1870:11:1870:33 | ChiTotal | total:m1868_4 | -| ir.cpp:1870:11:1870:33 | SideEffect | ~m1868_4 | -| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 | -| ir.cpp:1870:35:1870:41 | Address | &:r1870_3 | -| ir.cpp:1870:35:1870:41 | Arg(0) | 0:r1870_3 | -| ir.cpp:1870:35:1870:41 | ChiPartial | partial:m1870_11 | -| ir.cpp:1870:35:1870:41 | ChiTotal | total:m1870_6 | -| ir.cpp:1870:35:1870:41 | SideEffect | ~m1870_6 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_5 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_7 | -| ir.cpp:1875:13:1875:13 | Address | &:r1875_10 | -| ir.cpp:1875:13:1875:13 | ChiPartial | partial:m1875_3 | -| ir.cpp:1875:13:1875:13 | ChiTotal | total:m1875_2 | -| ir.cpp:1875:13:1875:13 | Load | m1875_6 | -| ir.cpp:1875:13:1875:13 | Load | m1879_9 | -| ir.cpp:1875:13:1875:13 | SideEffect | m1875_3 | -| ir.cpp:1875:13:1875:13 | SideEffect | m1875_8 | -| ir.cpp:1876:13:1876:29 | Address | &:r1876_1 | -| ir.cpp:1876:13:1876:29 | Address | &:r1876_3 | -| ir.cpp:1877:13:1877:14 | Address | &:r1877_4 | -| ir.cpp:1877:13:1877:19 | ChiPartial | partial:m1877_5 | -| ir.cpp:1877:13:1877:19 | ChiTotal | total:m1876_2 | -| ir.cpp:1877:14:1877:14 | Unary | r1877_2 | -| ir.cpp:1877:14:1877:14 | Unary | r1877_3 | -| ir.cpp:1877:18:1877:19 | StoreValue | r1877_1 | -| ir.cpp:1878:13:1878:14 | Address | &:r1878_4 | -| ir.cpp:1878:13:1878:19 | ChiPartial | partial:m1878_5 | -| ir.cpp:1878:13:1878:19 | ChiTotal | total:m1876_4 | -| ir.cpp:1878:14:1878:14 | Unary | r1878_2 | -| ir.cpp:1878:14:1878:14 | Unary | r1878_3 | -| ir.cpp:1878:18:1878:19 | StoreValue | r1878_1 | -| ir.cpp:1879:13:1879:27 | Address | &:r1879_1 | -| ir.cpp:1879:20:1879:21 | Left | r1879_4 | -| ir.cpp:1879:20:1879:21 | Load | m1877_5 | -| ir.cpp:1879:20:1879:26 | StoreValue | r1879_8 | -| ir.cpp:1879:21:1879:21 | Address | &:r1879_3 | -| ir.cpp:1879:21:1879:21 | Unary | r1879_2 | -| ir.cpp:1879:25:1879:26 | Load | m1878_5 | -| ir.cpp:1879:25:1879:26 | Right | r1879_7 | -| ir.cpp:1879:26:1879:26 | Address | &:r1879_6 | -| ir.cpp:1879:26:1879:26 | Unary | r1879_5 | -| ir.cpp:1883:10:1883:14 | ChiPartial | partial:m1883_3 | -| ir.cpp:1883:10:1883:14 | ChiTotal | total:m1883_2 | -| ir.cpp:1883:10:1883:14 | SideEffect | ~m1885_5 | -| ir.cpp:1884:19:1884:19 | Address | &:r1884_1 | -| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 | -| ir.cpp:1885:9:1885:9 | Address | &:r1885_1 | -| ir.cpp:1885:9:1885:9 | Arg(this) | this:r1885_1 | -| ir.cpp:1885:9:1885:9 | ChiPartial | partial:m1885_7 | -| ir.cpp:1885:9:1885:9 | ChiTotal | total:m1884_2 | -| ir.cpp:1885:9:1885:9 | SideEffect | m1884_2 | -| ir.cpp:1885:11:1885:50 | CallTarget | func:r1885_2 | -| ir.cpp:1885:11:1885:50 | ChiPartial | partial:m1885_4 | -| ir.cpp:1885:11:1885:50 | ChiTotal | total:m1883_4 | -| ir.cpp:1885:11:1885:50 | SideEffect | ~m1883_4 | -| ir.cpp:1889:24:1889:24 | Address | &:r1889_3 | -| ir.cpp:1889:24:1889:24 | Address | &:r1889_3 | -| ir.cpp:1889:24:1889:24 | SideEffect | ~m1889_6 | -| ir.cpp:1889:24:1889:24 | SideEffect | ~m1889_6 | -| ir.cpp:1889:42:1889:43 | ChiPartial | partial:m1889_5 | -| ir.cpp:1889:42:1889:43 | ChiPartial | partial:m1889_5 | -| ir.cpp:1889:42:1889:43 | ChiTotal | total:m1889_2 | -| ir.cpp:1889:42:1889:43 | ChiTotal | total:m1889_2 | -| ir.cpp:1889:42:1889:43 | StoreValue | r1889_4 | -| ir.cpp:1889:42:1889:43 | StoreValue | r1889_4 | -| ir.cpp:1891:5:1891:28 | Address | &:r1891_5 | -| ir.cpp:1891:5:1891:28 | ChiPartial | partial:m1891_3 | -| ir.cpp:1891:5:1891:28 | ChiTotal | total:m1891_2 | -| ir.cpp:1891:5:1891:28 | Load | m1894_8 | -| ir.cpp:1891:5:1891:28 | SideEffect | m1891_3 | -| ir.cpp:1892:9:1892:17 | Address | &:r1892_1 | -| ir.cpp:1892:21:1892:40 | Address | &:r1892_2 | -| ir.cpp:1892:21:1892:40 | Load | ~m1891_3 | -| ir.cpp:1892:21:1892:40 | StoreValue | r1892_3 | -| ir.cpp:1893:10:1893:19 | Address | &:r1893_1 | -| ir.cpp:1893:23:1893:43 | Address | &:r1893_2 | -| ir.cpp:1893:23:1893:43 | Load | ~m1891_3 | -| ir.cpp:1893:23:1893:43 | StoreValue | r1893_3 | -| ir.cpp:1894:5:1894:39 | Address | &:r1894_1 | -| ir.cpp:1894:12:1894:20 | Address | &:r1894_2 | -| ir.cpp:1894:12:1894:20 | Left | r1894_3 | -| ir.cpp:1894:12:1894:20 | Load | m1892_4 | -| ir.cpp:1894:12:1894:38 | StoreValue | r1894_7 | -| ir.cpp:1894:24:1894:38 | Right | r1894_6 | -| ir.cpp:1894:29:1894:38 | Address | &:r1894_4 | -| ir.cpp:1894:29:1894:38 | Load | m1893_4 | -| ir.cpp:1894:29:1894:38 | Unary | r1894_5 | -| ir.cpp:1899:5:1899:16 | Address | &:r1899_7 | -| ir.cpp:1899:5:1899:16 | ChiPartial | partial:m1899_3 | -| ir.cpp:1899:5:1899:16 | ChiTotal | total:m1899_2 | -| ir.cpp:1899:5:1899:16 | Load | m1901_4 | -| ir.cpp:1899:5:1899:16 | SideEffect | m1899_3 | -| ir.cpp:1899:22:1899:22 | Address | &:r1899_5 | -| ir.cpp:1900:9:1900:9 | Address | &:r1900_1 | -| ir.cpp:1900:9:1900:9 | Left | r1900_2 | -| ir.cpp:1900:9:1900:9 | Load | m1899_6 | -| ir.cpp:1900:9:1900:14 | Condition | r1900_4 | -| ir.cpp:1900:13:1900:14 | Right | r1900_3 | -| ir.cpp:1901:9:1901:17 | Address | &:r1901_1 | -| ir.cpp:1901:16:1901:16 | Address | &:r1901_2 | -| ir.cpp:1901:16:1901:16 | Load | m1899_6 | -| ir.cpp:1901:16:1901:16 | StoreValue | r1901_3 | -| ir.cpp:1903:9:1903:20 | CallTarget | func:r1903_1 | -| ir.cpp:1903:9:1903:20 | ChiPartial | partial:m1903_3 | -| ir.cpp:1903:9:1903:20 | ChiTotal | total:m1899_4 | -| ir.cpp:1903:9:1903:20 | SideEffect | ~m1899_4 | -| ir.cpp:1907:5:1907:17 | Address | &:r1907_8 | -| ir.cpp:1907:5:1907:17 | ChiPartial | partial:m1907_3 | -| ir.cpp:1907:5:1907:17 | ChiTotal | total:m1907_2 | -| ir.cpp:1907:5:1907:17 | Load | m1911_4 | -| ir.cpp:1907:5:1907:17 | SideEffect | m1907_3 | -| ir.cpp:1907:23:1907:23 | Address | &:r1907_5 | -| ir.cpp:1908:9:1908:9 | Address | &:r1908_1 | -| ir.cpp:1908:9:1908:9 | Left | r1908_2 | -| ir.cpp:1908:9:1908:9 | Load | m1907_6 | -| ir.cpp:1908:9:1908:14 | Condition | r1908_4 | -| ir.cpp:1908:13:1908:14 | Right | r1908_3 | -| ir.cpp:1909:9:1909:20 | CallTarget | func:r1909_1 | -| ir.cpp:1909:9:1909:20 | ChiPartial | partial:m1909_3 | -| ir.cpp:1909:9:1909:20 | ChiTotal | total:m1907_4 | -| ir.cpp:1909:9:1909:20 | SideEffect | ~m1907_4 | -| ir.cpp:1911:5:1911:13 | Address | &:r1911_1 | -| ir.cpp:1911:12:1911:12 | Address | &:r1911_2 | -| ir.cpp:1911:12:1911:12 | Load | m1907_6 | -| ir.cpp:1911:12:1911:12 | StoreValue | r1911_3 | -| ir.cpp:1914:5:1914:19 | Address | &:r1914_7 | -| ir.cpp:1914:5:1914:19 | ChiPartial | partial:m1914_3 | -| ir.cpp:1914:5:1914:19 | ChiTotal | total:m1914_2 | -| ir.cpp:1914:5:1914:19 | Load | m1915_4 | -| ir.cpp:1914:5:1914:19 | SideEffect | m1914_3 | -| ir.cpp:1914:25:1914:25 | Address | &:r1914_5 | -| ir.cpp:1915:5:1915:13 | Address | &:r1915_1 | -| ir.cpp:1915:12:1915:12 | Address | &:r1915_2 | -| ir.cpp:1915:12:1915:12 | Load | m1914_6 | -| ir.cpp:1915:12:1915:12 | StoreValue | r1915_3 | -| ir.cpp:1918:6:1918:43 | ChiPartial | partial:m1918_3 | -| ir.cpp:1918:6:1918:43 | ChiTotal | total:m1918_2 | -| ir.cpp:1918:6:1918:43 | SideEffect | ~m1925_5 | -| ir.cpp:1919:7:1919:7 | Address | &:r1919_1 | -| ir.cpp:1919:7:1919:7 | Address | &:r1919_1 | -| ir.cpp:1919:7:1919:7 | Arg(this) | this:r1919_1 | -| ir.cpp:1919:7:1919:7 | CallTarget | func:r1919_3 | -| ir.cpp:1919:7:1919:7 | ChiPartial | partial:m1919_5 | -| ir.cpp:1919:7:1919:7 | ChiPartial | partial:m1919_7 | -| ir.cpp:1919:7:1919:7 | ChiTotal | total:m1918_4 | -| ir.cpp:1919:7:1919:7 | ChiTotal | total:m1919_2 | -| ir.cpp:1919:7:1919:7 | SideEffect | ~m1918_4 | -| ir.cpp:1920:9:1920:9 | Address | &:r1920_1 | -| ir.cpp:1921:5:1921:5 | Address | &:r1921_7 | -| ir.cpp:1921:11:1921:30 | CallTarget | func:r1921_2 | -| ir.cpp:1921:11:1921:30 | ChiPartial | partial:m1921_5 | -| ir.cpp:1921:11:1921:30 | ChiTotal | total:m1919_6 | -| ir.cpp:1921:11:1921:30 | SideEffect | ~m1919_6 | -| ir.cpp:1921:11:1921:30 | StoreValue | r1921_4 | -| ir.cpp:1921:32:1921:33 | Arg(0) | 0:r1921_3 | +| ir.cpp:1827:27:1827:27 | Arg(0) | 0:r1827_5 | +| ir.cpp:1827:27:1827:28 | CallTarget | func:r1827_4 | +| ir.cpp:1827:27:1827:28 | ChiPartial | partial:m1827_7 | +| ir.cpp:1827:27:1827:28 | ChiPartial | partial:m1827_9 | +| ir.cpp:1827:27:1827:28 | ChiTotal | total:m1827_2 | +| ir.cpp:1827:27:1827:28 | ChiTotal | total:m1827_8 | +| ir.cpp:1827:27:1827:28 | SideEffect | ~m1827_2 | +| ir.cpp:1829:18:1829:25 | Address | &:r1829_3 | +| ir.cpp:1829:18:1829:25 | Arg(this) | this:r1829_3 | +| ir.cpp:1829:18:1829:25 | SideEffect | ~m1829_10 | +| ir.cpp:1829:28:1829:47 | CallTarget | func:r1829_4 | +| ir.cpp:1829:28:1829:47 | ChiPartial | partial:m1829_7 | +| ir.cpp:1829:28:1829:47 | ChiPartial | partial:m1829_9 | +| ir.cpp:1829:28:1829:47 | ChiTotal | total:m1829_2 | +| ir.cpp:1829:28:1829:47 | ChiTotal | total:m1829_8 | +| ir.cpp:1829:28:1829:47 | SideEffect | ~m1829_2 | +| ir.cpp:1829:46:1829:46 | Arg(0) | 0:r1829_5 | +| ir.cpp:1831:7:1831:19 | Address | &:r1831_3 | +| ir.cpp:1831:7:1831:19 | SideEffect | ~m1831_8 | +| ir.cpp:1831:23:1831:37 | ChiPartial | partial:m1831_7 | +| ir.cpp:1831:23:1831:37 | ChiTotal | total:m1831_2 | +| ir.cpp:1831:23:1831:37 | StoreValue | r1831_6 | +| ir.cpp:1831:23:1831:37 | Unary | r1831_4 | +| ir.cpp:1831:23:1831:37 | Unary | r1831_5 | +| ir.cpp:1833:5:1833:12 | Address | &:r1833_3 | +| ir.cpp:1833:5:1833:12 | SideEffect | ~m1833_7 | +| ir.cpp:1833:16:1833:23 | Address | &:r1833_4 | +| ir.cpp:1833:16:1833:23 | ChiPartial | partial:m1833_6 | +| ir.cpp:1833:16:1833:23 | ChiTotal | total:m1833_2 | +| ir.cpp:1833:16:1833:23 | Load | ~m1833_2 | +| ir.cpp:1833:16:1833:23 | StoreValue | r1833_5 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_5 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_5 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_7 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_7 | +| ir.cpp:1836:11:1836:11 | Address | &:r1836_10 | +| ir.cpp:1836:11:1836:11 | ChiPartial | partial:m1836_3 | +| ir.cpp:1836:11:1836:11 | ChiTotal | total:m1836_2 | +| ir.cpp:1836:11:1836:11 | Load | m0_20 | +| ir.cpp:1836:11:1836:11 | Load | m1836_6 | +| ir.cpp:1836:11:1836:11 | SideEffect | m0_14 | +| ir.cpp:1836:11:1836:11 | SideEffect | m1836_3 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_5 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_5 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_7 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_7 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_9 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_12 | +| ir.cpp:1841:12:1841:12 | Address | &:r1841_20 | +| ir.cpp:1841:12:1841:12 | Arg(this) | this:r0_5 | +| ir.cpp:1841:12:1841:12 | CallTarget | func:r1841_11 | +| ir.cpp:1841:12:1841:12 | ChiPartial | partial:m1841_3 | +| ir.cpp:1841:12:1841:12 | ChiPartial | partial:m1841_17 | +| ir.cpp:1841:12:1841:12 | ChiTotal | total:m1841_2 | +| ir.cpp:1841:12:1841:12 | ChiTotal | total:m1841_4 | +| ir.cpp:1841:12:1841:12 | Load | m0_2 | +| ir.cpp:1841:12:1841:12 | Load | m0_21 | +| ir.cpp:1841:12:1841:12 | Load | m1841_6 | +| ir.cpp:1841:12:1841:12 | Load | m1841_6 | +| ir.cpp:1841:12:1841:12 | SideEffect | m0_12 | +| ir.cpp:1841:12:1841:12 | SideEffect | ~m1841_4 | +| ir.cpp:1841:12:1841:12 | SideEffect | ~m1841_18 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_10 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_13 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_14 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_15 | +| ir.cpp:1841:12:1841:12 | Unary | r1841_16 | +| ir.cpp:1845:10:1845:12 | ChiPartial | partial:m1845_3 | +| ir.cpp:1845:10:1845:12 | ChiTotal | total:m1845_2 | +| ir.cpp:1845:10:1845:12 | SideEffect | ~m1847_18 | +| ir.cpp:1846:11:1846:11 | Address | &:r1846_1 | +| ir.cpp:1846:11:1846:11 | Address | &:r1846_1 | +| ir.cpp:1846:11:1846:11 | Arg(this) | this:r1846_1 | +| ir.cpp:1846:13:1846:13 | Address | &:r1846_4 | +| ir.cpp:1846:13:1846:13 | Address | &:r1846_4 | +| ir.cpp:1846:13:1846:13 | Arg(0) | 0:r1846_4 | +| ir.cpp:1846:13:1846:13 | ChiPartial | partial:m1846_11 | +| ir.cpp:1846:13:1846:13 | ChiTotal | total:m1846_7 | +| ir.cpp:1846:13:1846:13 | SideEffect | ~m1846_7 | +| ir.cpp:1846:13:1846:14 | CallTarget | func:r1846_3 | +| ir.cpp:1846:13:1846:14 | ChiPartial | partial:m1846_6 | +| ir.cpp:1846:13:1846:14 | ChiPartial | partial:m1846_9 | +| ir.cpp:1846:13:1846:14 | ChiTotal | total:m1845_4 | +| ir.cpp:1846:13:1846:14 | ChiTotal | total:m1846_2 | +| ir.cpp:1846:13:1846:14 | SideEffect | ~m1845_4 | +| ir.cpp:1847:9:1847:9 | Address | &:r1847_1 | +| ir.cpp:1847:9:1847:9 | Address | &:r1847_1 | +| ir.cpp:1847:9:1847:9 | Arg(this) | this:r1847_1 | +| ir.cpp:1847:9:1847:9 | ChiPartial | partial:m1847_21 | +| ir.cpp:1847:9:1847:9 | ChiTotal | total:m1846_10 | +| ir.cpp:1847:9:1847:9 | SideEffect | m1846_10 | +| ir.cpp:1847:11:1847:11 | CallTarget | func:r1847_2 | +| ir.cpp:1847:11:1847:11 | ChiPartial | partial:m1847_17 | +| ir.cpp:1847:11:1847:11 | ChiTotal | total:m1847_14 | +| ir.cpp:1847:11:1847:11 | SideEffect | ~m1847_14 | +| ir.cpp:1847:11:1847:11 | Unary | r1847_16 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_3 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_3 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_6 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_6 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_15 | +| ir.cpp:1847:13:1847:13 | Address | &:r1847_15 | +| ir.cpp:1847:13:1847:13 | Arg(0) | 0:r1847_6 | +| ir.cpp:1847:13:1847:13 | Arg(0) | 0:r1847_15 | +| ir.cpp:1847:13:1847:13 | Arg(this) | this:r1847_3 | +| ir.cpp:1847:13:1847:13 | CallTarget | func:r1847_5 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_8 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_11 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_13 | +| ir.cpp:1847:13:1847:13 | ChiPartial | partial:m1847_23 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1846_12 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_4 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_9 | +| ir.cpp:1847:13:1847:13 | ChiTotal | total:m1847_12 | +| ir.cpp:1847:13:1847:13 | SideEffect | ~m1846_12 | +| ir.cpp:1847:13:1847:13 | SideEffect | ~m1847_9 | +| ir.cpp:1847:13:1847:13 | SideEffect | ~m1847_12 | +| ir.cpp:1847:13:1847:13 | Unary | r1847_3 | +| ir.cpp:1851:6:1851:14 | ChiPartial | partial:m1851_3 | +| ir.cpp:1851:6:1851:14 | ChiTotal | total:m1851_2 | +| ir.cpp:1851:6:1851:14 | SideEffect | m1851_3 | +| ir.cpp:1852:17:1852:18 | Address | &:r1852_1 | +| ir.cpp:1852:22:1852:40 | StoreValue | r1852_3 | +| ir.cpp:1852:22:1852:40 | Unary | r1852_2 | +| ir.cpp:1853:17:1853:23 | Address | &:r1853_1 | +| ir.cpp:1853:27:1853:34 | StoreValue | r1853_3 | +| ir.cpp:1853:27:1853:34 | Unary | r1853_2 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_5 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_5 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_7 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_7 | +| ir.cpp:1864:15:1864:15 | Address | &:r1864_15 | +| ir.cpp:1864:15:1864:15 | ChiPartial | partial:m1864_3 | +| ir.cpp:1864:15:1864:15 | ChiTotal | total:m1864_2 | +| ir.cpp:1864:15:1864:15 | Load | m1864_6 | +| ir.cpp:1864:15:1864:15 | Load | m1866_5 | +| ir.cpp:1864:15:1864:15 | SideEffect | m1864_3 | +| ir.cpp:1864:15:1864:15 | SideEffect | m1864_8 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_9 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_9 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_11 | +| ir.cpp:1864:47:1864:47 | Address | &:r1864_11 | +| ir.cpp:1864:47:1864:47 | Load | m1864_10 | +| ir.cpp:1864:47:1864:47 | SideEffect | m1864_12 | +| ir.cpp:1866:13:1866:21 | Address | &:r1866_1 | +| ir.cpp:1866:20:1866:20 | Address | &:r1866_2 | +| ir.cpp:1866:20:1866:20 | Load | m1864_10 | +| ir.cpp:1866:20:1866:20 | StoreValue | r1866_4 | +| ir.cpp:1866:20:1866:20 | Unary | r1866_3 | +| ir.cpp:1870:10:1870:14 | ChiPartial | partial:m1870_3 | +| ir.cpp:1870:10:1870:14 | ChiTotal | total:m1870_2 | +| ir.cpp:1870:10:1870:14 | SideEffect | ~m1872_12 | +| ir.cpp:1871:19:1871:19 | Address | &:r1871_1 | +| ir.cpp:1872:9:1872:9 | Address | &:r1872_1 | +| ir.cpp:1872:9:1872:9 | Address | &:r1872_1 | +| ir.cpp:1872:9:1872:9 | Arg(this) | this:r1872_1 | +| ir.cpp:1872:9:1872:9 | ChiPartial | partial:m1872_9 | +| ir.cpp:1872:9:1872:9 | ChiTotal | total:m1871_2 | +| ir.cpp:1872:9:1872:9 | SideEffect | m1871_2 | +| ir.cpp:1872:11:1872:33 | CallTarget | func:r1872_2 | +| ir.cpp:1872:11:1872:33 | ChiPartial | partial:m1872_5 | +| ir.cpp:1872:11:1872:33 | ChiTotal | total:m1870_4 | +| ir.cpp:1872:11:1872:33 | SideEffect | ~m1870_4 | +| ir.cpp:1872:35:1872:41 | Address | &:r1872_3 | +| ir.cpp:1872:35:1872:41 | Address | &:r1872_3 | +| ir.cpp:1872:35:1872:41 | Arg(0) | 0:r1872_3 | +| ir.cpp:1872:35:1872:41 | ChiPartial | partial:m1872_11 | +| ir.cpp:1872:35:1872:41 | ChiTotal | total:m1872_6 | +| ir.cpp:1872:35:1872:41 | SideEffect | ~m1872_6 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_5 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_5 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_7 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_7 | +| ir.cpp:1877:13:1877:13 | Address | &:r1877_10 | +| ir.cpp:1877:13:1877:13 | ChiPartial | partial:m1877_3 | +| ir.cpp:1877:13:1877:13 | ChiTotal | total:m1877_2 | +| ir.cpp:1877:13:1877:13 | Load | m1877_6 | +| ir.cpp:1877:13:1877:13 | Load | m1881_9 | +| ir.cpp:1877:13:1877:13 | SideEffect | m1877_3 | +| ir.cpp:1877:13:1877:13 | SideEffect | m1877_8 | +| ir.cpp:1878:13:1878:29 | Address | &:r1878_1 | +| ir.cpp:1878:13:1878:29 | Address | &:r1878_3 | +| ir.cpp:1879:13:1879:14 | Address | &:r1879_4 | +| ir.cpp:1879:13:1879:19 | ChiPartial | partial:m1879_5 | +| ir.cpp:1879:13:1879:19 | ChiTotal | total:m1878_2 | +| ir.cpp:1879:14:1879:14 | Unary | r1879_2 | +| ir.cpp:1879:14:1879:14 | Unary | r1879_3 | +| ir.cpp:1879:18:1879:19 | StoreValue | r1879_1 | +| ir.cpp:1880:13:1880:14 | Address | &:r1880_4 | +| ir.cpp:1880:13:1880:19 | ChiPartial | partial:m1880_5 | +| ir.cpp:1880:13:1880:19 | ChiTotal | total:m1878_4 | +| ir.cpp:1880:14:1880:14 | Unary | r1880_2 | +| ir.cpp:1880:14:1880:14 | Unary | r1880_3 | +| ir.cpp:1880:18:1880:19 | StoreValue | r1880_1 | +| ir.cpp:1881:13:1881:27 | Address | &:r1881_1 | +| ir.cpp:1881:20:1881:21 | Left | r1881_4 | +| ir.cpp:1881:20:1881:21 | Load | m1879_5 | +| ir.cpp:1881:20:1881:26 | StoreValue | r1881_8 | +| ir.cpp:1881:21:1881:21 | Address | &:r1881_3 | +| ir.cpp:1881:21:1881:21 | Unary | r1881_2 | +| ir.cpp:1881:25:1881:26 | Load | m1880_5 | +| ir.cpp:1881:25:1881:26 | Right | r1881_7 | +| ir.cpp:1881:26:1881:26 | Address | &:r1881_6 | +| ir.cpp:1881:26:1881:26 | Unary | r1881_5 | +| ir.cpp:1885:10:1885:14 | ChiPartial | partial:m1885_3 | +| ir.cpp:1885:10:1885:14 | ChiTotal | total:m1885_2 | +| ir.cpp:1885:10:1885:14 | SideEffect | ~m1887_5 | +| ir.cpp:1886:19:1886:19 | Address | &:r1886_1 | +| ir.cpp:1887:9:1887:9 | Address | &:r1887_1 | +| ir.cpp:1887:9:1887:9 | Address | &:r1887_1 | +| ir.cpp:1887:9:1887:9 | Arg(this) | this:r1887_1 | +| ir.cpp:1887:9:1887:9 | ChiPartial | partial:m1887_7 | +| ir.cpp:1887:9:1887:9 | ChiTotal | total:m1886_2 | +| ir.cpp:1887:9:1887:9 | SideEffect | m1886_2 | +| ir.cpp:1887:11:1887:50 | CallTarget | func:r1887_2 | +| ir.cpp:1887:11:1887:50 | ChiPartial | partial:m1887_4 | +| ir.cpp:1887:11:1887:50 | ChiTotal | total:m1885_4 | +| ir.cpp:1887:11:1887:50 | SideEffect | ~m1885_4 | +| ir.cpp:1891:24:1891:24 | Address | &:r1891_3 | +| ir.cpp:1891:24:1891:24 | Address | &:r1891_3 | +| ir.cpp:1891:24:1891:24 | SideEffect | ~m1891_6 | +| ir.cpp:1891:24:1891:24 | SideEffect | ~m1891_6 | +| ir.cpp:1891:42:1891:43 | ChiPartial | partial:m1891_5 | +| ir.cpp:1891:42:1891:43 | ChiPartial | partial:m1891_5 | +| ir.cpp:1891:42:1891:43 | ChiTotal | total:m1891_2 | +| ir.cpp:1891:42:1891:43 | ChiTotal | total:m1891_2 | +| ir.cpp:1891:42:1891:43 | StoreValue | r1891_4 | +| ir.cpp:1891:42:1891:43 | StoreValue | r1891_4 | +| ir.cpp:1893:5:1893:28 | Address | &:r1893_5 | +| ir.cpp:1893:5:1893:28 | ChiPartial | partial:m1893_3 | +| ir.cpp:1893:5:1893:28 | ChiTotal | total:m1893_2 | +| ir.cpp:1893:5:1893:28 | Load | m1896_8 | +| ir.cpp:1893:5:1893:28 | SideEffect | m1893_3 | +| ir.cpp:1894:9:1894:17 | Address | &:r1894_1 | +| ir.cpp:1894:21:1894:40 | Address | &:r1894_2 | +| ir.cpp:1894:21:1894:40 | Load | ~m1893_3 | +| ir.cpp:1894:21:1894:40 | StoreValue | r1894_3 | +| ir.cpp:1895:10:1895:19 | Address | &:r1895_1 | +| ir.cpp:1895:23:1895:43 | Address | &:r1895_2 | +| ir.cpp:1895:23:1895:43 | Load | ~m1893_3 | +| ir.cpp:1895:23:1895:43 | StoreValue | r1895_3 | +| ir.cpp:1896:5:1896:39 | Address | &:r1896_1 | +| ir.cpp:1896:12:1896:20 | Address | &:r1896_2 | +| ir.cpp:1896:12:1896:20 | Left | r1896_3 | +| ir.cpp:1896:12:1896:20 | Load | m1894_4 | +| ir.cpp:1896:12:1896:38 | StoreValue | r1896_7 | +| ir.cpp:1896:24:1896:38 | Right | r1896_6 | +| ir.cpp:1896:29:1896:38 | Address | &:r1896_4 | +| ir.cpp:1896:29:1896:38 | Load | m1895_4 | +| ir.cpp:1896:29:1896:38 | Unary | r1896_5 | +| ir.cpp:1901:5:1901:16 | Address | &:r1901_7 | +| ir.cpp:1901:5:1901:16 | ChiPartial | partial:m1901_3 | +| ir.cpp:1901:5:1901:16 | ChiTotal | total:m1901_2 | +| ir.cpp:1901:5:1901:16 | Load | m1903_4 | +| ir.cpp:1901:5:1901:16 | SideEffect | m1901_3 | +| ir.cpp:1901:22:1901:22 | Address | &:r1901_5 | +| ir.cpp:1902:9:1902:9 | Address | &:r1902_1 | +| ir.cpp:1902:9:1902:9 | Left | r1902_2 | +| ir.cpp:1902:9:1902:9 | Load | m1901_6 | +| ir.cpp:1902:9:1902:14 | Condition | r1902_4 | +| ir.cpp:1902:13:1902:14 | Right | r1902_3 | +| ir.cpp:1903:9:1903:17 | Address | &:r1903_1 | +| ir.cpp:1903:16:1903:16 | Address | &:r1903_2 | +| ir.cpp:1903:16:1903:16 | Load | m1901_6 | +| ir.cpp:1903:16:1903:16 | StoreValue | r1903_3 | +| ir.cpp:1905:9:1905:20 | CallTarget | func:r1905_1 | +| ir.cpp:1905:9:1905:20 | ChiPartial | partial:m1905_3 | +| ir.cpp:1905:9:1905:20 | ChiTotal | total:m1901_4 | +| ir.cpp:1905:9:1905:20 | SideEffect | ~m1901_4 | +| ir.cpp:1909:5:1909:17 | Address | &:r1909_8 | +| ir.cpp:1909:5:1909:17 | ChiPartial | partial:m1909_3 | +| ir.cpp:1909:5:1909:17 | ChiTotal | total:m1909_2 | +| ir.cpp:1909:5:1909:17 | Load | m1913_4 | +| ir.cpp:1909:5:1909:17 | SideEffect | m1909_3 | +| ir.cpp:1909:23:1909:23 | Address | &:r1909_5 | +| ir.cpp:1910:9:1910:9 | Address | &:r1910_1 | +| ir.cpp:1910:9:1910:9 | Left | r1910_2 | +| ir.cpp:1910:9:1910:9 | Load | m1909_6 | +| ir.cpp:1910:9:1910:14 | Condition | r1910_4 | +| ir.cpp:1910:13:1910:14 | Right | r1910_3 | +| ir.cpp:1911:9:1911:20 | CallTarget | func:r1911_1 | +| ir.cpp:1911:9:1911:20 | ChiPartial | partial:m1911_3 | +| ir.cpp:1911:9:1911:20 | ChiTotal | total:m1909_4 | +| ir.cpp:1911:9:1911:20 | SideEffect | ~m1909_4 | +| ir.cpp:1913:5:1913:13 | Address | &:r1913_1 | +| ir.cpp:1913:12:1913:12 | Address | &:r1913_2 | +| ir.cpp:1913:12:1913:12 | Load | m1909_6 | +| ir.cpp:1913:12:1913:12 | StoreValue | r1913_3 | +| ir.cpp:1916:5:1916:19 | Address | &:r1916_7 | +| ir.cpp:1916:5:1916:19 | ChiPartial | partial:m1916_3 | +| ir.cpp:1916:5:1916:19 | ChiTotal | total:m1916_2 | +| ir.cpp:1916:5:1916:19 | Load | m1917_4 | +| ir.cpp:1916:5:1916:19 | SideEffect | m1916_3 | +| ir.cpp:1916:25:1916:25 | Address | &:r1916_5 | +| ir.cpp:1917:5:1917:13 | Address | &:r1917_1 | +| ir.cpp:1917:12:1917:12 | Address | &:r1917_2 | +| ir.cpp:1917:12:1917:12 | Load | m1916_6 | +| ir.cpp:1917:12:1917:12 | StoreValue | r1917_3 | +| ir.cpp:1920:6:1920:43 | ChiPartial | partial:m1920_3 | +| ir.cpp:1920:6:1920:43 | ChiTotal | total:m1920_2 | +| ir.cpp:1920:6:1920:43 | SideEffect | ~m1927_5 | +| ir.cpp:1921:7:1921:7 | Address | &:r1921_1 | +| ir.cpp:1921:7:1921:7 | Address | &:r1921_1 | +| ir.cpp:1921:7:1921:7 | Arg(this) | this:r1921_1 | +| ir.cpp:1921:7:1921:7 | CallTarget | func:r1921_3 | +| ir.cpp:1921:7:1921:7 | ChiPartial | partial:m1921_5 | +| ir.cpp:1921:7:1921:7 | ChiPartial | partial:m1921_7 | +| ir.cpp:1921:7:1921:7 | ChiTotal | total:m1920_4 | +| ir.cpp:1921:7:1921:7 | ChiTotal | total:m1921_2 | +| ir.cpp:1921:7:1921:7 | SideEffect | ~m1920_4 | | ir.cpp:1922:9:1922:9 | Address | &:r1922_1 | -| ir.cpp:1923:5:1923:5 | Address | &:r1923_6 | -| ir.cpp:1923:9:1923:31 | CallTarget | func:r1923_1 | -| ir.cpp:1923:9:1923:31 | ChiPartial | partial:m1923_4 | -| ir.cpp:1923:9:1923:31 | ChiTotal | total:m1921_6 | -| ir.cpp:1923:9:1923:31 | SideEffect | ~m1921_6 | -| ir.cpp:1923:9:1923:31 | StoreValue | r1923_3 | -| ir.cpp:1923:33:1923:34 | Arg(0) | 0:r1923_2 | +| ir.cpp:1923:5:1923:5 | Address | &:r1923_7 | +| ir.cpp:1923:11:1923:30 | CallTarget | func:r1923_2 | +| ir.cpp:1923:11:1923:30 | ChiPartial | partial:m1923_5 | +| ir.cpp:1923:11:1923:30 | ChiTotal | total:m1921_6 | +| ir.cpp:1923:11:1923:30 | SideEffect | ~m1921_6 | +| ir.cpp:1923:11:1923:30 | StoreValue | r1923_4 | +| ir.cpp:1923:32:1923:33 | Arg(0) | 0:r1923_3 | | ir.cpp:1924:9:1924:9 | Address | &:r1924_1 | | ir.cpp:1925:5:1925:5 | Address | &:r1925_6 | -| ir.cpp:1925:9:1925:23 | CallTarget | func:r1925_1 | -| ir.cpp:1925:9:1925:23 | ChiPartial | partial:m1925_4 | -| ir.cpp:1925:9:1925:23 | ChiTotal | total:m1923_5 | -| ir.cpp:1925:9:1925:23 | SideEffect | ~m1923_5 | -| ir.cpp:1925:9:1925:23 | StoreValue | r1925_3 | -| ir.cpp:1925:25:1925:26 | Arg(0) | 0:r1925_2 | -| ir.cpp:1928:6:1928:23 | ChiPartial | partial:m1928_3 | -| ir.cpp:1928:6:1928:23 | ChiTotal | total:m1928_2 | -| ir.cpp:1928:6:1928:23 | SideEffect | m1928_3 | -| ir.cpp:1929:7:1929:7 | Address | &:r1929_1 | -| ir.cpp:1929:10:1929:10 | Address | &:r1929_3 | -| ir.cpp:1930:3:1930:3 | Address | &:r1930_5 | -| ir.cpp:1930:7:1930:7 | Address | &:r1930_2 | -| ir.cpp:1930:7:1930:7 | Address | &:r1930_2 | -| ir.cpp:1930:7:1930:12 | Load | m1930_3 | -| ir.cpp:1930:7:1930:12 | StoreValue | r1930_4 | -| ir.cpp:1930:11:1930:12 | StoreValue | r1930_1 | -| ir.cpp:1933:6:1933:38 | ChiPartial | partial:m1933_3 | -| ir.cpp:1933:6:1933:38 | ChiTotal | total:m1933_2 | -| ir.cpp:1933:6:1933:38 | SideEffect | m1933_3 | -| ir.cpp:1934:7:1934:7 | Address | &:r1934_1 | -| ir.cpp:1934:10:1934:10 | Address | &:r1934_3 | -| ir.cpp:1934:13:1934:14 | StoreValue | r1934_4 | -| ir.cpp:1935:3:1935:3 | Address | &:r1935_7 | -| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 | -| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 | -| ir.cpp:1935:8:1935:8 | Address | &:r1935_2 | -| ir.cpp:1935:8:1935:8 | Left | r1935_3 | -| ir.cpp:1935:8:1935:8 | Load | m1934_5 | -| ir.cpp:1935:8:1935:14 | Load | m1935_5 | -| ir.cpp:1935:8:1935:14 | StoreValue | r1935_4 | -| ir.cpp:1935:8:1935:14 | StoreValue | r1935_6 | -| ir.cpp:1935:13:1935:14 | Right | r1935_1 | -| ir.cpp:1942:15:1942:43 | Address | &:r1942_5 | -| ir.cpp:1942:15:1942:43 | ChiPartial | partial:m1942_3 | -| ir.cpp:1942:15:1942:43 | ChiTotal | total:m1942_2 | -| ir.cpp:1942:15:1942:43 | Load | m1943_4 | -| ir.cpp:1942:15:1942:43 | SideEffect | m1942_3 | -| ir.cpp:1943:9:1943:17 | Address | &:r1943_1 | -| ir.cpp:1943:16:1943:16 | StoreValue | r1943_3 | -| ir.cpp:1943:16:1943:16 | Unary | r1943_2 | -| ir.cpp:1945:14:1945:39 | Address | &:r1945_5 | -| ir.cpp:1945:14:1945:39 | ChiPartial | partial:m1945_3 | -| ir.cpp:1945:14:1945:39 | ChiTotal | total:m1945_2 | -| ir.cpp:1945:14:1945:39 | Load | m1946_4 | -| ir.cpp:1945:14:1945:39 | SideEffect | m1945_3 | -| ir.cpp:1946:9:1946:17 | Address | &:r1946_1 | -| ir.cpp:1946:16:1946:16 | Address | &:r1946_2 | -| ir.cpp:1946:16:1946:16 | Load | ~m1945_3 | -| ir.cpp:1946:16:1946:16 | StoreValue | r1946_3 | -| ir.cpp:1950:6:1950:55 | ChiPartial | partial:m1950_3 | -| ir.cpp:1950:6:1950:55 | ChiTotal | total:m1950_2 | -| ir.cpp:1950:6:1950:55 | SideEffect | ~m1965_4 | -| ir.cpp:1951:7:1951:7 | Address | &:r1951_1 | -| ir.cpp:1953:7:1953:35 | CallTarget | func:r1953_2 | -| ir.cpp:1953:7:1953:35 | ChiPartial | partial:m1953_4 | -| ir.cpp:1953:7:1953:35 | ChiTotal | total:m1950_4 | -| ir.cpp:1953:7:1953:35 | SideEffect | ~m1950_4 | -| ir.cpp:1953:7:1953:35 | Unary | r1953_3 | -| ir.cpp:1954:5:1954:36 | CallTarget | func:r1954_1 | -| ir.cpp:1954:5:1954:36 | ChiPartial | partial:m1954_3 | -| ir.cpp:1954:5:1954:36 | ChiTotal | total:m1953_5 | -| ir.cpp:1954:5:1954:36 | SideEffect | ~m1953_5 | -| ir.cpp:1954:5:1954:36 | Unary | r1954_2 | -| ir.cpp:1955:7:1955:32 | CallTarget | func:r1955_2 | -| ir.cpp:1955:7:1955:32 | ChiPartial | partial:m1955_4 | -| ir.cpp:1955:7:1955:32 | ChiTotal | total:m1954_4 | -| ir.cpp:1955:7:1955:32 | SideEffect | ~m1954_4 | -| ir.cpp:1956:5:1956:33 | CallTarget | func:r1956_1 | -| ir.cpp:1956:5:1956:33 | ChiPartial | partial:m1956_3 | -| ir.cpp:1956:5:1956:33 | ChiTotal | total:m1955_5 | -| ir.cpp:1956:5:1956:33 | SideEffect | ~m1955_5 | -| ir.cpp:1958:7:1958:7 | Address | &:r1958_1 | -| ir.cpp:1959:5:1959:5 | Address | &:r1959_7 | -| ir.cpp:1959:11:1959:39 | Address | &:r1959_3 | -| ir.cpp:1959:11:1959:39 | CallTarget | func:r1959_2 | -| ir.cpp:1959:11:1959:39 | ChiPartial | partial:m1959_4 | -| ir.cpp:1959:11:1959:39 | ChiTotal | total:m1956_4 | -| ir.cpp:1959:11:1959:39 | SideEffect | ~m1956_4 | -| ir.cpp:1959:40:1959:42 | Load | ~m1959_5 | -| ir.cpp:1959:40:1959:42 | StoreValue | r1959_6 | +| ir.cpp:1925:9:1925:31 | CallTarget | func:r1925_1 | +| ir.cpp:1925:9:1925:31 | ChiPartial | partial:m1925_4 | +| ir.cpp:1925:9:1925:31 | ChiTotal | total:m1923_6 | +| ir.cpp:1925:9:1925:31 | SideEffect | ~m1923_6 | +| ir.cpp:1925:9:1925:31 | StoreValue | r1925_3 | +| ir.cpp:1925:33:1925:34 | Arg(0) | 0:r1925_2 | +| ir.cpp:1926:9:1926:9 | Address | &:r1926_1 | +| ir.cpp:1927:5:1927:5 | Address | &:r1927_6 | +| ir.cpp:1927:9:1927:23 | CallTarget | func:r1927_1 | +| ir.cpp:1927:9:1927:23 | ChiPartial | partial:m1927_4 | +| ir.cpp:1927:9:1927:23 | ChiTotal | total:m1925_5 | +| ir.cpp:1927:9:1927:23 | SideEffect | ~m1925_5 | +| ir.cpp:1927:9:1927:23 | StoreValue | r1927_3 | +| ir.cpp:1927:25:1927:26 | Arg(0) | 0:r1927_2 | +| ir.cpp:1930:6:1930:23 | ChiPartial | partial:m1930_3 | +| ir.cpp:1930:6:1930:23 | ChiTotal | total:m1930_2 | +| ir.cpp:1930:6:1930:23 | SideEffect | m1930_3 | +| ir.cpp:1931:7:1931:7 | Address | &:r1931_1 | +| ir.cpp:1931:10:1931:10 | Address | &:r1931_3 | +| ir.cpp:1932:3:1932:3 | Address | &:r1932_5 | +| ir.cpp:1932:7:1932:7 | Address | &:r1932_2 | +| ir.cpp:1932:7:1932:7 | Address | &:r1932_2 | +| ir.cpp:1932:7:1932:12 | Load | m1932_3 | +| ir.cpp:1932:7:1932:12 | StoreValue | r1932_4 | +| ir.cpp:1932:11:1932:12 | StoreValue | r1932_1 | +| ir.cpp:1935:6:1935:38 | ChiPartial | partial:m1935_3 | +| ir.cpp:1935:6:1935:38 | ChiTotal | total:m1935_2 | +| ir.cpp:1935:6:1935:38 | SideEffect | m1935_3 | +| ir.cpp:1936:7:1936:7 | Address | &:r1936_1 | +| ir.cpp:1936:10:1936:10 | Address | &:r1936_3 | +| ir.cpp:1936:13:1936:14 | StoreValue | r1936_4 | +| ir.cpp:1937:3:1937:3 | Address | &:r1937_7 | +| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | +| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | +| ir.cpp:1937:8:1937:8 | Address | &:r1937_2 | +| ir.cpp:1937:8:1937:8 | Left | r1937_3 | +| ir.cpp:1937:8:1937:8 | Load | m1936_5 | +| ir.cpp:1937:8:1937:14 | Load | m1937_5 | +| ir.cpp:1937:8:1937:14 | StoreValue | r1937_4 | +| ir.cpp:1937:8:1937:14 | StoreValue | r1937_6 | +| ir.cpp:1937:13:1937:14 | Right | r1937_1 | +| ir.cpp:1944:15:1944:43 | Address | &:r1944_5 | +| ir.cpp:1944:15:1944:43 | ChiPartial | partial:m1944_3 | +| ir.cpp:1944:15:1944:43 | ChiTotal | total:m1944_2 | +| ir.cpp:1944:15:1944:43 | Load | m1945_4 | +| ir.cpp:1944:15:1944:43 | SideEffect | m1944_3 | +| ir.cpp:1945:9:1945:17 | Address | &:r1945_1 | +| ir.cpp:1945:16:1945:16 | StoreValue | r1945_3 | +| ir.cpp:1945:16:1945:16 | Unary | r1945_2 | +| ir.cpp:1947:14:1947:39 | Address | &:r1947_5 | +| ir.cpp:1947:14:1947:39 | ChiPartial | partial:m1947_3 | +| ir.cpp:1947:14:1947:39 | ChiTotal | total:m1947_2 | +| ir.cpp:1947:14:1947:39 | Load | m1948_4 | +| ir.cpp:1947:14:1947:39 | SideEffect | m1947_3 | +| ir.cpp:1948:9:1948:17 | Address | &:r1948_1 | +| ir.cpp:1948:16:1948:16 | Address | &:r1948_2 | +| ir.cpp:1948:16:1948:16 | Load | ~m1947_3 | +| ir.cpp:1948:16:1948:16 | StoreValue | r1948_3 | +| ir.cpp:1952:6:1952:55 | ChiPartial | partial:m1952_3 | +| ir.cpp:1952:6:1952:55 | ChiTotal | total:m1952_2 | +| ir.cpp:1952:6:1952:55 | SideEffect | ~m1967_4 | +| ir.cpp:1953:7:1953:7 | Address | &:r1953_1 | +| ir.cpp:1955:7:1955:35 | CallTarget | func:r1955_2 | +| ir.cpp:1955:7:1955:35 | ChiPartial | partial:m1955_4 | +| ir.cpp:1955:7:1955:35 | ChiTotal | total:m1952_4 | +| ir.cpp:1955:7:1955:35 | SideEffect | ~m1952_4 | +| ir.cpp:1955:7:1955:35 | Unary | r1955_3 | +| ir.cpp:1956:5:1956:36 | CallTarget | func:r1956_1 | +| ir.cpp:1956:5:1956:36 | ChiPartial | partial:m1956_3 | +| ir.cpp:1956:5:1956:36 | ChiTotal | total:m1955_5 | +| ir.cpp:1956:5:1956:36 | SideEffect | ~m1955_5 | +| ir.cpp:1956:5:1956:36 | Unary | r1956_2 | +| ir.cpp:1957:7:1957:32 | CallTarget | func:r1957_2 | +| ir.cpp:1957:7:1957:32 | ChiPartial | partial:m1957_4 | +| ir.cpp:1957:7:1957:32 | ChiTotal | total:m1956_4 | +| ir.cpp:1957:7:1957:32 | SideEffect | ~m1956_4 | +| ir.cpp:1958:5:1958:33 | CallTarget | func:r1958_1 | +| ir.cpp:1958:5:1958:33 | ChiPartial | partial:m1958_3 | +| ir.cpp:1958:5:1958:33 | ChiTotal | total:m1957_5 | +| ir.cpp:1958:5:1958:33 | SideEffect | ~m1957_5 | | ir.cpp:1960:7:1960:7 | Address | &:r1960_1 | -| ir.cpp:1961:5:1961:5 | Address | &:r1961_6 | -| ir.cpp:1961:9:1961:40 | Address | &:r1961_2 | -| ir.cpp:1961:9:1961:40 | CallTarget | func:r1961_1 | -| ir.cpp:1961:9:1961:40 | ChiPartial | partial:m1961_3 | -| ir.cpp:1961:9:1961:40 | ChiTotal | total:m1959_5 | -| ir.cpp:1961:9:1961:40 | SideEffect | ~m1959_5 | -| ir.cpp:1961:41:1961:43 | Load | ~m1961_4 | -| ir.cpp:1961:41:1961:43 | StoreValue | r1961_5 | +| ir.cpp:1961:5:1961:5 | Address | &:r1961_7 | +| ir.cpp:1961:11:1961:39 | Address | &:r1961_3 | +| ir.cpp:1961:11:1961:39 | CallTarget | func:r1961_2 | +| ir.cpp:1961:11:1961:39 | ChiPartial | partial:m1961_4 | +| ir.cpp:1961:11:1961:39 | ChiTotal | total:m1958_4 | +| ir.cpp:1961:11:1961:39 | SideEffect | ~m1958_4 | +| ir.cpp:1961:40:1961:42 | Load | ~m1961_5 | +| ir.cpp:1961:40:1961:42 | StoreValue | r1961_6 | | ir.cpp:1962:7:1962:7 | Address | &:r1962_1 | | ir.cpp:1963:5:1963:5 | Address | &:r1963_6 | -| ir.cpp:1963:11:1963:36 | CallTarget | func:r1963_2 | -| ir.cpp:1963:11:1963:36 | ChiPartial | partial:m1963_4 | -| ir.cpp:1963:11:1963:36 | ChiTotal | total:m1961_4 | -| ir.cpp:1963:11:1963:36 | SideEffect | ~m1961_4 | -| ir.cpp:1963:11:1963:36 | StoreValue | r1963_3 | +| ir.cpp:1963:9:1963:40 | Address | &:r1963_2 | +| ir.cpp:1963:9:1963:40 | CallTarget | func:r1963_1 | +| ir.cpp:1963:9:1963:40 | ChiPartial | partial:m1963_3 | +| ir.cpp:1963:9:1963:40 | ChiTotal | total:m1961_5 | +| ir.cpp:1963:9:1963:40 | SideEffect | ~m1961_5 | +| ir.cpp:1963:41:1963:43 | Load | ~m1963_4 | +| ir.cpp:1963:41:1963:43 | StoreValue | r1963_5 | | ir.cpp:1964:7:1964:7 | Address | &:r1964_1 | -| ir.cpp:1965:5:1965:5 | Address | &:r1965_5 | -| ir.cpp:1965:9:1965:37 | CallTarget | func:r1965_1 | -| ir.cpp:1965:9:1965:37 | ChiPartial | partial:m1965_3 | -| ir.cpp:1965:9:1965:37 | ChiTotal | total:m1963_5 | -| ir.cpp:1965:9:1965:37 | SideEffect | ~m1963_5 | -| ir.cpp:1965:9:1965:37 | StoreValue | r1965_2 | -| ir.cpp:1968:6:1968:18 | ChiPartial | partial:m1968_3 | -| ir.cpp:1968:6:1968:18 | ChiTotal | total:m1968_2 | -| ir.cpp:1968:6:1968:18 | SideEffect | m1968_3 | -| ir.cpp:1969:18:1969:18 | Address | &:r1969_1 | -| ir.cpp:1970:5:1970:5 | Address | &:r1970_1 | -| ir.cpp:1970:5:1970:5 | Load | m1969_2 | -| ir.cpp:1979:6:1979:24 | ChiPartial | partial:m1979_3 | -| ir.cpp:1979:6:1979:24 | ChiTotal | total:m1979_2 | -| ir.cpp:1979:6:1979:24 | SideEffect | ~m1987_5 | -| ir.cpp:1980:12:1980:12 | Address | &:r1980_1 | -| ir.cpp:1982:5:1982:19 | ChiPartial | partial:m1982_7 | -| ir.cpp:1982:5:1982:19 | ChiTotal | total:m1982_5 | -| ir.cpp:1982:7:1982:12 | CallTarget | func:r1982_2 | -| ir.cpp:1982:7:1982:12 | ChiPartial | partial:m1982_4 | -| ir.cpp:1982:7:1982:12 | ChiTotal | total:m1979_4 | -| ir.cpp:1982:7:1982:12 | SideEffect | ~m1979_4 | -| ir.cpp:1982:7:1982:12 | Unary | r1982_3 | -| ir.cpp:1982:13:1982:16 | Address | &:r1982_6 | -| ir.cpp:1983:5:1983:19 | ChiPartial | partial:m1983_7 | -| ir.cpp:1983:5:1983:19 | ChiTotal | total:m1983_5 | -| ir.cpp:1983:7:1983:12 | CallTarget | func:r1983_2 | -| ir.cpp:1983:7:1983:12 | ChiPartial | partial:m1983_4 | -| ir.cpp:1983:7:1983:12 | ChiTotal | total:m1982_8 | -| ir.cpp:1983:7:1983:12 | SideEffect | ~m1982_8 | -| ir.cpp:1983:7:1983:12 | Unary | r1983_3 | -| ir.cpp:1983:13:1983:16 | Address | &:r1983_6 | -| ir.cpp:1984:5:1984:15 | Address | &:r1984_1 | -| ir.cpp:1984:5:1984:15 | Address | &:r1984_1 | -| ir.cpp:1984:7:1984:13 | CallTarget | func:r1984_3 | -| ir.cpp:1984:7:1984:13 | ChiPartial | partial:m1984_5 | -| ir.cpp:1984:7:1984:13 | ChiTotal | total:m1983_8 | -| ir.cpp:1984:7:1984:13 | SideEffect | ~m1983_8 | -| ir.cpp:1984:7:1984:13 | StoreValue | r1984_4 | -| ir.cpp:1985:5:1985:18 | CallTarget | func:r1985_1 | -| ir.cpp:1985:5:1985:18 | ChiPartial | partial:m1985_3 | -| ir.cpp:1985:5:1985:18 | ChiTotal | total:m1984_6 | -| ir.cpp:1985:5:1985:18 | SideEffect | ~m1984_6 | -| ir.cpp:1985:5:1985:18 | Unary | r1985_2 | -| ir.cpp:1985:5:1985:25 | ChiPartial | partial:m1985_6 | -| ir.cpp:1985:5:1985:25 | ChiTotal | total:m1985_4 | -| ir.cpp:1985:19:1985:22 | Address | &:r1985_5 | -| ir.cpp:1986:5:1986:18 | CallTarget | func:r1986_1 | -| ir.cpp:1986:5:1986:18 | ChiPartial | partial:m1986_3 | -| ir.cpp:1986:5:1986:18 | ChiTotal | total:m1985_7 | -| ir.cpp:1986:5:1986:18 | SideEffect | ~m1985_7 | -| ir.cpp:1986:5:1986:18 | Unary | r1986_2 | -| ir.cpp:1986:5:1986:25 | ChiPartial | partial:m1986_6 | -| ir.cpp:1986:5:1986:25 | ChiTotal | total:m1986_4 | -| ir.cpp:1986:19:1986:22 | Address | &:r1986_5 | -| ir.cpp:1987:5:1987:19 | CallTarget | func:r1987_2 | -| ir.cpp:1987:5:1987:19 | ChiPartial | partial:m1987_4 | -| ir.cpp:1987:5:1987:19 | ChiTotal | total:m1986_7 | -| ir.cpp:1987:5:1987:19 | SideEffect | ~m1986_7 | -| ir.cpp:1987:5:1987:19 | StoreValue | r1987_3 | -| ir.cpp:1987:5:1987:21 | Address | &:r1987_1 | -| ir.cpp:1987:5:1987:21 | Address | &:r1987_1 | -| ir.cpp:1990:6:1990:21 | ChiPartial | partial:m1990_3 | -| ir.cpp:1990:6:1990:21 | ChiTotal | total:m1990_2 | -| ir.cpp:1990:6:1990:21 | SideEffect | ~m1991_6 | -| ir.cpp:1991:7:1991:7 | Address | &:r1991_1 | -| ir.cpp:1991:7:1991:7 | Address | &:r1991_1 | -| ir.cpp:1991:7:1991:7 | Arg(this) | this:r1991_1 | -| ir.cpp:1991:7:1991:7 | CallTarget | func:r1991_3 | -| ir.cpp:1991:7:1991:7 | ChiPartial | partial:m1991_5 | -| ir.cpp:1991:7:1991:7 | ChiPartial | partial:m1991_7 | -| ir.cpp:1991:7:1991:7 | ChiTotal | total:m1990_4 | -| ir.cpp:1991:7:1991:7 | ChiTotal | total:m1991_2 | -| ir.cpp:1991:7:1991:7 | SideEffect | ~m1990_4 | -| ir.cpp:1992:11:1992:13 | Address | &:r1992_1 | -| ir.cpp:1992:23:1992:45 | StoreValue | r1992_2 | -| ir.cpp:1993:5:1993:7 | Address | &:r1993_3 | -| ir.cpp:1993:13:1993:32 | StoreValue | r1993_2 | -| ir.cpp:1996:6:1996:19 | ChiPartial | partial:m1996_3 | -| ir.cpp:1996:6:1996:19 | ChiTotal | total:m1996_2 | -| ir.cpp:1996:6:1996:19 | SideEffect | ~m2000_9 | -| ir.cpp:1996:26:1996:26 | Address | &:r1996_5 | -| ir.cpp:1996:33:1996:33 | Address | &:r1996_7 | -| ir.cpp:1996:40:1996:40 | Address | &:r1996_9 | -| ir.cpp:1996:47:1996:47 | Address | &:r1996_11 | -| ir.cpp:1997:5:1997:5 | Address | &:r1997_7 | -| ir.cpp:1997:9:1997:9 | Address | &:r1997_1 | -| ir.cpp:1997:9:1997:9 | Condition | r1997_2 | -| ir.cpp:1997:9:1997:9 | Load | m1996_6 | -| ir.cpp:1997:9:1997:17 | Address | &:r1997_5 | -| ir.cpp:1997:9:1997:17 | Address | &:r1997_11 | -| ir.cpp:1997:9:1997:17 | Address | &:r1997_15 | -| ir.cpp:1997:9:1997:17 | Load | m1997_4 | -| ir.cpp:1997:9:1997:17 | Phi | from 2:m1997_12 | -| ir.cpp:1997:9:1997:17 | Phi | from 3:m1997_16 | -| ir.cpp:1997:9:1997:17 | StoreValue | r1997_6 | -| ir.cpp:1997:13:1997:13 | Address | &:r1997_9 | -| ir.cpp:1997:13:1997:13 | Load | m1996_8 | -| ir.cpp:1997:13:1997:13 | StoreValue | r1997_10 | -| ir.cpp:1997:17:1997:17 | Address | &:r1997_13 | -| ir.cpp:1997:17:1997:17 | Load | m1996_10 | -| ir.cpp:1997:17:1997:17 | StoreValue | r1997_14 | -| ir.cpp:1998:5:1998:5 | Address | &:r1998_7 | -| ir.cpp:1998:9:1998:9 | Address | &:r1998_1 | -| ir.cpp:1998:9:1998:9 | Condition | r1998_2 | -| ir.cpp:1998:9:1998:9 | Load | m1996_6 | -| ir.cpp:1998:9:1998:17 | Address | &:r1998_5 | -| ir.cpp:1998:9:1998:17 | Address | &:r1998_11 | -| ir.cpp:1998:9:1998:17 | Address | &:r1998_14 | -| ir.cpp:1998:9:1998:17 | Load | m1998_4 | -| ir.cpp:1998:9:1998:17 | Phi | from 5:m1998_12 | -| ir.cpp:1998:9:1998:17 | Phi | from 6:m1998_15 | -| ir.cpp:1998:9:1998:17 | StoreValue | r1998_6 | -| ir.cpp:1998:13:1998:13 | Address | &:r1998_9 | -| ir.cpp:1998:13:1998:13 | Load | m1996_8 | -| ir.cpp:1998:13:1998:13 | StoreValue | r1998_10 | -| ir.cpp:1998:17:1998:17 | StoreValue | r1998_13 | +| ir.cpp:1965:5:1965:5 | Address | &:r1965_6 | +| ir.cpp:1965:11:1965:36 | CallTarget | func:r1965_2 | +| ir.cpp:1965:11:1965:36 | ChiPartial | partial:m1965_4 | +| ir.cpp:1965:11:1965:36 | ChiTotal | total:m1963_4 | +| ir.cpp:1965:11:1965:36 | SideEffect | ~m1963_4 | +| ir.cpp:1965:11:1965:36 | StoreValue | r1965_3 | +| ir.cpp:1966:7:1966:7 | Address | &:r1966_1 | +| ir.cpp:1967:5:1967:5 | Address | &:r1967_5 | +| ir.cpp:1967:9:1967:37 | CallTarget | func:r1967_1 | +| ir.cpp:1967:9:1967:37 | ChiPartial | partial:m1967_3 | +| ir.cpp:1967:9:1967:37 | ChiTotal | total:m1965_5 | +| ir.cpp:1967:9:1967:37 | SideEffect | ~m1965_5 | +| ir.cpp:1967:9:1967:37 | StoreValue | r1967_2 | +| ir.cpp:1970:6:1970:18 | ChiPartial | partial:m1970_3 | +| ir.cpp:1970:6:1970:18 | ChiTotal | total:m1970_2 | +| ir.cpp:1970:6:1970:18 | SideEffect | m1970_3 | +| ir.cpp:1971:18:1971:18 | Address | &:r1971_1 | +| ir.cpp:1972:5:1972:5 | Address | &:r1972_1 | +| ir.cpp:1972:5:1972:5 | Load | m1971_2 | +| ir.cpp:1981:6:1981:24 | ChiPartial | partial:m1981_3 | +| ir.cpp:1981:6:1981:24 | ChiTotal | total:m1981_2 | +| ir.cpp:1981:6:1981:24 | SideEffect | ~m1989_5 | +| ir.cpp:1982:12:1982:12 | Address | &:r1982_1 | +| ir.cpp:1984:5:1984:19 | ChiPartial | partial:m1984_7 | +| ir.cpp:1984:5:1984:19 | ChiTotal | total:m1984_5 | +| ir.cpp:1984:7:1984:12 | CallTarget | func:r1984_2 | +| ir.cpp:1984:7:1984:12 | ChiPartial | partial:m1984_4 | +| ir.cpp:1984:7:1984:12 | ChiTotal | total:m1981_4 | +| ir.cpp:1984:7:1984:12 | SideEffect | ~m1981_4 | +| ir.cpp:1984:7:1984:12 | Unary | r1984_3 | +| ir.cpp:1984:13:1984:16 | Address | &:r1984_6 | +| ir.cpp:1985:5:1985:19 | ChiPartial | partial:m1985_7 | +| ir.cpp:1985:5:1985:19 | ChiTotal | total:m1985_5 | +| ir.cpp:1985:7:1985:12 | CallTarget | func:r1985_2 | +| ir.cpp:1985:7:1985:12 | ChiPartial | partial:m1985_4 | +| ir.cpp:1985:7:1985:12 | ChiTotal | total:m1984_8 | +| ir.cpp:1985:7:1985:12 | SideEffect | ~m1984_8 | +| ir.cpp:1985:7:1985:12 | Unary | r1985_3 | +| ir.cpp:1985:13:1985:16 | Address | &:r1985_6 | +| ir.cpp:1986:5:1986:15 | Address | &:r1986_1 | +| ir.cpp:1986:5:1986:15 | Address | &:r1986_1 | +| ir.cpp:1986:7:1986:13 | CallTarget | func:r1986_3 | +| ir.cpp:1986:7:1986:13 | ChiPartial | partial:m1986_5 | +| ir.cpp:1986:7:1986:13 | ChiTotal | total:m1985_8 | +| ir.cpp:1986:7:1986:13 | SideEffect | ~m1985_8 | +| ir.cpp:1986:7:1986:13 | StoreValue | r1986_4 | +| ir.cpp:1987:5:1987:18 | CallTarget | func:r1987_1 | +| ir.cpp:1987:5:1987:18 | ChiPartial | partial:m1987_3 | +| ir.cpp:1987:5:1987:18 | ChiTotal | total:m1986_6 | +| ir.cpp:1987:5:1987:18 | SideEffect | ~m1986_6 | +| ir.cpp:1987:5:1987:18 | Unary | r1987_2 | +| ir.cpp:1987:5:1987:25 | ChiPartial | partial:m1987_6 | +| ir.cpp:1987:5:1987:25 | ChiTotal | total:m1987_4 | +| ir.cpp:1987:19:1987:22 | Address | &:r1987_5 | +| ir.cpp:1988:5:1988:18 | CallTarget | func:r1988_1 | +| ir.cpp:1988:5:1988:18 | ChiPartial | partial:m1988_3 | +| ir.cpp:1988:5:1988:18 | ChiTotal | total:m1987_7 | +| ir.cpp:1988:5:1988:18 | SideEffect | ~m1987_7 | +| ir.cpp:1988:5:1988:18 | Unary | r1988_2 | +| ir.cpp:1988:5:1988:25 | ChiPartial | partial:m1988_6 | +| ir.cpp:1988:5:1988:25 | ChiTotal | total:m1988_4 | +| ir.cpp:1988:19:1988:22 | Address | &:r1988_5 | +| ir.cpp:1989:5:1989:19 | CallTarget | func:r1989_2 | +| ir.cpp:1989:5:1989:19 | ChiPartial | partial:m1989_4 | +| ir.cpp:1989:5:1989:19 | ChiTotal | total:m1988_7 | +| ir.cpp:1989:5:1989:19 | SideEffect | ~m1988_7 | +| ir.cpp:1989:5:1989:19 | StoreValue | r1989_3 | +| ir.cpp:1989:5:1989:21 | Address | &:r1989_1 | +| ir.cpp:1989:5:1989:21 | Address | &:r1989_1 | +| ir.cpp:1992:6:1992:21 | ChiPartial | partial:m1992_3 | +| ir.cpp:1992:6:1992:21 | ChiTotal | total:m1992_2 | +| ir.cpp:1992:6:1992:21 | SideEffect | ~m1993_6 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_1 | +| ir.cpp:1993:7:1993:7 | Address | &:r1993_1 | +| ir.cpp:1993:7:1993:7 | Arg(this) | this:r1993_1 | +| ir.cpp:1993:7:1993:7 | CallTarget | func:r1993_3 | +| ir.cpp:1993:7:1993:7 | ChiPartial | partial:m1993_5 | +| ir.cpp:1993:7:1993:7 | ChiPartial | partial:m1993_7 | +| ir.cpp:1993:7:1993:7 | ChiTotal | total:m1992_4 | +| ir.cpp:1993:7:1993:7 | ChiTotal | total:m1993_2 | +| ir.cpp:1993:7:1993:7 | SideEffect | ~m1992_4 | +| ir.cpp:1994:11:1994:13 | Address | &:r1994_1 | +| ir.cpp:1994:23:1994:45 | StoreValue | r1994_2 | +| ir.cpp:1995:5:1995:7 | Address | &:r1995_3 | +| ir.cpp:1995:13:1995:32 | StoreValue | r1995_2 | +| ir.cpp:1998:6:1998:19 | ChiPartial | partial:m1998_3 | +| ir.cpp:1998:6:1998:19 | ChiTotal | total:m1998_2 | +| ir.cpp:1998:6:1998:19 | SideEffect | ~m2002_9 | +| ir.cpp:1998:26:1998:26 | Address | &:r1998_5 | +| ir.cpp:1998:33:1998:33 | Address | &:r1998_7 | +| ir.cpp:1998:40:1998:40 | Address | &:r1998_9 | +| ir.cpp:1998:47:1998:47 | Address | &:r1998_11 | | ir.cpp:1999:5:1999:5 | Address | &:r1999_7 | | ir.cpp:1999:9:1999:9 | Address | &:r1999_1 | | ir.cpp:1999:9:1999:9 | Condition | r1999_2 | -| ir.cpp:1999:9:1999:9 | Load | m1996_6 | +| ir.cpp:1999:9:1999:9 | Load | m1998_6 | | ir.cpp:1999:9:1999:17 | Address | &:r1999_5 | -| ir.cpp:1999:9:1999:17 | Address | &:r1999_10 | -| ir.cpp:1999:9:1999:17 | Address | &:r1999_13 | +| ir.cpp:1999:9:1999:17 | Address | &:r1999_11 | +| ir.cpp:1999:9:1999:17 | Address | &:r1999_15 | | ir.cpp:1999:9:1999:17 | Load | m1999_4 | -| ir.cpp:1999:9:1999:17 | Phi | from 8:m1999_11 | -| ir.cpp:1999:9:1999:17 | Phi | from 9:m1999_14 | +| ir.cpp:1999:9:1999:17 | Phi | from 2:m1999_12 | +| ir.cpp:1999:9:1999:17 | Phi | from 3:m1999_16 | | ir.cpp:1999:9:1999:17 | StoreValue | r1999_6 | -| ir.cpp:1999:13:1999:13 | StoreValue | r1999_9 | -| ir.cpp:1999:17:1999:17 | StoreValue | r1999_12 | -| ir.cpp:2000:5:2000:19 | ChiPartial | partial:m2000_8 | -| ir.cpp:2000:5:2000:19 | ChiTotal | total:m1996_4 | -| ir.cpp:2000:6:2000:6 | Address | &:r2000_2 | -| ir.cpp:2000:6:2000:6 | Condition | r2000_3 | -| ir.cpp:2000:6:2000:6 | Load | m1996_6 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_6 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_7 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_11 | -| ir.cpp:2000:6:2000:14 | Address | &:r2000_14 | -| ir.cpp:2000:6:2000:14 | Load | m2000_5 | -| ir.cpp:2000:6:2000:14 | Phi | from 11:m2000_12 | -| ir.cpp:2000:6:2000:14 | Phi | from 12:m2000_15 | -| ir.cpp:2000:10:2000:10 | StoreValue | r2000_10 | -| ir.cpp:2000:14:2000:14 | StoreValue | r2000_13 | -| ir.cpp:2000:19:2000:19 | StoreValue | r2000_1 | -| ir.cpp:2006:6:2006:22 | ChiPartial | partial:m2006_3 | -| ir.cpp:2006:6:2006:22 | ChiTotal | total:m2006_2 | -| ir.cpp:2006:6:2006:22 | SideEffect | m2006_3 | -| ir.cpp:2006:29:2006:29 | Address | &:r2006_5 | -| ir.cpp:2006:46:2006:46 | Address | &:r2006_7 | -| ir.cpp:2006:63:2006:63 | Address | &:r2006_9 | -| ir.cpp:2006:80:2006:80 | Address | &:r2006_11 | -| ir.cpp:2007:5:2007:5 | Address | &:r2007_7 | -| ir.cpp:2007:9:2007:9 | Address | &:r2007_1 | -| ir.cpp:2007:9:2007:9 | Condition | r2007_2 | -| ir.cpp:2007:9:2007:9 | Load | m2006_6 | -| ir.cpp:2007:9:2007:17 | Address | &:r2007_5 | -| ir.cpp:2007:9:2007:17 | Address | &:r2007_11 | -| ir.cpp:2007:9:2007:17 | Address | &:r2007_15 | -| ir.cpp:2007:9:2007:17 | Load | m2007_4 | -| ir.cpp:2007:9:2007:17 | Phi | from 2:m2007_12 | -| ir.cpp:2007:9:2007:17 | Phi | from 3:m2007_16 | -| ir.cpp:2007:9:2007:17 | StoreValue | r2007_6 | -| ir.cpp:2007:13:2007:13 | Address | &:r2007_9 | -| ir.cpp:2007:13:2007:13 | Load | m2006_8 | -| ir.cpp:2007:13:2007:13 | StoreValue | r2007_10 | -| ir.cpp:2007:17:2007:17 | Address | &:r2007_13 | -| ir.cpp:2007:17:2007:17 | Load | m2006_10 | -| ir.cpp:2007:17:2007:17 | StoreValue | r2007_14 | -| ir.cpp:2008:5:2008:5 | Address | &:r2008_10 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_2 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_6 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_17 | -| ir.cpp:2008:9:2008:9 | Address | &:r2008_23 | -| ir.cpp:2008:9:2008:9 | Condition | r2008_3 | -| ir.cpp:2008:9:2008:9 | Load | m2006_6 | -| ir.cpp:2008:9:2008:9 | Load | m2008_5 | -| ir.cpp:2008:9:2008:9 | Phi | from 5:m2008_18 | -| ir.cpp:2008:9:2008:9 | Phi | from 6:m2008_24 | -| ir.cpp:2008:9:2008:9 | StoreValue | r2008_7 | -| ir.cpp:2008:9:2008:31 | Address | &:r2008_1 | -| ir.cpp:2008:9:2008:31 | Address | &:r2008_1 | -| ir.cpp:2008:9:2008:31 | Load | m2008_8 | -| ir.cpp:2008:9:2008:31 | StoreValue | r2008_9 | -| ir.cpp:2008:13:2008:13 | Address | &:r2008_12 | -| ir.cpp:2008:13:2008:13 | Address | &:r2008_12 | -| ir.cpp:2008:13:2008:13 | Address | &:r2008_13 | -| ir.cpp:2008:13:2008:13 | Load | m2006_8 | -| ir.cpp:2008:13:2008:13 | Load | m2008_15 | -| ir.cpp:2008:13:2008:13 | StoreValue | r2008_14 | -| ir.cpp:2008:13:2008:13 | StoreValue | r2008_16 | -| ir.cpp:2008:17:2008:31 | Address | &:r2008_19 | -| ir.cpp:2008:17:2008:31 | Address | &:r2008_19 | -| ir.cpp:2008:17:2008:31 | Load | m2008_21 | -| ir.cpp:2008:17:2008:31 | StoreValue | r2008_20 | -| ir.cpp:2008:17:2008:31 | StoreValue | r2008_22 | -| ir.cpp:2009:5:2009:5 | Address | &:r2009_10 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_2 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_6 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_16 | -| ir.cpp:2009:9:2009:9 | Address | &:r2009_22 | -| ir.cpp:2009:9:2009:9 | Condition | r2009_3 | -| ir.cpp:2009:9:2009:9 | Load | m2006_6 | -| ir.cpp:2009:9:2009:9 | Load | m2009_5 | -| ir.cpp:2009:9:2009:9 | Phi | from 8:m2009_17 | -| ir.cpp:2009:9:2009:9 | Phi | from 9:m2009_23 | -| ir.cpp:2009:9:2009:9 | StoreValue | r2009_7 | -| ir.cpp:2009:9:2009:45 | Address | &:r2009_1 | -| ir.cpp:2009:9:2009:45 | Address | &:r2009_1 | -| ir.cpp:2009:9:2009:45 | Load | m2009_8 | -| ir.cpp:2009:9:2009:45 | StoreValue | r2009_9 | -| ir.cpp:2009:13:2009:27 | Address | &:r2009_12 | -| ir.cpp:2009:13:2009:27 | Address | &:r2009_12 | -| ir.cpp:2009:13:2009:27 | Load | m2009_14 | -| ir.cpp:2009:13:2009:27 | StoreValue | r2009_13 | -| ir.cpp:2009:13:2009:27 | StoreValue | r2009_15 | -| ir.cpp:2009:31:2009:45 | Address | &:r2009_18 | -| ir.cpp:2009:31:2009:45 | Address | &:r2009_18 | -| ir.cpp:2009:31:2009:45 | Load | m2009_20 | -| ir.cpp:2009:31:2009:45 | StoreValue | r2009_19 | -| ir.cpp:2009:31:2009:45 | StoreValue | r2009_21 | -| ir.cpp:2010:6:2010:6 | Address | &:r2010_11 | -| ir.cpp:2010:6:2010:6 | Unary | r2010_11 | -| ir.cpp:2010:6:2010:18 | Address | &:r2010_13 | -| ir.cpp:2010:10:2010:10 | Address | &:r2010_5 | -| ir.cpp:2010:10:2010:10 | Condition | r2010_6 | -| ir.cpp:2010:10:2010:10 | Load | m2006_6 | -| ir.cpp:2010:10:2010:18 | Address | &:r2010_9 | -| ir.cpp:2010:10:2010:18 | Address | &:r2010_17 | -| ir.cpp:2010:10:2010:18 | Address | &:r2010_21 | -| ir.cpp:2010:10:2010:18 | Load | m2010_8 | -| ir.cpp:2010:10:2010:18 | Phi | from 11:m2010_18 | -| ir.cpp:2010:10:2010:18 | Phi | from 12:m2010_22 | -| ir.cpp:2010:10:2010:18 | StoreValue | r2010_10 | -| ir.cpp:2010:14:2010:14 | Address | &:r2010_15 | -| ir.cpp:2010:14:2010:14 | Load | m2006_8 | -| ir.cpp:2010:14:2010:14 | StoreValue | r2010_16 | -| ir.cpp:2010:18:2010:18 | Address | &:r2010_19 | -| ir.cpp:2010:18:2010:18 | Load | m2006_10 | -| ir.cpp:2010:18:2010:18 | StoreValue | r2010_20 | -| ir.cpp:2010:23:2010:37 | Address | &:r2010_1 | -| ir.cpp:2010:23:2010:37 | Address | &:r2010_1 | -| ir.cpp:2010:23:2010:37 | Load | m2010_3 | -| ir.cpp:2010:23:2010:37 | StoreValue | r2010_2 | -| ir.cpp:2010:23:2010:37 | StoreValue | r2010_4 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_5 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_7 | -| ir.cpp:2013:8:2013:8 | Address | &:r2013_10 | -| ir.cpp:2013:8:2013:8 | ChiPartial | partial:m2013_3 | -| ir.cpp:2013:8:2013:8 | ChiPartial | partial:m2013_3 | -| ir.cpp:2013:8:2013:8 | ChiPartial | partial:m2013_3 | -| ir.cpp:2013:8:2013:8 | ChiTotal | total:m2013_2 | -| ir.cpp:2013:8:2013:8 | ChiTotal | total:m2013_2 | -| ir.cpp:2013:8:2013:8 | ChiTotal | total:m2013_2 | -| ir.cpp:2013:8:2013:8 | Load | m0_10 | -| ir.cpp:2013:8:2013:8 | Load | m2013_6 | -| ir.cpp:2013:8:2013:8 | Load | m2013_6 | -| ir.cpp:2013:8:2013:8 | Load | m2013_6 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_3 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_3 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_3 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_8 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_8 | -| ir.cpp:2013:8:2013:8 | SideEffect | m2013_8 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_5 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_5 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_7 | -| ir.cpp:2014:13:2014:29 | Address | &:r2014_7 | -| ir.cpp:2014:13:2014:29 | ChiPartial | partial:m2014_3 | -| ir.cpp:2014:13:2014:29 | ChiTotal | total:m2014_2 | -| ir.cpp:2014:13:2014:29 | Load | m2014_6 | -| ir.cpp:2014:13:2014:29 | SideEffect | m2014_3 | -| ir.cpp:2014:13:2014:29 | SideEffect | m2014_8 | -| ir.cpp:2017:6:2017:25 | ChiPartial | partial:m2017_3 | -| ir.cpp:2017:6:2017:25 | ChiTotal | total:m2017_2 | -| ir.cpp:2017:6:2017:25 | SideEffect | ~m2021_32 | -| ir.cpp:2017:32:2017:32 | Address | &:r2017_5 | -| ir.cpp:2017:52:2017:52 | Address | &:r2017_7 | -| ir.cpp:2017:72:2017:72 | Address | &:r2017_9 | -| ir.cpp:2017:92:2017:92 | Address | &:r2017_11 | -| ir.cpp:2018:5:2018:5 | Address | &:r2018_1 | -| ir.cpp:2018:5:2018:5 | Address | &:r2018_1 | -| ir.cpp:2018:5:2018:5 | Arg(this) | this:r2018_1 | -| ir.cpp:2018:5:2018:5 | ChiPartial | partial:m2018_16 | -| ir.cpp:2018:5:2018:5 | ChiTotal | total:m2017_12 | -| ir.cpp:2018:5:2018:5 | SideEffect | m2017_12 | -| ir.cpp:2018:7:2018:7 | CallTarget | func:r2018_2 | -| ir.cpp:2018:7:2018:7 | ChiPartial | partial:m2018_12 | -| ir.cpp:2018:7:2018:7 | ChiTotal | total:m2017_4 | -| ir.cpp:2018:7:2018:7 | SideEffect | ~m2017_4 | -| ir.cpp:2018:7:2018:7 | Unary | r2018_11 | -| ir.cpp:2018:9:2018:9 | Address | &:r2018_3 | -| ir.cpp:2018:9:2018:9 | Condition | r2018_4 | -| ir.cpp:2018:9:2018:9 | Load | m2017_6 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_7 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_10 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_20 | -| ir.cpp:2018:9:2018:17 | Address | &:r2018_23 | -| ir.cpp:2018:9:2018:17 | Arg(0) | 0:r2018_10 | -| ir.cpp:2018:9:2018:17 | Load | m2018_6 | -| ir.cpp:2018:9:2018:17 | Phi | from 2:m2018_21 | -| ir.cpp:2018:9:2018:17 | Phi | from 3:m2018_24 | -| ir.cpp:2018:9:2018:17 | SideEffect | ~m2018_13 | -| ir.cpp:2018:9:2018:17 | Unary | r2018_8 | -| ir.cpp:2018:9:2018:17 | Unary | r2018_9 | -| ir.cpp:2018:13:2018:13 | StoreValue | r2018_19 | -| ir.cpp:2018:17:2018:17 | StoreValue | r2018_22 | -| ir.cpp:2019:5:2019:5 | Address | &:r2019_1 | -| ir.cpp:2019:5:2019:5 | Address | &:r2019_1 | -| ir.cpp:2019:5:2019:5 | Arg(this) | this:r2019_1 | -| ir.cpp:2019:5:2019:5 | ChiPartial | partial:m2019_19 | -| ir.cpp:2019:5:2019:5 | ChiTotal | total:m2018_17 | -| ir.cpp:2019:5:2019:5 | SideEffect | m2018_17 | -| ir.cpp:2019:7:2019:7 | CallTarget | func:r2019_2 | -| ir.cpp:2019:7:2019:7 | ChiPartial | partial:m2019_15 | -| ir.cpp:2019:7:2019:7 | ChiTotal | total:m2019_7 | -| ir.cpp:2019:7:2019:7 | SideEffect | ~m2019_7 | -| ir.cpp:2019:7:2019:7 | Unary | r2019_14 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_4 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_9 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_35 | -| ir.cpp:2019:9:2019:9 | Address | &:r2019_46 | -| ir.cpp:2019:9:2019:9 | Condition | r2019_5 | -| ir.cpp:2019:9:2019:9 | Load | m2017_6 | -| ir.cpp:2019:9:2019:9 | Load | m2019_8 | -| ir.cpp:2019:9:2019:9 | Phi | from 5:m2019_36 | -| ir.cpp:2019:9:2019:9 | Phi | from 5:~m2019_30 | -| ir.cpp:2019:9:2019:9 | Phi | from 6:m2019_47 | -| ir.cpp:2019:9:2019:9 | Phi | from 6:~m2019_42 | -| ir.cpp:2019:9:2019:9 | StoreValue | r2019_10 | -| ir.cpp:2019:9:2019:34 | Address | &:r2019_3 | -| ir.cpp:2019:9:2019:34 | Address | &:r2019_13 | -| ir.cpp:2019:9:2019:34 | Arg(0) | 0:r2019_13 | -| ir.cpp:2019:9:2019:34 | SideEffect | ~m2019_11 | -| ir.cpp:2019:9:2019:34 | Unary | r2019_3 | -| ir.cpp:2019:9:2019:34 | Unary | r2019_12 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_22 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_22 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_22 | -| ir.cpp:2019:13:2019:13 | Address | &:r2019_27 | -| ir.cpp:2019:13:2019:13 | Arg(0) | 0:r2019_27 | -| ir.cpp:2019:13:2019:13 | Arg(this) | this:r2019_22 | -| ir.cpp:2019:13:2019:13 | CallTarget | func:r2019_24 | -| ir.cpp:2019:13:2019:13 | ChiPartial | partial:m2019_29 | -| ir.cpp:2019:13:2019:13 | ChiPartial | partial:m2019_32 | -| ir.cpp:2019:13:2019:13 | ChiTotal | total:m2018_13 | -| ir.cpp:2019:13:2019:13 | ChiTotal | total:m2019_23 | -| ir.cpp:2019:13:2019:13 | Load | m2019_33 | -| ir.cpp:2019:13:2019:13 | SideEffect | ~m2017_8 | -| ir.cpp:2019:13:2019:13 | SideEffect | ~m2018_13 | -| ir.cpp:2019:13:2019:13 | StoreValue | r2019_34 | -| ir.cpp:2019:13:2019:13 | Unary | r2019_25 | -| ir.cpp:2019:13:2019:13 | Unary | r2019_26 | -| ir.cpp:2019:17:2019:34 | Address | &:r2019_37 | -| ir.cpp:2019:17:2019:34 | Address | &:r2019_37 | -| ir.cpp:2019:17:2019:34 | Address | &:r2019_37 | -| ir.cpp:2019:17:2019:34 | Arg(this) | this:r2019_37 | -| ir.cpp:2019:17:2019:34 | CallTarget | func:r2019_39 | -| ir.cpp:2019:17:2019:34 | ChiPartial | partial:m2019_41 | -| ir.cpp:2019:17:2019:34 | ChiPartial | partial:m2019_43 | -| ir.cpp:2019:17:2019:34 | ChiTotal | total:m2018_13 | -| ir.cpp:2019:17:2019:34 | ChiTotal | total:m2019_38 | -| ir.cpp:2019:17:2019:34 | Load | m2019_44 | -| ir.cpp:2019:17:2019:34 | SideEffect | ~m2018_13 | -| ir.cpp:2019:17:2019:34 | StoreValue | r2019_45 | +| ir.cpp:1999:13:1999:13 | Address | &:r1999_9 | +| ir.cpp:1999:13:1999:13 | Load | m1998_8 | +| ir.cpp:1999:13:1999:13 | StoreValue | r1999_10 | +| ir.cpp:1999:17:1999:17 | Address | &:r1999_13 | +| ir.cpp:1999:17:1999:17 | Load | m1998_10 | +| ir.cpp:1999:17:1999:17 | StoreValue | r1999_14 | +| ir.cpp:2000:5:2000:5 | Address | &:r2000_7 | +| ir.cpp:2000:9:2000:9 | Address | &:r2000_1 | +| ir.cpp:2000:9:2000:9 | Condition | r2000_2 | +| ir.cpp:2000:9:2000:9 | Load | m1998_6 | +| ir.cpp:2000:9:2000:17 | Address | &:r2000_5 | +| ir.cpp:2000:9:2000:17 | Address | &:r2000_11 | +| ir.cpp:2000:9:2000:17 | Address | &:r2000_14 | +| ir.cpp:2000:9:2000:17 | Load | m2000_4 | +| ir.cpp:2000:9:2000:17 | Phi | from 5:m2000_12 | +| ir.cpp:2000:9:2000:17 | Phi | from 6:m2000_15 | +| ir.cpp:2000:9:2000:17 | StoreValue | r2000_6 | +| ir.cpp:2000:13:2000:13 | Address | &:r2000_9 | +| ir.cpp:2000:13:2000:13 | Load | m1998_8 | +| ir.cpp:2000:13:2000:13 | StoreValue | r2000_10 | +| ir.cpp:2000:17:2000:17 | StoreValue | r2000_13 | +| ir.cpp:2001:5:2001:5 | Address | &:r2001_7 | +| ir.cpp:2001:9:2001:9 | Address | &:r2001_1 | +| ir.cpp:2001:9:2001:9 | Condition | r2001_2 | +| ir.cpp:2001:9:2001:9 | Load | m1998_6 | +| ir.cpp:2001:9:2001:17 | Address | &:r2001_5 | +| ir.cpp:2001:9:2001:17 | Address | &:r2001_10 | +| ir.cpp:2001:9:2001:17 | Address | &:r2001_13 | +| ir.cpp:2001:9:2001:17 | Load | m2001_4 | +| ir.cpp:2001:9:2001:17 | Phi | from 8:m2001_11 | +| ir.cpp:2001:9:2001:17 | Phi | from 9:m2001_14 | +| ir.cpp:2001:9:2001:17 | StoreValue | r2001_6 | +| ir.cpp:2001:13:2001:13 | StoreValue | r2001_9 | +| ir.cpp:2001:17:2001:17 | StoreValue | r2001_12 | +| ir.cpp:2002:5:2002:19 | ChiPartial | partial:m2002_8 | +| ir.cpp:2002:5:2002:19 | ChiTotal | total:m1998_4 | +| ir.cpp:2002:6:2002:6 | Address | &:r2002_2 | +| ir.cpp:2002:6:2002:6 | Condition | r2002_3 | +| ir.cpp:2002:6:2002:6 | Load | m1998_6 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_6 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_7 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_11 | +| ir.cpp:2002:6:2002:14 | Address | &:r2002_14 | +| ir.cpp:2002:6:2002:14 | Load | m2002_5 | +| ir.cpp:2002:6:2002:14 | Phi | from 11:m2002_12 | +| ir.cpp:2002:6:2002:14 | Phi | from 12:m2002_15 | +| ir.cpp:2002:10:2002:10 | StoreValue | r2002_10 | +| ir.cpp:2002:14:2002:14 | StoreValue | r2002_13 | +| ir.cpp:2002:19:2002:19 | StoreValue | r2002_1 | +| ir.cpp:2008:6:2008:22 | ChiPartial | partial:m2008_3 | +| ir.cpp:2008:6:2008:22 | ChiTotal | total:m2008_2 | +| ir.cpp:2008:6:2008:22 | SideEffect | m2008_3 | +| ir.cpp:2008:29:2008:29 | Address | &:r2008_5 | +| ir.cpp:2008:46:2008:46 | Address | &:r2008_7 | +| ir.cpp:2008:63:2008:63 | Address | &:r2008_9 | +| ir.cpp:2008:80:2008:80 | Address | &:r2008_11 | +| ir.cpp:2009:5:2009:5 | Address | &:r2009_7 | +| ir.cpp:2009:9:2009:9 | Address | &:r2009_1 | +| ir.cpp:2009:9:2009:9 | Condition | r2009_2 | +| ir.cpp:2009:9:2009:9 | Load | m2008_6 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_5 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_11 | +| ir.cpp:2009:9:2009:17 | Address | &:r2009_15 | +| ir.cpp:2009:9:2009:17 | Load | m2009_4 | +| ir.cpp:2009:9:2009:17 | Phi | from 2:m2009_12 | +| ir.cpp:2009:9:2009:17 | Phi | from 3:m2009_16 | +| ir.cpp:2009:9:2009:17 | StoreValue | r2009_6 | +| ir.cpp:2009:13:2009:13 | Address | &:r2009_9 | +| ir.cpp:2009:13:2009:13 | Load | m2008_8 | +| ir.cpp:2009:13:2009:13 | StoreValue | r2009_10 | +| ir.cpp:2009:17:2009:17 | Address | &:r2009_13 | +| ir.cpp:2009:17:2009:17 | Load | m2008_10 | +| ir.cpp:2009:17:2009:17 | StoreValue | r2009_14 | +| ir.cpp:2010:5:2010:5 | Address | &:r2010_10 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_2 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_6 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_17 | +| ir.cpp:2010:9:2010:9 | Address | &:r2010_23 | +| ir.cpp:2010:9:2010:9 | Condition | r2010_3 | +| ir.cpp:2010:9:2010:9 | Load | m2008_6 | +| ir.cpp:2010:9:2010:9 | Load | m2010_5 | +| ir.cpp:2010:9:2010:9 | Phi | from 5:m2010_18 | +| ir.cpp:2010:9:2010:9 | Phi | from 6:m2010_24 | +| ir.cpp:2010:9:2010:9 | StoreValue | r2010_7 | +| ir.cpp:2010:9:2010:31 | Address | &:r2010_1 | +| ir.cpp:2010:9:2010:31 | Address | &:r2010_1 | +| ir.cpp:2010:9:2010:31 | Load | m2010_8 | +| ir.cpp:2010:9:2010:31 | StoreValue | r2010_9 | +| ir.cpp:2010:13:2010:13 | Address | &:r2010_12 | +| ir.cpp:2010:13:2010:13 | Address | &:r2010_12 | +| ir.cpp:2010:13:2010:13 | Address | &:r2010_13 | +| ir.cpp:2010:13:2010:13 | Load | m2008_8 | +| ir.cpp:2010:13:2010:13 | Load | m2010_15 | +| ir.cpp:2010:13:2010:13 | StoreValue | r2010_14 | +| ir.cpp:2010:13:2010:13 | StoreValue | r2010_16 | +| ir.cpp:2010:17:2010:31 | Address | &:r2010_19 | +| ir.cpp:2010:17:2010:31 | Address | &:r2010_19 | +| ir.cpp:2010:17:2010:31 | Load | m2010_21 | +| ir.cpp:2010:17:2010:31 | StoreValue | r2010_20 | +| ir.cpp:2010:17:2010:31 | StoreValue | r2010_22 | +| ir.cpp:2011:5:2011:5 | Address | &:r2011_10 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_2 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_6 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_16 | +| ir.cpp:2011:9:2011:9 | Address | &:r2011_22 | +| ir.cpp:2011:9:2011:9 | Condition | r2011_3 | +| ir.cpp:2011:9:2011:9 | Load | m2008_6 | +| ir.cpp:2011:9:2011:9 | Load | m2011_5 | +| ir.cpp:2011:9:2011:9 | Phi | from 8:m2011_17 | +| ir.cpp:2011:9:2011:9 | Phi | from 9:m2011_23 | +| ir.cpp:2011:9:2011:9 | StoreValue | r2011_7 | +| ir.cpp:2011:9:2011:45 | Address | &:r2011_1 | +| ir.cpp:2011:9:2011:45 | Address | &:r2011_1 | +| ir.cpp:2011:9:2011:45 | Load | m2011_8 | +| ir.cpp:2011:9:2011:45 | StoreValue | r2011_9 | +| ir.cpp:2011:13:2011:27 | Address | &:r2011_12 | +| ir.cpp:2011:13:2011:27 | Address | &:r2011_12 | +| ir.cpp:2011:13:2011:27 | Load | m2011_14 | +| ir.cpp:2011:13:2011:27 | StoreValue | r2011_13 | +| ir.cpp:2011:13:2011:27 | StoreValue | r2011_15 | +| ir.cpp:2011:31:2011:45 | Address | &:r2011_18 | +| ir.cpp:2011:31:2011:45 | Address | &:r2011_18 | +| ir.cpp:2011:31:2011:45 | Load | m2011_20 | +| ir.cpp:2011:31:2011:45 | StoreValue | r2011_19 | +| ir.cpp:2011:31:2011:45 | StoreValue | r2011_21 | +| ir.cpp:2012:6:2012:6 | Address | &:r2012_11 | +| ir.cpp:2012:6:2012:6 | Unary | r2012_11 | +| ir.cpp:2012:6:2012:18 | Address | &:r2012_13 | +| ir.cpp:2012:10:2012:10 | Address | &:r2012_5 | +| ir.cpp:2012:10:2012:10 | Condition | r2012_6 | +| ir.cpp:2012:10:2012:10 | Load | m2008_6 | +| ir.cpp:2012:10:2012:18 | Address | &:r2012_9 | +| ir.cpp:2012:10:2012:18 | Address | &:r2012_17 | +| ir.cpp:2012:10:2012:18 | Address | &:r2012_21 | +| ir.cpp:2012:10:2012:18 | Load | m2012_8 | +| ir.cpp:2012:10:2012:18 | Phi | from 11:m2012_18 | +| ir.cpp:2012:10:2012:18 | Phi | from 12:m2012_22 | +| ir.cpp:2012:10:2012:18 | StoreValue | r2012_10 | +| ir.cpp:2012:14:2012:14 | Address | &:r2012_15 | +| ir.cpp:2012:14:2012:14 | Load | m2008_8 | +| ir.cpp:2012:14:2012:14 | StoreValue | r2012_16 | +| ir.cpp:2012:18:2012:18 | Address | &:r2012_19 | +| ir.cpp:2012:18:2012:18 | Load | m2008_10 | +| ir.cpp:2012:18:2012:18 | StoreValue | r2012_20 | +| ir.cpp:2012:23:2012:37 | Address | &:r2012_1 | +| ir.cpp:2012:23:2012:37 | Address | &:r2012_1 | +| ir.cpp:2012:23:2012:37 | Load | m2012_3 | +| ir.cpp:2012:23:2012:37 | StoreValue | r2012_2 | +| ir.cpp:2012:23:2012:37 | StoreValue | r2012_4 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_5 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_7 | +| ir.cpp:2015:8:2015:8 | Address | &:r2015_10 | +| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | +| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | +| ir.cpp:2015:8:2015:8 | ChiPartial | partial:m2015_3 | +| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | +| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | +| ir.cpp:2015:8:2015:8 | ChiTotal | total:m2015_2 | +| ir.cpp:2015:8:2015:8 | Load | m0_10 | +| ir.cpp:2015:8:2015:8 | Load | m2015_6 | +| ir.cpp:2015:8:2015:8 | Load | m2015_6 | +| ir.cpp:2015:8:2015:8 | Load | m2015_6 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_3 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | +| ir.cpp:2015:8:2015:8 | SideEffect | m2015_8 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_5 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_5 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_7 | +| ir.cpp:2016:13:2016:29 | Address | &:r2016_7 | +| ir.cpp:2016:13:2016:29 | ChiPartial | partial:m2016_3 | +| ir.cpp:2016:13:2016:29 | ChiTotal | total:m2016_2 | +| ir.cpp:2016:13:2016:29 | Load | m2016_6 | +| ir.cpp:2016:13:2016:29 | SideEffect | m2016_3 | +| ir.cpp:2016:13:2016:29 | SideEffect | m2016_8 | +| ir.cpp:2019:6:2019:25 | ChiPartial | partial:m2019_3 | +| ir.cpp:2019:6:2019:25 | ChiTotal | total:m2019_2 | +| ir.cpp:2019:6:2019:25 | SideEffect | ~m2023_32 | +| ir.cpp:2019:32:2019:32 | Address | &:r2019_5 | +| ir.cpp:2019:52:2019:52 | Address | &:r2019_7 | +| ir.cpp:2019:72:2019:72 | Address | &:r2019_9 | +| ir.cpp:2019:92:2019:92 | Address | &:r2019_11 | | ir.cpp:2020:5:2020:5 | Address | &:r2020_1 | | ir.cpp:2020:5:2020:5 | Address | &:r2020_1 | | ir.cpp:2020:5:2020:5 | Arg(this) | this:r2020_1 | -| ir.cpp:2020:5:2020:5 | ChiPartial | partial:m2020_19 | -| ir.cpp:2020:5:2020:5 | ChiTotal | total:m2019_20 | -| ir.cpp:2020:5:2020:5 | SideEffect | m2019_20 | +| ir.cpp:2020:5:2020:5 | ChiPartial | partial:m2020_16 | +| ir.cpp:2020:5:2020:5 | ChiTotal | total:m2019_12 | +| ir.cpp:2020:5:2020:5 | SideEffect | m2019_12 | | ir.cpp:2020:7:2020:7 | CallTarget | func:r2020_2 | -| ir.cpp:2020:7:2020:7 | ChiPartial | partial:m2020_15 | -| ir.cpp:2020:7:2020:7 | ChiTotal | total:m2020_7 | -| ir.cpp:2020:7:2020:7 | SideEffect | ~m2020_7 | -| ir.cpp:2020:7:2020:7 | Unary | r2020_14 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_4 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_9 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_31 | -| ir.cpp:2020:9:2020:9 | Address | &:r2020_42 | -| ir.cpp:2020:9:2020:9 | Condition | r2020_5 | -| ir.cpp:2020:9:2020:9 | Load | m2017_6 | -| ir.cpp:2020:9:2020:9 | Load | m2020_8 | -| ir.cpp:2020:9:2020:9 | Phi | from 8:m2020_32 | -| ir.cpp:2020:9:2020:9 | Phi | from 8:~m2020_27 | -| ir.cpp:2020:9:2020:9 | Phi | from 9:m2020_43 | -| ir.cpp:2020:9:2020:9 | Phi | from 9:~m2020_38 | -| ir.cpp:2020:9:2020:9 | StoreValue | r2020_10 | -| ir.cpp:2020:9:2020:51 | Address | &:r2020_3 | -| ir.cpp:2020:9:2020:51 | Address | &:r2020_13 | -| ir.cpp:2020:9:2020:51 | Arg(0) | 0:r2020_13 | -| ir.cpp:2020:9:2020:51 | SideEffect | ~m2020_11 | -| ir.cpp:2020:9:2020:51 | Unary | r2020_3 | -| ir.cpp:2020:9:2020:51 | Unary | r2020_12 | -| ir.cpp:2020:13:2020:30 | Address | &:r2020_22 | -| ir.cpp:2020:13:2020:30 | Address | &:r2020_22 | -| ir.cpp:2020:13:2020:30 | Address | &:r2020_22 | -| ir.cpp:2020:13:2020:30 | Arg(this) | this:r2020_22 | -| ir.cpp:2020:13:2020:30 | CallTarget | func:r2020_24 | -| ir.cpp:2020:13:2020:30 | ChiPartial | partial:m2020_26 | -| ir.cpp:2020:13:2020:30 | ChiPartial | partial:m2020_28 | -| ir.cpp:2020:13:2020:30 | ChiTotal | total:m2019_16 | -| ir.cpp:2020:13:2020:30 | ChiTotal | total:m2020_23 | -| ir.cpp:2020:13:2020:30 | Load | m2020_29 | -| ir.cpp:2020:13:2020:30 | SideEffect | ~m2019_16 | -| ir.cpp:2020:13:2020:30 | StoreValue | r2020_30 | -| ir.cpp:2020:34:2020:51 | Address | &:r2020_33 | -| ir.cpp:2020:34:2020:51 | Address | &:r2020_33 | -| ir.cpp:2020:34:2020:51 | Address | &:r2020_33 | -| ir.cpp:2020:34:2020:51 | Arg(this) | this:r2020_33 | -| ir.cpp:2020:34:2020:51 | CallTarget | func:r2020_35 | -| ir.cpp:2020:34:2020:51 | ChiPartial | partial:m2020_37 | -| ir.cpp:2020:34:2020:51 | ChiPartial | partial:m2020_39 | -| ir.cpp:2020:34:2020:51 | ChiTotal | total:m2019_16 | -| ir.cpp:2020:34:2020:51 | ChiTotal | total:m2020_34 | -| ir.cpp:2020:34:2020:51 | Load | m2020_40 | -| ir.cpp:2020:34:2020:51 | SideEffect | ~m2019_16 | -| ir.cpp:2020:34:2020:51 | StoreValue | r2020_41 | -| ir.cpp:2021:5:2021:19 | ChiPartial | partial:m2021_35 | -| ir.cpp:2021:5:2021:19 | ChiTotal | total:m2021_17 | -| ir.cpp:2021:5:2021:19 | SideEffect | m2021_17 | -| ir.cpp:2021:6:2021:6 | Address | &:r2021_1 | -| ir.cpp:2021:6:2021:6 | Address | &:r2021_1 | -| ir.cpp:2021:6:2021:6 | Arg(this) | this:r2021_1 | -| ir.cpp:2021:6:2021:6 | ChiPartial | partial:m2021_16 | -| ir.cpp:2021:6:2021:6 | ChiTotal | total:m2020_20 | -| ir.cpp:2021:6:2021:6 | SideEffect | m2020_20 | -| ir.cpp:2021:8:2021:8 | CallTarget | func:r2021_2 | -| ir.cpp:2021:8:2021:8 | ChiPartial | partial:m2021_12 | -| ir.cpp:2021:8:2021:8 | ChiTotal | total:m2020_16 | -| ir.cpp:2021:8:2021:8 | SideEffect | ~m2020_16 | -| ir.cpp:2021:8:2021:8 | Unary | r2021_11 | -| ir.cpp:2021:8:2021:19 | Address | &:r2021_18 | -| ir.cpp:2021:8:2021:19 | Address | &:r2021_18 | -| ir.cpp:2021:8:2021:19 | Arg(this) | this:r2021_18 | -| ir.cpp:2021:10:2021:10 | Address | &:r2021_3 | -| ir.cpp:2021:10:2021:10 | Condition | r2021_4 | -| ir.cpp:2021:10:2021:10 | Load | m2017_6 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_7 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_10 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_39 | -| ir.cpp:2021:10:2021:18 | Address | &:r2021_42 | -| ir.cpp:2021:10:2021:18 | Arg(0) | 0:r2021_10 | -| ir.cpp:2021:10:2021:18 | Load | m2021_6 | -| ir.cpp:2021:10:2021:18 | Phi | from 11:m2021_40 | -| ir.cpp:2021:10:2021:18 | Phi | from 12:m2021_43 | -| ir.cpp:2021:10:2021:18 | SideEffect | ~m2021_13 | -| ir.cpp:2021:10:2021:18 | Unary | r2021_8 | -| ir.cpp:2021:10:2021:18 | Unary | r2021_9 | -| ir.cpp:2021:14:2021:14 | StoreValue | r2021_38 | -| ir.cpp:2021:18:2021:18 | StoreValue | r2021_41 | -| ir.cpp:2021:21:2021:21 | CallTarget | func:r2021_19 | -| ir.cpp:2021:21:2021:21 | ChiPartial | partial:m2021_31 | -| ir.cpp:2021:21:2021:21 | ChiTotal | total:m2021_25 | -| ir.cpp:2021:21:2021:21 | SideEffect | ~m2021_25 | -| ir.cpp:2021:21:2021:21 | Unary | r2021_30 | -| ir.cpp:2021:23:2021:40 | Address | &:r2021_20 | -| ir.cpp:2021:23:2021:40 | Address | &:r2021_20 | -| ir.cpp:2021:23:2021:40 | Address | &:r2021_29 | -| ir.cpp:2021:23:2021:40 | Arg(0) | 0:r2021_29 | -| ir.cpp:2021:23:2021:40 | Arg(this) | this:r2021_20 | -| ir.cpp:2021:23:2021:40 | CallTarget | func:r2021_22 | -| ir.cpp:2021:23:2021:40 | ChiPartial | partial:m2021_24 | -| ir.cpp:2021:23:2021:40 | ChiPartial | partial:m2021_26 | -| ir.cpp:2021:23:2021:40 | ChiTotal | total:m2021_13 | -| ir.cpp:2021:23:2021:40 | ChiTotal | total:m2021_21 | -| ir.cpp:2021:23:2021:40 | SideEffect | ~m2021_13 | -| ir.cpp:2021:23:2021:40 | SideEffect | ~m2021_27 | -| ir.cpp:2021:23:2021:40 | Unary | r2021_20 | -| ir.cpp:2021:23:2021:40 | Unary | r2021_28 | -| ir.cpp:2026:14:2026:22 | Address | &:r2026_7 | -| ir.cpp:2026:14:2026:22 | ChiPartial | partial:m2026_3 | -| ir.cpp:2026:14:2026:22 | ChiTotal | total:m2026_2 | -| ir.cpp:2026:14:2026:22 | Load | m2031_2 | -| ir.cpp:2026:14:2026:22 | SideEffect | ~m2028_6 | -| ir.cpp:2026:37:2026:37 | Address | &:r2026_5 | -| ir.cpp:2027:16:2027:16 | Address | &:r2027_1 | -| ir.cpp:2028:3:2028:3 | Address | &:r2028_10 | -| ir.cpp:2028:7:2028:7 | Address | &:r2028_1 | -| ir.cpp:2028:7:2028:7 | Left | r2028_2 | -| ir.cpp:2028:7:2028:7 | Load | m2026_6 | -| ir.cpp:2028:7:2028:13 | Condition | r2028_4 | -| ir.cpp:2028:7:2030:28 | Address | &:r2028_8 | -| ir.cpp:2028:7:2030:28 | Address | &:r2028_12 | -| ir.cpp:2028:7:2030:28 | Address | &:r2028_14 | -| ir.cpp:2028:7:2030:28 | Load | m2028_7 | -| ir.cpp:2028:7:2030:28 | Phi | from 2:m2028_13 | -| ir.cpp:2028:7:2030:28 | Phi | from 2:~m2029_6 | -| ir.cpp:2028:7:2030:28 | Phi | from 3:m2028_15 | -| ir.cpp:2028:7:2030:28 | Phi | from 3:~m2030_6 | -| ir.cpp:2028:7:2030:28 | StoreValue | r2028_9 | -| ir.cpp:2028:11:2028:13 | Right | r2028_3 | -| ir.cpp:2029:6:2029:20 | CallTarget | func:r2029_1 | -| ir.cpp:2029:6:2029:20 | ChiPartial | partial:m2029_5 | -| ir.cpp:2029:6:2029:20 | ChiTotal | total:m2026_4 | -| ir.cpp:2029:6:2029:20 | SideEffect | ~m2026_4 | -| ir.cpp:2029:6:2029:26 | StoreValue | r2029_9 | -| ir.cpp:2029:22:2029:22 | Address | &:r2029_2 | -| ir.cpp:2029:22:2029:22 | Arg(0) | 0:r2029_3 | -| ir.cpp:2029:22:2029:22 | Load | m2026_6 | -| ir.cpp:2029:26:2029:26 | Address | &:r2029_7 | -| ir.cpp:2029:26:2029:26 | Load | m2026_6 | -| ir.cpp:2029:26:2029:26 | Unary | r2029_8 | -| ir.cpp:2030:5:2030:28 | StoreValue | r2030_9 | -| ir.cpp:2030:6:2030:20 | CallTarget | func:r2030_1 | -| ir.cpp:2030:6:2030:20 | ChiPartial | partial:m2030_5 | -| ir.cpp:2030:6:2030:20 | ChiTotal | total:m2026_4 | -| ir.cpp:2030:6:2030:20 | SideEffect | ~m2026_4 | -| ir.cpp:2030:6:2030:27 | Unary | r2030_8 | -| ir.cpp:2030:22:2030:22 | Address | &:r2030_2 | -| ir.cpp:2030:22:2030:22 | Arg(0) | 0:r2030_3 | -| ir.cpp:2030:22:2030:22 | Load | m2026_6 | -| ir.cpp:2030:26:2030:27 | Unary | r2030_7 | -| ir.cpp:2031:1:2031:1 | Address | &:r2031_1 | -| ir.cpp:2033:6:2033:17 | ChiPartial | partial:m2033_3 | -| ir.cpp:2033:6:2033:17 | ChiTotal | total:m2033_2 | -| ir.cpp:2033:6:2033:17 | SideEffect | ~m2036_6 | -| ir.cpp:2034:8:2034:8 | Address | &:r2034_1 | -| ir.cpp:2034:12:2034:18 | Address | &:r2034_4 | -| ir.cpp:2034:12:2034:18 | Arg(0) | 0:r2034_3 | -| ir.cpp:2034:12:2034:18 | CallTarget | func:r2034_2 | -| ir.cpp:2034:12:2034:18 | ChiPartial | partial:m2034_5 | -| ir.cpp:2034:12:2034:18 | ChiTotal | total:m2033_4 | -| ir.cpp:2034:12:2034:18 | SideEffect | ~m2033_4 | -| ir.cpp:2034:12:2034:18 | StoreValue | r2034_8 | -| ir.cpp:2034:12:2034:18 | Unary | r2034_4 | -| ir.cpp:2035:3:2035:4 | Address | &:r2035_4 | -| ir.cpp:2035:3:2035:8 | ChiPartial | partial:m2035_5 | -| ir.cpp:2035:3:2035:8 | ChiTotal | total:m2034_7 | -| ir.cpp:2035:4:2035:4 | Address | &:r2035_2 | -| ir.cpp:2035:4:2035:4 | Load | m2034_9 | -| ir.cpp:2035:4:2035:4 | Unary | r2035_3 | -| ir.cpp:2035:8:2035:8 | StoreValue | r2035_1 | -| ir.cpp:2036:3:2036:10 | CallTarget | func:r2036_1 | -| ir.cpp:2036:3:2036:10 | ChiPartial | partial:m2036_5 | -| ir.cpp:2036:3:2036:10 | ChiTotal | total:m2034_6 | -| ir.cpp:2036:3:2036:10 | SideEffect | ~m2034_6 | -| ir.cpp:2036:10:2036:10 | Address | &:r2036_2 | -| ir.cpp:2036:10:2036:10 | Arg(0) | 0:r2036_3 | -| ir.cpp:2036:10:2036:10 | Load | m2034_9 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_5 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_5 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_7 | -| ir.cpp:2039:7:2039:7 | Address | &:r2039_7 | -| ir.cpp:2039:7:2039:7 | ChiPartial | partial:m2039_3 | -| ir.cpp:2039:7:2039:7 | ChiTotal | total:m2039_2 | -| ir.cpp:2039:7:2039:7 | Load | m2039_6 | -| ir.cpp:2039:7:2039:7 | SideEffect | m2039_3 | -| ir.cpp:2039:7:2039:7 | SideEffect | m2039_8 | -| ir.cpp:2041:10:2041:24 | ChiPartial | partial:m2041_3 | -| ir.cpp:2041:10:2041:24 | ChiTotal | total:m2041_2 | -| ir.cpp:2041:10:2041:24 | SideEffect | m2041_3 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_5 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_5 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_7 | -| ir.cpp:2041:32:2041:32 | Address | &:r2041_7 | -| ir.cpp:2041:32:2041:32 | Load | m2041_6 | -| ir.cpp:2041:32:2041:32 | SideEffect | m2041_8 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_5 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_5 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_7 | -| ir.cpp:2043:13:2043:18 | Address | &:r2043_7 | -| ir.cpp:2043:13:2043:18 | ChiPartial | partial:m2043_3 | -| ir.cpp:2043:13:2043:18 | ChiTotal | total:m2043_2 | -| ir.cpp:2043:13:2043:18 | Load | m2043_6 | -| ir.cpp:2043:13:2043:18 | SideEffect | m2043_3 | -| ir.cpp:2043:13:2043:18 | SideEffect | m2043_8 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_5 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_5 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_7 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_7 | -| ir.cpp:2046:7:2046:7 | Address | &:r2046_9 | -| ir.cpp:2046:7:2046:7 | Arg(this) | this:r2046_9 | -| ir.cpp:2046:7:2046:7 | CallTarget | func:r2046_10 | -| ir.cpp:2046:7:2046:7 | ChiPartial | partial:m2046_3 | -| ir.cpp:2046:7:2046:7 | ChiPartial | partial:m2046_12 | -| ir.cpp:2046:7:2046:7 | ChiPartial | partial:m2046_14 | -| ir.cpp:2046:7:2046:7 | ChiTotal | total:m2046_2 | -| ir.cpp:2046:7:2046:7 | ChiTotal | total:m2046_4 | -| ir.cpp:2046:7:2046:7 | ChiTotal | total:m2046_8 | -| ir.cpp:2046:7:2046:7 | Load | m2046_6 | -| ir.cpp:2046:7:2046:7 | SideEffect | m2046_15 | -| ir.cpp:2046:7:2046:7 | SideEffect | ~m2046_4 | -| ir.cpp:2046:7:2046:7 | SideEffect | ~m2046_13 | -| ir.cpp:2046:7:2046:7 | Unary | m2046_6 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_5 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_5 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_7 | -| ir.cpp:2049:5:2049:13 | Address | &:r2049_7 | -| ir.cpp:2049:5:2049:13 | ChiPartial | partial:m2049_3 | -| ir.cpp:2049:5:2049:13 | ChiTotal | total:m2049_2 | -| ir.cpp:2049:5:2049:13 | Load | m2049_6 | -| ir.cpp:2049:5:2049:13 | SideEffect | m2049_8 | -| ir.cpp:2049:5:2049:13 | SideEffect | ~m2049_14 | -| ir.cpp:2049:5:2049:13 | Unary | m2049_6 | -| ir.cpp:2049:18:2049:18 | Arg(this) | this:r2049_10 | -| ir.cpp:2049:18:2049:18 | CallTarget | func:r2049_11 | -| ir.cpp:2049:18:2049:18 | ChiPartial | partial:m2049_13 | -| ir.cpp:2049:18:2049:18 | ChiTotal | total:m2049_4 | -| ir.cpp:2049:18:2049:18 | SideEffect | ~m2049_4 | -| ir.cpp:2051:10:2051:24 | ChiPartial | partial:m2051_3 | -| ir.cpp:2051:10:2051:24 | ChiTotal | total:m2051_2 | -| ir.cpp:2051:10:2051:24 | SideEffect | m2051_3 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_5 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_5 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_7 | -| ir.cpp:2051:32:2051:32 | Address | &:r2051_7 | -| ir.cpp:2051:32:2051:32 | Load | m2051_6 | -| ir.cpp:2051:32:2051:32 | SideEffect | m2051_8 | -| ir.cpp:2056:5:2056:18 | Address | &:r2056_5 | -| ir.cpp:2056:5:2056:18 | ChiPartial | partial:m2056_3 | -| ir.cpp:2056:5:2056:18 | ChiTotal | total:m2056_2 | -| ir.cpp:2056:5:2056:18 | Load | m2066_2 | -| ir.cpp:2056:5:2056:18 | SideEffect | ~m2065_6 | -| ir.cpp:2058:12:2058:13 | Address | &:r2058_1 | -| ir.cpp:2058:17:2058:27 | Address | &:r2058_4 | -| ir.cpp:2058:17:2058:27 | Address | &:r2058_8 | -| ir.cpp:2058:17:2058:27 | Arg(0) | 0:r2058_3 | -| ir.cpp:2058:17:2058:27 | Arg(this) | this:r2058_8 | -| ir.cpp:2058:17:2058:27 | CallTarget | func:r2058_2 | -| ir.cpp:2058:17:2058:27 | CallTarget | func:r2058_9 | -| ir.cpp:2058:17:2058:27 | ChiPartial | partial:m2058_5 | -| ir.cpp:2058:17:2058:27 | ChiPartial | partial:m2058_11 | -| ir.cpp:2058:17:2058:27 | ChiPartial | partial:m2058_13 | -| ir.cpp:2058:17:2058:27 | ChiTotal | total:m2056_4 | -| ir.cpp:2058:17:2058:27 | ChiTotal | total:m2058_6 | -| ir.cpp:2058:17:2058:27 | ChiTotal | total:m2058_7 | -| ir.cpp:2058:17:2058:27 | SideEffect | ~m2056_4 | -| ir.cpp:2058:17:2058:27 | SideEffect | ~m2058_6 | -| ir.cpp:2058:17:2058:27 | StoreValue | r2058_8 | -| ir.cpp:2058:17:2058:27 | Unary | r2058_4 | -| ir.cpp:2059:5:2059:13 | CallTarget | func:r2059_1 | -| ir.cpp:2059:5:2059:13 | ChiPartial | partial:m2059_5 | -| ir.cpp:2059:5:2059:13 | ChiTotal | total:m2058_12 | -| ir.cpp:2059:5:2059:13 | SideEffect | ~m2058_12 | -| ir.cpp:2059:12:2059:13 | Address | &:r2059_2 | -| ir.cpp:2059:12:2059:13 | Arg(0) | 0:r2059_3 | -| ir.cpp:2059:12:2059:13 | Load | m2058_15 | -| ir.cpp:2061:12:2061:13 | Address | &:r2061_1 | -| ir.cpp:2061:17:2061:30 | Address | &:r2061_4 | -| ir.cpp:2061:17:2061:30 | Address | &:r2061_8 | -| ir.cpp:2061:17:2061:30 | Arg(0) | 0:r2061_3 | -| ir.cpp:2061:17:2061:30 | Arg(this) | this:r2061_8 | -| ir.cpp:2061:17:2061:30 | CallTarget | func:r2061_2 | -| ir.cpp:2061:17:2061:30 | CallTarget | func:r2061_9 | -| ir.cpp:2061:17:2061:30 | ChiPartial | partial:m2061_5 | -| ir.cpp:2061:17:2061:30 | ChiPartial | partial:m2061_11 | -| ir.cpp:2061:17:2061:30 | ChiPartial | partial:m2061_13 | -| ir.cpp:2061:17:2061:30 | ChiTotal | total:m2059_6 | -| ir.cpp:2061:17:2061:30 | ChiTotal | total:m2061_6 | -| ir.cpp:2061:17:2061:30 | ChiTotal | total:m2061_7 | -| ir.cpp:2061:17:2061:30 | SideEffect | ~m2059_6 | -| ir.cpp:2061:17:2061:30 | SideEffect | ~m2061_6 | -| ir.cpp:2061:17:2061:30 | StoreValue | r2061_15 | -| ir.cpp:2061:17:2061:30 | Unary | r2061_4 | -| ir.cpp:2061:17:2061:30 | Unary | r2061_8 | -| ir.cpp:2062:5:2062:13 | CallTarget | func:r2062_1 | -| ir.cpp:2062:5:2062:13 | ChiPartial | partial:m2062_5 | -| ir.cpp:2062:5:2062:13 | ChiTotal | total:m2061_12 | -| ir.cpp:2062:5:2062:13 | SideEffect | ~m2061_12 | -| ir.cpp:2062:12:2062:13 | Address | &:r2062_2 | -| ir.cpp:2062:12:2062:13 | Arg(0) | 0:r2062_3 | -| ir.cpp:2062:12:2062:13 | Load | m2061_16 | -| ir.cpp:2064:15:2064:15 | Address | &:r2064_1 | -| ir.cpp:2064:19:2064:32 | Address | &:r2064_4 | -| ir.cpp:2064:19:2064:32 | Address | &:r2064_8 | -| ir.cpp:2064:19:2064:32 | Arg(0) | 0:r2064_3 | -| ir.cpp:2064:19:2064:32 | Arg(this) | this:r2064_8 | -| ir.cpp:2064:19:2064:32 | CallTarget | func:r2064_2 | -| ir.cpp:2064:19:2064:32 | CallTarget | func:r2064_9 | -| ir.cpp:2064:19:2064:32 | ChiPartial | partial:m2064_5 | -| ir.cpp:2064:19:2064:32 | ChiPartial | partial:m2064_11 | -| ir.cpp:2064:19:2064:32 | ChiPartial | partial:m2064_13 | -| ir.cpp:2064:19:2064:32 | ChiTotal | total:m2062_6 | -| ir.cpp:2064:19:2064:32 | ChiTotal | total:m2064_6 | -| ir.cpp:2064:19:2064:32 | ChiTotal | total:m2064_7 | -| ir.cpp:2064:19:2064:32 | SideEffect | ~m2062_6 | -| ir.cpp:2064:19:2064:32 | SideEffect | ~m2064_6 | -| ir.cpp:2064:19:2064:32 | StoreValue | r2064_8 | -| ir.cpp:2064:19:2064:32 | Unary | r2064_4 | -| ir.cpp:2065:5:2065:12 | CallTarget | func:r2065_1 | -| ir.cpp:2065:5:2065:12 | ChiPartial | partial:m2065_5 | -| ir.cpp:2065:5:2065:12 | ChiTotal | total:m2064_12 | -| ir.cpp:2065:5:2065:12 | SideEffect | ~m2064_12 | -| ir.cpp:2065:12:2065:12 | Address | &:r2065_2 | -| ir.cpp:2065:12:2065:12 | Arg(0) | 0:r2065_3 | -| ir.cpp:2065:12:2065:12 | Load | m2064_15 | -| ir.cpp:2066:1:2066:1 | Address | &:r2066_1 | -| ir.cpp:2070:6:2070:26 | ChiPartial | partial:m2070_3 | -| ir.cpp:2070:6:2070:26 | ChiTotal | total:m2070_2 | -| ir.cpp:2070:6:2070:26 | SideEffect | ~m2072_5 | -| ir.cpp:2071:13:2071:13 | Address | &:r2071_1 | -| ir.cpp:2071:16:2071:19 | StoreValue | r2071_2 | -| ir.cpp:2072:3:2072:27 | CallTarget | func:r2072_1 | -| ir.cpp:2072:3:2072:27 | ChiPartial | partial:m2072_4 | -| ir.cpp:2072:3:2072:27 | ChiTotal | total:m2070_4 | -| ir.cpp:2072:3:2072:27 | SideEffect | ~m2070_4 | -| ir.cpp:2072:29:2072:29 | Arg(0) | 0:r2072_2 | -| ir.cpp:2077:5:2077:11 | Address | &:r2077_6 | -| ir.cpp:2077:5:2077:11 | ChiPartial | partial:m2077_3 | -| ir.cpp:2077:5:2077:11 | ChiTotal | total:m2077_2 | -| ir.cpp:2077:5:2077:11 | Load | m2082_4 | -| ir.cpp:2077:5:2077:11 | SideEffect | ~m2081_4 | -| ir.cpp:2078:9:2078:9 | Address | &:r2078_1 | -| ir.cpp:2078:13:2078:15 | CallTarget | func:r2078_2 | -| ir.cpp:2078:13:2078:15 | ChiPartial | partial:m2078_6 | -| ir.cpp:2078:13:2078:15 | ChiTotal | total:m2077_4 | -| ir.cpp:2078:13:2078:15 | SideEffect | ~m2077_4 | -| ir.cpp:2078:13:2078:15 | StoreValue | r2078_5 | -| ir.cpp:2078:17:2078:17 | Arg(0) | 0:r2078_3 | -| ir.cpp:2078:19:2078:19 | Arg(1) | 1:r2078_4 | -| ir.cpp:2079:9:2079:9 | Address | &:r2079_1 | -| ir.cpp:2079:9:2079:9 | Left | r2079_2 | -| ir.cpp:2079:9:2079:9 | Load | m2078_8 | -| ir.cpp:2079:9:2079:14 | Condition | r2079_4 | -| ir.cpp:2079:14:2079:14 | Right | r2079_3 | -| ir.cpp:2080:9:2080:12 | CallTarget | func:r2080_1 | -| ir.cpp:2080:9:2080:12 | ChiPartial | partial:m2080_4 | -| ir.cpp:2080:9:2080:12 | ChiTotal | total:m2078_7 | -| ir.cpp:2080:9:2080:12 | SideEffect | ~m2078_7 | -| ir.cpp:2080:14:2080:14 | Arg(0) | 0:r2080_2 | -| ir.cpp:2081:5:2081:12 | CallTarget | func:r2081_1 | -| ir.cpp:2081:5:2081:12 | ChiPartial | partial:m2081_3 | -| ir.cpp:2081:5:2081:12 | ChiTotal | total:m2078_7 | -| ir.cpp:2081:5:2081:12 | SideEffect | ~m2078_7 | -| ir.cpp:2082:5:2082:13 | Address | &:r2082_1 | -| ir.cpp:2082:12:2082:12 | Address | &:r2082_2 | -| ir.cpp:2082:12:2082:12 | Load | m2078_8 | -| ir.cpp:2082:12:2082:12 | StoreValue | r2082_3 | -| ir.cpp:2085:6:2085:17 | ChiPartial | partial:m2085_3 | -| ir.cpp:2085:6:2085:17 | ChiTotal | total:m2085_2 | -| ir.cpp:2086:5:2086:12 | CallTarget | func:r2086_1 | -| ir.cpp:2086:5:2086:12 | ChiPartial | partial:m2086_3 | -| ir.cpp:2086:5:2086:12 | ChiTotal | total:m2085_4 | -| ir.cpp:2086:5:2086:12 | SideEffect | ~m2085_4 | -| ir.cpp:2087:5:2087:8 | CallTarget | func:r2087_1 | -| ir.cpp:2087:5:2087:8 | ChiPartial | partial:m2087_4 | -| ir.cpp:2087:5:2087:8 | ChiTotal | total:m2086_4 | -| ir.cpp:2087:5:2087:8 | SideEffect | ~m2086_4 | -| ir.cpp:2087:10:2087:10 | Arg(0) | 0:r2087_2 | -| ir.cpp:2090:5:2090:16 | Address | &:r2090_6 | -| ir.cpp:2090:5:2090:16 | ChiPartial | partial:m2090_3 | -| ir.cpp:2090:5:2090:16 | ChiTotal | total:m2090_2 | -| ir.cpp:2090:5:2090:16 | Load | m2095_4 | -| ir.cpp:2090:5:2090:16 | SideEffect | ~m2094_4 | -| ir.cpp:2091:9:2091:9 | Address | &:r2091_1 | -| ir.cpp:2091:13:2091:15 | CallTarget | func:r2091_2 | -| ir.cpp:2091:13:2091:15 | ChiPartial | partial:m2091_6 | -| ir.cpp:2091:13:2091:15 | ChiTotal | total:m2090_4 | -| ir.cpp:2091:13:2091:15 | SideEffect | ~m2090_4 | -| ir.cpp:2091:13:2091:15 | StoreValue | r2091_5 | -| ir.cpp:2091:17:2091:17 | Arg(0) | 0:r2091_3 | -| ir.cpp:2091:19:2091:19 | Arg(1) | 1:r2091_4 | -| ir.cpp:2092:9:2092:9 | Address | &:r2092_1 | -| ir.cpp:2092:9:2092:9 | Left | r2092_2 | -| ir.cpp:2092:9:2092:9 | Load | m2091_8 | -| ir.cpp:2092:9:2092:14 | Condition | r2092_4 | -| ir.cpp:2092:14:2092:14 | Right | r2092_3 | -| ir.cpp:2093:9:2093:20 | CallTarget | func:r2093_1 | -| ir.cpp:2094:5:2094:12 | CallTarget | func:r2094_1 | -| ir.cpp:2094:5:2094:12 | ChiPartial | partial:m2094_3 | -| ir.cpp:2094:5:2094:12 | ChiTotal | total:m2091_7 | -| ir.cpp:2094:5:2094:12 | SideEffect | ~m2091_7 | -| ir.cpp:2095:5:2095:13 | Address | &:r2095_1 | -| ir.cpp:2095:12:2095:12 | Address | &:r2095_2 | -| ir.cpp:2095:12:2095:12 | Load | m2091_8 | -| ir.cpp:2095:12:2095:12 | StoreValue | r2095_3 | -| ir.cpp:2098:6:2098:24 | ChiPartial | partial:m2098_3 | -| ir.cpp:2098:6:2098:24 | ChiTotal | total:m2098_2 | -| ir.cpp:2098:6:2098:24 | SideEffect | ~m2104_8 | -| ir.cpp:2098:33:2098:33 | Address | &:r2098_5 | -| ir.cpp:2099:3:2099:12 | Address | &:r2099_6 | -| ir.cpp:2099:3:2099:12 | Arg(0) | 0:r2099_5 | -| ir.cpp:2099:3:2099:12 | CallTarget | func:r2099_1 | -| ir.cpp:2099:3:2099:12 | ChiPartial | partial:m2099_7 | -| ir.cpp:2099:3:2099:12 | ChiTotal | total:m2098_4 | -| ir.cpp:2099:3:2099:12 | Right | r2099_4 | -| ir.cpp:2099:3:2099:12 | SideEffect | ~m2098_4 | -| ir.cpp:2099:3:2099:12 | Unary | r2099_6 | -| ir.cpp:2099:11:2099:11 | Address | &:r2099_2 | -| ir.cpp:2099:11:2099:11 | Left | r2099_3 | -| ir.cpp:2099:11:2099:11 | Load | m2098_6 | -| ir.cpp:2100:3:2100:18 | Address | &:r2100_7 | -| ir.cpp:2100:3:2100:18 | Arg(0) | 0:r2100_5 | -| ir.cpp:2100:3:2100:18 | CallTarget | func:r2100_1 | -| ir.cpp:2100:3:2100:18 | ChiPartial | partial:m2100_8 | -| ir.cpp:2100:3:2100:18 | ChiTotal | total:m2099_8 | -| ir.cpp:2100:3:2100:18 | Right | r2100_4 | -| ir.cpp:2100:3:2100:18 | SideEffect | ~m2099_8 | -| ir.cpp:2100:3:2100:18 | Unary | r2100_7 | -| ir.cpp:2100:7:2100:10 | Arg(1) | 1:r2100_6 | -| ir.cpp:2100:17:2100:17 | Address | &:r2100_2 | -| ir.cpp:2100:17:2100:17 | Left | r2100_3 | -| ir.cpp:2100:17:2100:17 | Load | m2098_6 | -| ir.cpp:2101:3:2101:15 | Address | &:r2101_6 | -| ir.cpp:2101:3:2101:15 | Arg(0) | 0:r2101_5 | -| ir.cpp:2101:3:2101:15 | CallTarget | func:r2101_1 | -| ir.cpp:2101:3:2101:15 | ChiPartial | partial:m2101_7 | -| ir.cpp:2101:3:2101:15 | ChiTotal | total:m2100_9 | -| ir.cpp:2101:3:2101:15 | Right | r2101_4 | -| ir.cpp:2101:3:2101:15 | SideEffect | ~m2100_9 | -| ir.cpp:2101:3:2101:15 | Unary | r2101_6 | -| ir.cpp:2101:14:2101:14 | Address | &:r2101_2 | -| ir.cpp:2101:14:2101:14 | Left | r2101_3 | -| ir.cpp:2101:14:2101:14 | Load | m2098_6 | -| ir.cpp:2102:3:2102:20 | Address | &:r2102_7 | -| ir.cpp:2102:3:2102:20 | Arg(0) | 0:r2102_5 | -| ir.cpp:2102:3:2102:20 | CallTarget | func:r2102_1 | -| ir.cpp:2102:3:2102:20 | ChiPartial | partial:m2102_8 | -| ir.cpp:2102:3:2102:20 | ChiTotal | total:m2101_8 | -| ir.cpp:2102:3:2102:20 | Right | r2102_4 | -| ir.cpp:2102:3:2102:20 | SideEffect | ~m2101_8 | -| ir.cpp:2102:3:2102:20 | Unary | r2102_7 | -| ir.cpp:2102:19:2102:19 | Address | &:r2102_2 | -| ir.cpp:2102:19:2102:19 | Left | r2102_3 | -| ir.cpp:2102:19:2102:19 | Load | m2098_6 | -| ir.cpp:2102:21:2102:21 | Arg(1) | 1:r2102_6 | -| ir.cpp:2103:3:2103:36 | Address | &:r2103_6 | -| ir.cpp:2103:3:2103:36 | Arg(0) | 0:r2103_5 | -| ir.cpp:2103:3:2103:36 | CallTarget | func:r2103_1 | -| ir.cpp:2103:3:2103:36 | ChiPartial | partial:m2103_7 | -| ir.cpp:2103:3:2103:36 | ChiTotal | total:m2102_9 | -| ir.cpp:2103:3:2103:36 | Right | r2103_4 | -| ir.cpp:2103:3:2103:36 | SideEffect | ~m2102_9 | -| ir.cpp:2103:3:2103:36 | Unary | r2103_6 | -| ir.cpp:2103:35:2103:35 | Address | &:r2103_2 | -| ir.cpp:2103:35:2103:35 | Left | r2103_3 | -| ir.cpp:2103:35:2103:35 | Load | m2098_6 | -| ir.cpp:2104:3:2104:24 | Address | &:r2104_6 | -| ir.cpp:2104:3:2104:24 | Arg(0) | 0:r2104_5 | -| ir.cpp:2104:3:2104:24 | CallTarget | func:r2104_1 | -| ir.cpp:2104:3:2104:24 | ChiPartial | partial:m2104_7 | -| ir.cpp:2104:3:2104:24 | ChiTotal | total:m2103_8 | -| ir.cpp:2104:3:2104:24 | Right | r2104_4 | -| ir.cpp:2104:3:2104:24 | SideEffect | ~m2103_8 | -| ir.cpp:2104:3:2104:24 | Unary | r2104_6 | -| ir.cpp:2104:11:2104:11 | Address | &:r2104_2 | -| ir.cpp:2104:11:2104:11 | Left | r2104_3 | -| ir.cpp:2104:11:2104:11 | Load | m2098_6 | -| ir.cpp:2109:7:2109:17 | Address | &:r2109_10 | -| ir.cpp:2109:7:2109:17 | ChiPartial | partial:m2109_3 | -| ir.cpp:2109:7:2109:17 | ChiTotal | total:m2109_2 | -| ir.cpp:2109:7:2109:17 | Load | m2112_4 | -| ir.cpp:2109:7:2109:17 | SideEffect | m2109_3 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_5 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_5 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_7 | -| ir.cpp:2109:25:2109:25 | Address | &:r2109_7 | -| ir.cpp:2109:25:2109:25 | Load | m2109_6 | -| ir.cpp:2109:25:2109:25 | SideEffect | m2109_8 | -| ir.cpp:2110:9:2110:11 | Address | &:r2110_1 | -| ir.cpp:2111:10:2111:10 | Address | &:r2111_1 | -| ir.cpp:2111:14:2111:19 | CallTarget | func:r2111_2 | -| ir.cpp:2111:14:2111:19 | StoreValue | r2111_8 | -| ir.cpp:2111:21:2111:21 | Address | &:r2111_3 | -| ir.cpp:2111:21:2111:21 | Address | &:r2111_5 | -| ir.cpp:2111:21:2111:21 | Arg(0) | 0:r2111_5 | -| ir.cpp:2111:21:2111:21 | Load | m2109_6 | -| ir.cpp:2111:21:2111:21 | SideEffect | ~m2109_8 | -| ir.cpp:2111:21:2111:21 | Unary | r2111_4 | -| ir.cpp:2111:24:2111:27 | Address | &:r2111_7 | -| ir.cpp:2111:24:2111:27 | Arg(1) | 1:r2111_7 | -| ir.cpp:2111:24:2111:27 | ChiPartial | partial:m2111_10 | -| ir.cpp:2111:24:2111:27 | ChiTotal | total:m2110_2 | -| ir.cpp:2111:25:2111:27 | Unary | r2111_6 | -| ir.cpp:2112:3:2112:13 | Address | &:r2112_1 | -| ir.cpp:2112:10:2112:12 | Address | &:r2112_2 | -| ir.cpp:2112:10:2112:12 | Load | m2111_11 | -| ir.cpp:2112:10:2112:12 | StoreValue | r2112_3 | +| ir.cpp:2020:7:2020:7 | ChiPartial | partial:m2020_12 | +| ir.cpp:2020:7:2020:7 | ChiTotal | total:m2019_4 | +| ir.cpp:2020:7:2020:7 | SideEffect | ~m2019_4 | +| ir.cpp:2020:7:2020:7 | Unary | r2020_11 | +| ir.cpp:2020:9:2020:9 | Address | &:r2020_3 | +| ir.cpp:2020:9:2020:9 | Condition | r2020_4 | +| ir.cpp:2020:9:2020:9 | Load | m2019_6 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_7 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_10 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_20 | +| ir.cpp:2020:9:2020:17 | Address | &:r2020_23 | +| ir.cpp:2020:9:2020:17 | Arg(0) | 0:r2020_10 | +| ir.cpp:2020:9:2020:17 | Load | m2020_6 | +| ir.cpp:2020:9:2020:17 | Phi | from 2:m2020_21 | +| ir.cpp:2020:9:2020:17 | Phi | from 3:m2020_24 | +| ir.cpp:2020:9:2020:17 | SideEffect | ~m2020_13 | +| ir.cpp:2020:9:2020:17 | Unary | r2020_8 | +| ir.cpp:2020:9:2020:17 | Unary | r2020_9 | +| ir.cpp:2020:13:2020:13 | StoreValue | r2020_19 | +| ir.cpp:2020:17:2020:17 | StoreValue | r2020_22 | +| ir.cpp:2021:5:2021:5 | Address | &:r2021_1 | +| ir.cpp:2021:5:2021:5 | Address | &:r2021_1 | +| ir.cpp:2021:5:2021:5 | Arg(this) | this:r2021_1 | +| ir.cpp:2021:5:2021:5 | ChiPartial | partial:m2021_19 | +| ir.cpp:2021:5:2021:5 | ChiTotal | total:m2020_17 | +| ir.cpp:2021:5:2021:5 | SideEffect | m2020_17 | +| ir.cpp:2021:7:2021:7 | CallTarget | func:r2021_2 | +| ir.cpp:2021:7:2021:7 | ChiPartial | partial:m2021_15 | +| ir.cpp:2021:7:2021:7 | ChiTotal | total:m2021_7 | +| ir.cpp:2021:7:2021:7 | SideEffect | ~m2021_7 | +| ir.cpp:2021:7:2021:7 | Unary | r2021_14 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_4 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_9 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_35 | +| ir.cpp:2021:9:2021:9 | Address | &:r2021_46 | +| ir.cpp:2021:9:2021:9 | Condition | r2021_5 | +| ir.cpp:2021:9:2021:9 | Load | m2019_6 | +| ir.cpp:2021:9:2021:9 | Load | m2021_8 | +| ir.cpp:2021:9:2021:9 | Phi | from 5:m2021_36 | +| ir.cpp:2021:9:2021:9 | Phi | from 5:~m2021_30 | +| ir.cpp:2021:9:2021:9 | Phi | from 6:m2021_47 | +| ir.cpp:2021:9:2021:9 | Phi | from 6:~m2021_42 | +| ir.cpp:2021:9:2021:9 | StoreValue | r2021_10 | +| ir.cpp:2021:9:2021:34 | Address | &:r2021_3 | +| ir.cpp:2021:9:2021:34 | Address | &:r2021_13 | +| ir.cpp:2021:9:2021:34 | Arg(0) | 0:r2021_13 | +| ir.cpp:2021:9:2021:34 | SideEffect | ~m2021_11 | +| ir.cpp:2021:9:2021:34 | Unary | r2021_3 | +| ir.cpp:2021:9:2021:34 | Unary | r2021_12 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_22 | +| ir.cpp:2021:13:2021:13 | Address | &:r2021_27 | +| ir.cpp:2021:13:2021:13 | Arg(0) | 0:r2021_27 | +| ir.cpp:2021:13:2021:13 | Arg(this) | this:r2021_22 | +| ir.cpp:2021:13:2021:13 | CallTarget | func:r2021_24 | +| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_29 | +| ir.cpp:2021:13:2021:13 | ChiPartial | partial:m2021_32 | +| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2020_13 | +| ir.cpp:2021:13:2021:13 | ChiTotal | total:m2021_23 | +| ir.cpp:2021:13:2021:13 | Load | m2021_33 | +| ir.cpp:2021:13:2021:13 | SideEffect | ~m2019_8 | +| ir.cpp:2021:13:2021:13 | SideEffect | ~m2020_13 | +| ir.cpp:2021:13:2021:13 | StoreValue | r2021_34 | +| ir.cpp:2021:13:2021:13 | Unary | r2021_25 | +| ir.cpp:2021:13:2021:13 | Unary | r2021_26 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | +| ir.cpp:2021:17:2021:34 | Address | &:r2021_37 | +| ir.cpp:2021:17:2021:34 | Arg(this) | this:r2021_37 | +| ir.cpp:2021:17:2021:34 | CallTarget | func:r2021_39 | +| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_41 | +| ir.cpp:2021:17:2021:34 | ChiPartial | partial:m2021_43 | +| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2020_13 | +| ir.cpp:2021:17:2021:34 | ChiTotal | total:m2021_38 | +| ir.cpp:2021:17:2021:34 | Load | m2021_44 | +| ir.cpp:2021:17:2021:34 | SideEffect | ~m2020_13 | +| ir.cpp:2021:17:2021:34 | StoreValue | r2021_45 | +| ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | +| ir.cpp:2022:5:2022:5 | Address | &:r2022_1 | +| ir.cpp:2022:5:2022:5 | Arg(this) | this:r2022_1 | +| ir.cpp:2022:5:2022:5 | ChiPartial | partial:m2022_19 | +| ir.cpp:2022:5:2022:5 | ChiTotal | total:m2021_20 | +| ir.cpp:2022:5:2022:5 | SideEffect | m2021_20 | +| ir.cpp:2022:7:2022:7 | CallTarget | func:r2022_2 | +| ir.cpp:2022:7:2022:7 | ChiPartial | partial:m2022_15 | +| ir.cpp:2022:7:2022:7 | ChiTotal | total:m2022_7 | +| ir.cpp:2022:7:2022:7 | SideEffect | ~m2022_7 | +| ir.cpp:2022:7:2022:7 | Unary | r2022_14 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_4 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_9 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_31 | +| ir.cpp:2022:9:2022:9 | Address | &:r2022_42 | +| ir.cpp:2022:9:2022:9 | Condition | r2022_5 | +| ir.cpp:2022:9:2022:9 | Load | m2019_6 | +| ir.cpp:2022:9:2022:9 | Load | m2022_8 | +| ir.cpp:2022:9:2022:9 | Phi | from 8:m2022_32 | +| ir.cpp:2022:9:2022:9 | Phi | from 8:~m2022_27 | +| ir.cpp:2022:9:2022:9 | Phi | from 9:m2022_43 | +| ir.cpp:2022:9:2022:9 | Phi | from 9:~m2022_38 | +| ir.cpp:2022:9:2022:9 | StoreValue | r2022_10 | +| ir.cpp:2022:9:2022:51 | Address | &:r2022_3 | +| ir.cpp:2022:9:2022:51 | Address | &:r2022_13 | +| ir.cpp:2022:9:2022:51 | Arg(0) | 0:r2022_13 | +| ir.cpp:2022:9:2022:51 | SideEffect | ~m2022_11 | +| ir.cpp:2022:9:2022:51 | Unary | r2022_3 | +| ir.cpp:2022:9:2022:51 | Unary | r2022_12 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | +| ir.cpp:2022:13:2022:30 | Address | &:r2022_22 | +| ir.cpp:2022:13:2022:30 | Arg(this) | this:r2022_22 | +| ir.cpp:2022:13:2022:30 | CallTarget | func:r2022_24 | +| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_26 | +| ir.cpp:2022:13:2022:30 | ChiPartial | partial:m2022_28 | +| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2021_16 | +| ir.cpp:2022:13:2022:30 | ChiTotal | total:m2022_23 | +| ir.cpp:2022:13:2022:30 | Load | m2022_29 | +| ir.cpp:2022:13:2022:30 | SideEffect | ~m2021_16 | +| ir.cpp:2022:13:2022:30 | StoreValue | r2022_30 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | +| ir.cpp:2022:34:2022:51 | Address | &:r2022_33 | +| ir.cpp:2022:34:2022:51 | Arg(this) | this:r2022_33 | +| ir.cpp:2022:34:2022:51 | CallTarget | func:r2022_35 | +| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_37 | +| ir.cpp:2022:34:2022:51 | ChiPartial | partial:m2022_39 | +| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2021_16 | +| ir.cpp:2022:34:2022:51 | ChiTotal | total:m2022_34 | +| ir.cpp:2022:34:2022:51 | Load | m2022_40 | +| ir.cpp:2022:34:2022:51 | SideEffect | ~m2021_16 | +| ir.cpp:2022:34:2022:51 | StoreValue | r2022_41 | +| ir.cpp:2023:5:2023:19 | ChiPartial | partial:m2023_35 | +| ir.cpp:2023:5:2023:19 | ChiTotal | total:m2023_17 | +| ir.cpp:2023:5:2023:19 | SideEffect | m2023_17 | +| ir.cpp:2023:6:2023:6 | Address | &:r2023_1 | +| ir.cpp:2023:6:2023:6 | Address | &:r2023_1 | +| ir.cpp:2023:6:2023:6 | Arg(this) | this:r2023_1 | +| ir.cpp:2023:6:2023:6 | ChiPartial | partial:m2023_16 | +| ir.cpp:2023:6:2023:6 | ChiTotal | total:m2022_20 | +| ir.cpp:2023:6:2023:6 | SideEffect | m2022_20 | +| ir.cpp:2023:8:2023:8 | CallTarget | func:r2023_2 | +| ir.cpp:2023:8:2023:8 | ChiPartial | partial:m2023_12 | +| ir.cpp:2023:8:2023:8 | ChiTotal | total:m2022_16 | +| ir.cpp:2023:8:2023:8 | SideEffect | ~m2022_16 | +| ir.cpp:2023:8:2023:8 | Unary | r2023_11 | +| ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | +| ir.cpp:2023:8:2023:19 | Address | &:r2023_18 | +| ir.cpp:2023:8:2023:19 | Arg(this) | this:r2023_18 | +| ir.cpp:2023:10:2023:10 | Address | &:r2023_3 | +| ir.cpp:2023:10:2023:10 | Condition | r2023_4 | +| ir.cpp:2023:10:2023:10 | Load | m2019_6 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_7 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_10 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_39 | +| ir.cpp:2023:10:2023:18 | Address | &:r2023_42 | +| ir.cpp:2023:10:2023:18 | Arg(0) | 0:r2023_10 | +| ir.cpp:2023:10:2023:18 | Load | m2023_6 | +| ir.cpp:2023:10:2023:18 | Phi | from 11:m2023_40 | +| ir.cpp:2023:10:2023:18 | Phi | from 12:m2023_43 | +| ir.cpp:2023:10:2023:18 | SideEffect | ~m2023_13 | +| ir.cpp:2023:10:2023:18 | Unary | r2023_8 | +| ir.cpp:2023:10:2023:18 | Unary | r2023_9 | +| ir.cpp:2023:14:2023:14 | StoreValue | r2023_38 | +| ir.cpp:2023:18:2023:18 | StoreValue | r2023_41 | +| ir.cpp:2023:21:2023:21 | CallTarget | func:r2023_19 | +| ir.cpp:2023:21:2023:21 | ChiPartial | partial:m2023_31 | +| ir.cpp:2023:21:2023:21 | ChiTotal | total:m2023_25 | +| ir.cpp:2023:21:2023:21 | SideEffect | ~m2023_25 | +| ir.cpp:2023:21:2023:21 | Unary | r2023_30 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_20 | +| ir.cpp:2023:23:2023:40 | Address | &:r2023_29 | +| ir.cpp:2023:23:2023:40 | Arg(0) | 0:r2023_29 | +| ir.cpp:2023:23:2023:40 | Arg(this) | this:r2023_20 | +| ir.cpp:2023:23:2023:40 | CallTarget | func:r2023_22 | +| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_24 | +| ir.cpp:2023:23:2023:40 | ChiPartial | partial:m2023_26 | +| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_13 | +| ir.cpp:2023:23:2023:40 | ChiTotal | total:m2023_21 | +| ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_13 | +| ir.cpp:2023:23:2023:40 | SideEffect | ~m2023_27 | +| ir.cpp:2023:23:2023:40 | Unary | r2023_20 | +| ir.cpp:2023:23:2023:40 | Unary | r2023_28 | +| ir.cpp:2028:14:2028:22 | Address | &:r2028_7 | +| ir.cpp:2028:14:2028:22 | ChiPartial | partial:m2028_3 | +| ir.cpp:2028:14:2028:22 | ChiTotal | total:m2028_2 | +| ir.cpp:2028:14:2028:22 | Load | m2033_2 | +| ir.cpp:2028:14:2028:22 | SideEffect | ~m2030_6 | +| ir.cpp:2028:37:2028:37 | Address | &:r2028_5 | +| ir.cpp:2029:16:2029:16 | Address | &:r2029_1 | +| ir.cpp:2030:3:2030:3 | Address | &:r2030_10 | +| ir.cpp:2030:7:2030:7 | Address | &:r2030_1 | +| ir.cpp:2030:7:2030:7 | Left | r2030_2 | +| ir.cpp:2030:7:2030:7 | Load | m2028_6 | +| ir.cpp:2030:7:2030:13 | Condition | r2030_4 | +| ir.cpp:2030:7:2032:28 | Address | &:r2030_8 | +| ir.cpp:2030:7:2032:28 | Address | &:r2030_12 | +| ir.cpp:2030:7:2032:28 | Address | &:r2030_14 | +| ir.cpp:2030:7:2032:28 | Load | m2030_7 | +| ir.cpp:2030:7:2032:28 | Phi | from 2:m2030_13 | +| ir.cpp:2030:7:2032:28 | Phi | from 2:~m2031_6 | +| ir.cpp:2030:7:2032:28 | Phi | from 3:m2030_15 | +| ir.cpp:2030:7:2032:28 | Phi | from 3:~m2032_6 | +| ir.cpp:2030:7:2032:28 | StoreValue | r2030_9 | +| ir.cpp:2030:11:2030:13 | Right | r2030_3 | +| ir.cpp:2031:6:2031:20 | CallTarget | func:r2031_1 | +| ir.cpp:2031:6:2031:20 | ChiPartial | partial:m2031_5 | +| ir.cpp:2031:6:2031:20 | ChiTotal | total:m2028_4 | +| ir.cpp:2031:6:2031:20 | SideEffect | ~m2028_4 | +| ir.cpp:2031:6:2031:26 | StoreValue | r2031_9 | +| ir.cpp:2031:22:2031:22 | Address | &:r2031_2 | +| ir.cpp:2031:22:2031:22 | Arg(0) | 0:r2031_3 | +| ir.cpp:2031:22:2031:22 | Load | m2028_6 | +| ir.cpp:2031:26:2031:26 | Address | &:r2031_7 | +| ir.cpp:2031:26:2031:26 | Load | m2028_6 | +| ir.cpp:2031:26:2031:26 | Unary | r2031_8 | +| ir.cpp:2032:5:2032:28 | StoreValue | r2032_9 | +| ir.cpp:2032:6:2032:20 | CallTarget | func:r2032_1 | +| ir.cpp:2032:6:2032:20 | ChiPartial | partial:m2032_5 | +| ir.cpp:2032:6:2032:20 | ChiTotal | total:m2028_4 | +| ir.cpp:2032:6:2032:20 | SideEffect | ~m2028_4 | +| ir.cpp:2032:6:2032:27 | Unary | r2032_8 | +| ir.cpp:2032:22:2032:22 | Address | &:r2032_2 | +| ir.cpp:2032:22:2032:22 | Arg(0) | 0:r2032_3 | +| ir.cpp:2032:22:2032:22 | Load | m2028_6 | +| ir.cpp:2032:26:2032:27 | Unary | r2032_7 | +| ir.cpp:2033:1:2033:1 | Address | &:r2033_1 | +| ir.cpp:2035:6:2035:17 | ChiPartial | partial:m2035_3 | +| ir.cpp:2035:6:2035:17 | ChiTotal | total:m2035_2 | +| ir.cpp:2035:6:2035:17 | SideEffect | ~m2038_6 | +| ir.cpp:2036:8:2036:8 | Address | &:r2036_1 | +| ir.cpp:2036:12:2036:18 | Address | &:r2036_4 | +| ir.cpp:2036:12:2036:18 | Arg(0) | 0:r2036_3 | +| ir.cpp:2036:12:2036:18 | CallTarget | func:r2036_2 | +| ir.cpp:2036:12:2036:18 | ChiPartial | partial:m2036_5 | +| ir.cpp:2036:12:2036:18 | ChiTotal | total:m2035_4 | +| ir.cpp:2036:12:2036:18 | SideEffect | ~m2035_4 | +| ir.cpp:2036:12:2036:18 | StoreValue | r2036_8 | +| ir.cpp:2036:12:2036:18 | Unary | r2036_4 | +| ir.cpp:2037:3:2037:4 | Address | &:r2037_4 | +| ir.cpp:2037:3:2037:8 | ChiPartial | partial:m2037_5 | +| ir.cpp:2037:3:2037:8 | ChiTotal | total:m2036_7 | +| ir.cpp:2037:4:2037:4 | Address | &:r2037_2 | +| ir.cpp:2037:4:2037:4 | Load | m2036_9 | +| ir.cpp:2037:4:2037:4 | Unary | r2037_3 | +| ir.cpp:2037:8:2037:8 | StoreValue | r2037_1 | +| ir.cpp:2038:3:2038:10 | CallTarget | func:r2038_1 | +| ir.cpp:2038:3:2038:10 | ChiPartial | partial:m2038_5 | +| ir.cpp:2038:3:2038:10 | ChiTotal | total:m2036_6 | +| ir.cpp:2038:3:2038:10 | SideEffect | ~m2036_6 | +| ir.cpp:2038:10:2038:10 | Address | &:r2038_2 | +| ir.cpp:2038:10:2038:10 | Arg(0) | 0:r2038_3 | +| ir.cpp:2038:10:2038:10 | Load | m2036_9 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_5 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_5 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_7 | +| ir.cpp:2041:7:2041:7 | Address | &:r2041_7 | +| ir.cpp:2041:7:2041:7 | ChiPartial | partial:m2041_3 | +| ir.cpp:2041:7:2041:7 | ChiTotal | total:m2041_2 | +| ir.cpp:2041:7:2041:7 | Load | m2041_6 | +| ir.cpp:2041:7:2041:7 | SideEffect | m2041_3 | +| ir.cpp:2041:7:2041:7 | SideEffect | m2041_8 | +| ir.cpp:2043:10:2043:24 | ChiPartial | partial:m2043_3 | +| ir.cpp:2043:10:2043:24 | ChiTotal | total:m2043_2 | +| ir.cpp:2043:10:2043:24 | SideEffect | m2043_3 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_5 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_5 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_7 | +| ir.cpp:2043:32:2043:32 | Address | &:r2043_7 | +| ir.cpp:2043:32:2043:32 | Load | m2043_6 | +| ir.cpp:2043:32:2043:32 | SideEffect | m2043_8 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_5 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_5 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_7 | +| ir.cpp:2045:13:2045:18 | Address | &:r2045_7 | +| ir.cpp:2045:13:2045:18 | ChiPartial | partial:m2045_3 | +| ir.cpp:2045:13:2045:18 | ChiTotal | total:m2045_2 | +| ir.cpp:2045:13:2045:18 | Load | m2045_6 | +| ir.cpp:2045:13:2045:18 | SideEffect | m2045_3 | +| ir.cpp:2045:13:2045:18 | SideEffect | m2045_8 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_5 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_5 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_7 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_7 | +| ir.cpp:2048:7:2048:7 | Address | &:r2048_9 | +| ir.cpp:2048:7:2048:7 | Arg(this) | this:r2048_9 | +| ir.cpp:2048:7:2048:7 | CallTarget | func:r2048_10 | +| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_3 | +| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_12 | +| ir.cpp:2048:7:2048:7 | ChiPartial | partial:m2048_14 | +| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_2 | +| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_4 | +| ir.cpp:2048:7:2048:7 | ChiTotal | total:m2048_8 | +| ir.cpp:2048:7:2048:7 | Load | m2048_6 | +| ir.cpp:2048:7:2048:7 | SideEffect | m2048_15 | +| ir.cpp:2048:7:2048:7 | SideEffect | ~m2048_4 | +| ir.cpp:2048:7:2048:7 | SideEffect | ~m2048_13 | +| ir.cpp:2048:7:2048:7 | Unary | m2048_6 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_5 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_5 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_7 | +| ir.cpp:2051:5:2051:13 | Address | &:r2051_7 | +| ir.cpp:2051:5:2051:13 | ChiPartial | partial:m2051_3 | +| ir.cpp:2051:5:2051:13 | ChiTotal | total:m2051_2 | +| ir.cpp:2051:5:2051:13 | Load | m2051_6 | +| ir.cpp:2051:5:2051:13 | SideEffect | m2051_8 | +| ir.cpp:2051:5:2051:13 | SideEffect | ~m2051_14 | +| ir.cpp:2051:5:2051:13 | Unary | m2051_6 | +| ir.cpp:2051:18:2051:18 | Arg(this) | this:r2051_10 | +| ir.cpp:2051:18:2051:18 | CallTarget | func:r2051_11 | +| ir.cpp:2051:18:2051:18 | ChiPartial | partial:m2051_13 | +| ir.cpp:2051:18:2051:18 | ChiTotal | total:m2051_4 | +| ir.cpp:2051:18:2051:18 | SideEffect | ~m2051_4 | +| ir.cpp:2053:10:2053:24 | ChiPartial | partial:m2053_3 | +| ir.cpp:2053:10:2053:24 | ChiTotal | total:m2053_2 | +| ir.cpp:2053:10:2053:24 | SideEffect | m2053_3 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_5 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_5 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_7 | +| ir.cpp:2053:32:2053:32 | Address | &:r2053_7 | +| ir.cpp:2053:32:2053:32 | Load | m2053_6 | +| ir.cpp:2053:32:2053:32 | SideEffect | m2053_8 | +| ir.cpp:2058:5:2058:18 | Address | &:r2058_5 | +| ir.cpp:2058:5:2058:18 | ChiPartial | partial:m2058_3 | +| ir.cpp:2058:5:2058:18 | ChiTotal | total:m2058_2 | +| ir.cpp:2058:5:2058:18 | Load | m2068_2 | +| ir.cpp:2058:5:2058:18 | SideEffect | ~m2067_6 | +| ir.cpp:2060:12:2060:13 | Address | &:r2060_1 | +| ir.cpp:2060:17:2060:27 | Address | &:r2060_4 | +| ir.cpp:2060:17:2060:27 | Address | &:r2060_8 | +| ir.cpp:2060:17:2060:27 | Arg(0) | 0:r2060_3 | +| ir.cpp:2060:17:2060:27 | Arg(this) | this:r2060_8 | +| ir.cpp:2060:17:2060:27 | CallTarget | func:r2060_2 | +| ir.cpp:2060:17:2060:27 | CallTarget | func:r2060_9 | +| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_5 | +| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_11 | +| ir.cpp:2060:17:2060:27 | ChiPartial | partial:m2060_13 | +| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2058_4 | +| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2060_6 | +| ir.cpp:2060:17:2060:27 | ChiTotal | total:m2060_7 | +| ir.cpp:2060:17:2060:27 | SideEffect | ~m2058_4 | +| ir.cpp:2060:17:2060:27 | SideEffect | ~m2060_6 | +| ir.cpp:2060:17:2060:27 | StoreValue | r2060_8 | +| ir.cpp:2060:17:2060:27 | Unary | r2060_4 | +| ir.cpp:2061:5:2061:13 | CallTarget | func:r2061_1 | +| ir.cpp:2061:5:2061:13 | ChiPartial | partial:m2061_5 | +| ir.cpp:2061:5:2061:13 | ChiTotal | total:m2060_12 | +| ir.cpp:2061:5:2061:13 | SideEffect | ~m2060_12 | +| ir.cpp:2061:12:2061:13 | Address | &:r2061_2 | +| ir.cpp:2061:12:2061:13 | Arg(0) | 0:r2061_3 | +| ir.cpp:2061:12:2061:13 | Load | m2060_15 | +| ir.cpp:2063:12:2063:13 | Address | &:r2063_1 | +| ir.cpp:2063:17:2063:30 | Address | &:r2063_4 | +| ir.cpp:2063:17:2063:30 | Address | &:r2063_8 | +| ir.cpp:2063:17:2063:30 | Arg(0) | 0:r2063_3 | +| ir.cpp:2063:17:2063:30 | Arg(this) | this:r2063_8 | +| ir.cpp:2063:17:2063:30 | CallTarget | func:r2063_2 | +| ir.cpp:2063:17:2063:30 | CallTarget | func:r2063_9 | +| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_5 | +| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_11 | +| ir.cpp:2063:17:2063:30 | ChiPartial | partial:m2063_13 | +| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2061_6 | +| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2063_6 | +| ir.cpp:2063:17:2063:30 | ChiTotal | total:m2063_7 | +| ir.cpp:2063:17:2063:30 | SideEffect | ~m2061_6 | +| ir.cpp:2063:17:2063:30 | SideEffect | ~m2063_6 | +| ir.cpp:2063:17:2063:30 | StoreValue | r2063_15 | +| ir.cpp:2063:17:2063:30 | Unary | r2063_4 | +| ir.cpp:2063:17:2063:30 | Unary | r2063_8 | +| ir.cpp:2064:5:2064:13 | CallTarget | func:r2064_1 | +| ir.cpp:2064:5:2064:13 | ChiPartial | partial:m2064_5 | +| ir.cpp:2064:5:2064:13 | ChiTotal | total:m2063_12 | +| ir.cpp:2064:5:2064:13 | SideEffect | ~m2063_12 | +| ir.cpp:2064:12:2064:13 | Address | &:r2064_2 | +| ir.cpp:2064:12:2064:13 | Arg(0) | 0:r2064_3 | +| ir.cpp:2064:12:2064:13 | Load | m2063_16 | +| ir.cpp:2066:15:2066:15 | Address | &:r2066_1 | +| ir.cpp:2066:19:2066:32 | Address | &:r2066_4 | +| ir.cpp:2066:19:2066:32 | Address | &:r2066_8 | +| ir.cpp:2066:19:2066:32 | Arg(0) | 0:r2066_3 | +| ir.cpp:2066:19:2066:32 | Arg(this) | this:r2066_8 | +| ir.cpp:2066:19:2066:32 | CallTarget | func:r2066_2 | +| ir.cpp:2066:19:2066:32 | CallTarget | func:r2066_9 | +| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_5 | +| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_11 | +| ir.cpp:2066:19:2066:32 | ChiPartial | partial:m2066_13 | +| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2064_6 | +| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2066_6 | +| ir.cpp:2066:19:2066:32 | ChiTotal | total:m2066_7 | +| ir.cpp:2066:19:2066:32 | SideEffect | ~m2064_6 | +| ir.cpp:2066:19:2066:32 | SideEffect | ~m2066_6 | +| ir.cpp:2066:19:2066:32 | StoreValue | r2066_8 | +| ir.cpp:2066:19:2066:32 | Unary | r2066_4 | +| ir.cpp:2067:5:2067:12 | CallTarget | func:r2067_1 | +| ir.cpp:2067:5:2067:12 | ChiPartial | partial:m2067_5 | +| ir.cpp:2067:5:2067:12 | ChiTotal | total:m2066_12 | +| ir.cpp:2067:5:2067:12 | SideEffect | ~m2066_12 | +| ir.cpp:2067:12:2067:12 | Address | &:r2067_2 | +| ir.cpp:2067:12:2067:12 | Arg(0) | 0:r2067_3 | +| ir.cpp:2067:12:2067:12 | Load | m2066_15 | +| ir.cpp:2068:1:2068:1 | Address | &:r2068_1 | +| ir.cpp:2072:6:2072:26 | ChiPartial | partial:m2072_3 | +| ir.cpp:2072:6:2072:26 | ChiTotal | total:m2072_2 | +| ir.cpp:2072:6:2072:26 | SideEffect | ~m2074_5 | +| ir.cpp:2073:13:2073:13 | Address | &:r2073_1 | +| ir.cpp:2073:16:2073:19 | StoreValue | r2073_2 | +| ir.cpp:2074:3:2074:27 | CallTarget | func:r2074_1 | +| ir.cpp:2074:3:2074:27 | ChiPartial | partial:m2074_4 | +| ir.cpp:2074:3:2074:27 | ChiTotal | total:m2072_4 | +| ir.cpp:2074:3:2074:27 | SideEffect | ~m2072_4 | +| ir.cpp:2074:29:2074:29 | Arg(0) | 0:r2074_2 | +| ir.cpp:2079:5:2079:11 | Address | &:r2079_6 | +| ir.cpp:2079:5:2079:11 | ChiPartial | partial:m2079_3 | +| ir.cpp:2079:5:2079:11 | ChiTotal | total:m2079_2 | +| ir.cpp:2079:5:2079:11 | Load | m2084_4 | +| ir.cpp:2079:5:2079:11 | SideEffect | ~m2083_4 | +| ir.cpp:2080:9:2080:9 | Address | &:r2080_1 | +| ir.cpp:2080:13:2080:15 | CallTarget | func:r2080_2 | +| ir.cpp:2080:13:2080:15 | ChiPartial | partial:m2080_6 | +| ir.cpp:2080:13:2080:15 | ChiTotal | total:m2079_4 | +| ir.cpp:2080:13:2080:15 | SideEffect | ~m2079_4 | +| ir.cpp:2080:13:2080:15 | StoreValue | r2080_5 | +| ir.cpp:2080:17:2080:17 | Arg(0) | 0:r2080_3 | +| ir.cpp:2080:19:2080:19 | Arg(1) | 1:r2080_4 | +| ir.cpp:2081:9:2081:9 | Address | &:r2081_1 | +| ir.cpp:2081:9:2081:9 | Left | r2081_2 | +| ir.cpp:2081:9:2081:9 | Load | m2080_8 | +| ir.cpp:2081:9:2081:14 | Condition | r2081_4 | +| ir.cpp:2081:14:2081:14 | Right | r2081_3 | +| ir.cpp:2082:9:2082:12 | CallTarget | func:r2082_1 | +| ir.cpp:2082:9:2082:12 | ChiPartial | partial:m2082_4 | +| ir.cpp:2082:9:2082:12 | ChiTotal | total:m2080_7 | +| ir.cpp:2082:9:2082:12 | SideEffect | ~m2080_7 | +| ir.cpp:2082:14:2082:14 | Arg(0) | 0:r2082_2 | +| ir.cpp:2083:5:2083:12 | CallTarget | func:r2083_1 | +| ir.cpp:2083:5:2083:12 | ChiPartial | partial:m2083_3 | +| ir.cpp:2083:5:2083:12 | ChiTotal | total:m2080_7 | +| ir.cpp:2083:5:2083:12 | SideEffect | ~m2080_7 | +| ir.cpp:2084:5:2084:13 | Address | &:r2084_1 | +| ir.cpp:2084:12:2084:12 | Address | &:r2084_2 | +| ir.cpp:2084:12:2084:12 | Load | m2080_8 | +| ir.cpp:2084:12:2084:12 | StoreValue | r2084_3 | +| ir.cpp:2087:6:2087:17 | ChiPartial | partial:m2087_3 | +| ir.cpp:2087:6:2087:17 | ChiTotal | total:m2087_2 | +| ir.cpp:2088:5:2088:12 | CallTarget | func:r2088_1 | +| ir.cpp:2088:5:2088:12 | ChiPartial | partial:m2088_3 | +| ir.cpp:2088:5:2088:12 | ChiTotal | total:m2087_4 | +| ir.cpp:2088:5:2088:12 | SideEffect | ~m2087_4 | +| ir.cpp:2089:5:2089:8 | CallTarget | func:r2089_1 | +| ir.cpp:2089:5:2089:8 | ChiPartial | partial:m2089_4 | +| ir.cpp:2089:5:2089:8 | ChiTotal | total:m2088_4 | +| ir.cpp:2089:5:2089:8 | SideEffect | ~m2088_4 | +| ir.cpp:2089:10:2089:10 | Arg(0) | 0:r2089_2 | +| ir.cpp:2092:5:2092:16 | Address | &:r2092_6 | +| ir.cpp:2092:5:2092:16 | ChiPartial | partial:m2092_3 | +| ir.cpp:2092:5:2092:16 | ChiTotal | total:m2092_2 | +| ir.cpp:2092:5:2092:16 | Load | m2097_4 | +| ir.cpp:2092:5:2092:16 | SideEffect | ~m2096_4 | +| ir.cpp:2093:9:2093:9 | Address | &:r2093_1 | +| ir.cpp:2093:13:2093:15 | CallTarget | func:r2093_2 | +| ir.cpp:2093:13:2093:15 | ChiPartial | partial:m2093_6 | +| ir.cpp:2093:13:2093:15 | ChiTotal | total:m2092_4 | +| ir.cpp:2093:13:2093:15 | SideEffect | ~m2092_4 | +| ir.cpp:2093:13:2093:15 | StoreValue | r2093_5 | +| ir.cpp:2093:17:2093:17 | Arg(0) | 0:r2093_3 | +| ir.cpp:2093:19:2093:19 | Arg(1) | 1:r2093_4 | +| ir.cpp:2094:9:2094:9 | Address | &:r2094_1 | +| ir.cpp:2094:9:2094:9 | Left | r2094_2 | +| ir.cpp:2094:9:2094:9 | Load | m2093_8 | +| ir.cpp:2094:9:2094:14 | Condition | r2094_4 | +| ir.cpp:2094:14:2094:14 | Right | r2094_3 | +| ir.cpp:2095:9:2095:20 | CallTarget | func:r2095_1 | +| ir.cpp:2096:5:2096:12 | CallTarget | func:r2096_1 | +| ir.cpp:2096:5:2096:12 | ChiPartial | partial:m2096_3 | +| ir.cpp:2096:5:2096:12 | ChiTotal | total:m2093_7 | +| ir.cpp:2096:5:2096:12 | SideEffect | ~m2093_7 | +| ir.cpp:2097:5:2097:13 | Address | &:r2097_1 | +| ir.cpp:2097:12:2097:12 | Address | &:r2097_2 | +| ir.cpp:2097:12:2097:12 | Load | m2093_8 | +| ir.cpp:2097:12:2097:12 | StoreValue | r2097_3 | +| ir.cpp:2100:6:2100:24 | ChiPartial | partial:m2100_3 | +| ir.cpp:2100:6:2100:24 | ChiTotal | total:m2100_2 | +| ir.cpp:2100:6:2100:24 | SideEffect | ~m2106_8 | +| ir.cpp:2100:33:2100:33 | Address | &:r2100_5 | +| ir.cpp:2101:3:2101:12 | Address | &:r2101_6 | +| ir.cpp:2101:3:2101:12 | Arg(0) | 0:r2101_5 | +| ir.cpp:2101:3:2101:12 | CallTarget | func:r2101_1 | +| ir.cpp:2101:3:2101:12 | ChiPartial | partial:m2101_7 | +| ir.cpp:2101:3:2101:12 | ChiTotal | total:m2100_4 | +| ir.cpp:2101:3:2101:12 | Right | r2101_4 | +| ir.cpp:2101:3:2101:12 | SideEffect | ~m2100_4 | +| ir.cpp:2101:3:2101:12 | Unary | r2101_6 | +| ir.cpp:2101:11:2101:11 | Address | &:r2101_2 | +| ir.cpp:2101:11:2101:11 | Left | r2101_3 | +| ir.cpp:2101:11:2101:11 | Load | m2100_6 | +| ir.cpp:2102:3:2102:18 | Address | &:r2102_7 | +| ir.cpp:2102:3:2102:18 | Arg(0) | 0:r2102_5 | +| ir.cpp:2102:3:2102:18 | CallTarget | func:r2102_1 | +| ir.cpp:2102:3:2102:18 | ChiPartial | partial:m2102_8 | +| ir.cpp:2102:3:2102:18 | ChiTotal | total:m2101_8 | +| ir.cpp:2102:3:2102:18 | Right | r2102_4 | +| ir.cpp:2102:3:2102:18 | SideEffect | ~m2101_8 | +| ir.cpp:2102:3:2102:18 | Unary | r2102_7 | +| ir.cpp:2102:7:2102:10 | Arg(1) | 1:r2102_6 | +| ir.cpp:2102:17:2102:17 | Address | &:r2102_2 | +| ir.cpp:2102:17:2102:17 | Left | r2102_3 | +| ir.cpp:2102:17:2102:17 | Load | m2100_6 | +| ir.cpp:2103:3:2103:15 | Address | &:r2103_6 | +| ir.cpp:2103:3:2103:15 | Arg(0) | 0:r2103_5 | +| ir.cpp:2103:3:2103:15 | CallTarget | func:r2103_1 | +| ir.cpp:2103:3:2103:15 | ChiPartial | partial:m2103_7 | +| ir.cpp:2103:3:2103:15 | ChiTotal | total:m2102_9 | +| ir.cpp:2103:3:2103:15 | Right | r2103_4 | +| ir.cpp:2103:3:2103:15 | SideEffect | ~m2102_9 | +| ir.cpp:2103:3:2103:15 | Unary | r2103_6 | +| ir.cpp:2103:14:2103:14 | Address | &:r2103_2 | +| ir.cpp:2103:14:2103:14 | Left | r2103_3 | +| ir.cpp:2103:14:2103:14 | Load | m2100_6 | +| ir.cpp:2104:3:2104:20 | Address | &:r2104_7 | +| ir.cpp:2104:3:2104:20 | Arg(0) | 0:r2104_5 | +| ir.cpp:2104:3:2104:20 | CallTarget | func:r2104_1 | +| ir.cpp:2104:3:2104:20 | ChiPartial | partial:m2104_8 | +| ir.cpp:2104:3:2104:20 | ChiTotal | total:m2103_8 | +| ir.cpp:2104:3:2104:20 | Right | r2104_4 | +| ir.cpp:2104:3:2104:20 | SideEffect | ~m2103_8 | +| ir.cpp:2104:3:2104:20 | Unary | r2104_7 | +| ir.cpp:2104:19:2104:19 | Address | &:r2104_2 | +| ir.cpp:2104:19:2104:19 | Left | r2104_3 | +| ir.cpp:2104:19:2104:19 | Load | m2100_6 | +| ir.cpp:2104:21:2104:21 | Arg(1) | 1:r2104_6 | +| ir.cpp:2105:3:2105:36 | Address | &:r2105_6 | +| ir.cpp:2105:3:2105:36 | Arg(0) | 0:r2105_5 | +| ir.cpp:2105:3:2105:36 | CallTarget | func:r2105_1 | +| ir.cpp:2105:3:2105:36 | ChiPartial | partial:m2105_7 | +| ir.cpp:2105:3:2105:36 | ChiTotal | total:m2104_9 | +| ir.cpp:2105:3:2105:36 | Right | r2105_4 | +| ir.cpp:2105:3:2105:36 | SideEffect | ~m2104_9 | +| ir.cpp:2105:3:2105:36 | Unary | r2105_6 | +| ir.cpp:2105:35:2105:35 | Address | &:r2105_2 | +| ir.cpp:2105:35:2105:35 | Left | r2105_3 | +| ir.cpp:2105:35:2105:35 | Load | m2100_6 | +| ir.cpp:2106:3:2106:24 | Address | &:r2106_6 | +| ir.cpp:2106:3:2106:24 | Arg(0) | 0:r2106_5 | +| ir.cpp:2106:3:2106:24 | CallTarget | func:r2106_1 | +| ir.cpp:2106:3:2106:24 | ChiPartial | partial:m2106_7 | +| ir.cpp:2106:3:2106:24 | ChiTotal | total:m2105_8 | +| ir.cpp:2106:3:2106:24 | Right | r2106_4 | +| ir.cpp:2106:3:2106:24 | SideEffect | ~m2105_8 | +| ir.cpp:2106:3:2106:24 | Unary | r2106_6 | +| ir.cpp:2106:11:2106:11 | Address | &:r2106_2 | +| ir.cpp:2106:11:2106:11 | Left | r2106_3 | +| ir.cpp:2106:11:2106:11 | Load | m2100_6 | +| ir.cpp:2111:7:2111:17 | Address | &:r2111_10 | +| ir.cpp:2111:7:2111:17 | ChiPartial | partial:m2111_3 | +| ir.cpp:2111:7:2111:17 | ChiTotal | total:m2111_2 | +| ir.cpp:2111:7:2111:17 | Load | m2114_4 | +| ir.cpp:2111:7:2111:17 | SideEffect | m2111_3 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_5 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_5 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_7 | +| ir.cpp:2111:25:2111:25 | Address | &:r2111_7 | +| ir.cpp:2111:25:2111:25 | Load | m2111_6 | +| ir.cpp:2111:25:2111:25 | SideEffect | m2111_8 | +| ir.cpp:2112:9:2112:11 | Address | &:r2112_1 | +| ir.cpp:2113:10:2113:10 | Address | &:r2113_1 | +| ir.cpp:2113:14:2113:19 | CallTarget | func:r2113_2 | +| ir.cpp:2113:14:2113:19 | StoreValue | r2113_8 | +| ir.cpp:2113:21:2113:21 | Address | &:r2113_3 | +| ir.cpp:2113:21:2113:21 | Address | &:r2113_5 | +| ir.cpp:2113:21:2113:21 | Arg(0) | 0:r2113_5 | +| ir.cpp:2113:21:2113:21 | Load | m2111_6 | +| ir.cpp:2113:21:2113:21 | SideEffect | ~m2111_8 | +| ir.cpp:2113:21:2113:21 | Unary | r2113_4 | +| ir.cpp:2113:24:2113:27 | Address | &:r2113_7 | +| ir.cpp:2113:24:2113:27 | Arg(1) | 1:r2113_7 | +| ir.cpp:2113:24:2113:27 | ChiPartial | partial:m2113_10 | +| ir.cpp:2113:24:2113:27 | ChiTotal | total:m2112_2 | +| ir.cpp:2113:25:2113:27 | Unary | r2113_6 | +| ir.cpp:2114:3:2114:13 | Address | &:r2114_1 | +| ir.cpp:2114:10:2114:12 | Address | &:r2114_2 | +| ir.cpp:2114:10:2114:12 | Load | m2113_11 | +| ir.cpp:2114:10:2114:12 | StoreValue | r2114_3 | +| ir.cpp:2121:6:2121:39 | ChiPartial | partial:m2121_3 | +| ir.cpp:2121:6:2121:39 | ChiTotal | total:m2121_2 | +| ir.cpp:2121:6:2121:39 | SideEffect | ~m2122_8 | +| ir.cpp:2122:6:2122:42 | Address | &:r2122_1 | +| ir.cpp:2122:6:2122:42 | Condition | r2122_12 | +| ir.cpp:2122:22:2122:22 | Address | &:r2122_4 | +| ir.cpp:2122:22:2122:22 | Address | &:r2122_4 | +| ir.cpp:2122:22:2122:22 | Arg(this) | this:r2122_4 | +| ir.cpp:2122:22:2122:22 | CallTarget | func:r2122_5 | +| ir.cpp:2122:22:2122:22 | ChiPartial | partial:m2122_7 | +| ir.cpp:2122:22:2122:22 | ChiPartial | partial:m2122_10 | +| ir.cpp:2122:22:2122:22 | ChiTotal | total:m2121_4 | +| ir.cpp:2122:22:2122:22 | ChiTotal | total:m2122_3 | +| ir.cpp:2122:22:2122:22 | SideEffect | m2122_3 | +| ir.cpp:2122:22:2122:22 | SideEffect | ~m2121_4 | +| ir.cpp:2122:22:2122:22 | Unary | r2122_6 | +| ir.cpp:2122:25:2122:42 | StoreValue | r2122_2 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_5 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_5 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_7 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_7 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_9 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_10 | +| ir.cpp:2125:7:2125:7 | Address | &:r2125_13 | +| ir.cpp:2125:7:2125:7 | ChiPartial | partial:m2125_3 | +| ir.cpp:2125:7:2125:7 | ChiPartial | partial:m2125_15 | +| ir.cpp:2125:7:2125:7 | ChiTotal | total:m2125_2 | +| ir.cpp:2125:7:2125:7 | ChiTotal | total:m2125_8 | +| ir.cpp:2125:7:2125:7 | Load | m0_2 | +| ir.cpp:2125:7:2125:7 | Load | m2125_6 | +| ir.cpp:2125:7:2125:7 | Load | ~m0_4 | +| ir.cpp:2125:7:2125:7 | SideEffect | m2125_3 | +| ir.cpp:2125:7:2125:7 | SideEffect | m2125_16 | +| ir.cpp:2125:7:2125:7 | StoreValue | r2125_14 | +| ir.cpp:2125:7:2125:7 | Unary | m2125_6 | +| ir.cpp:2125:7:2125:7 | Unary | r2125_11 | +| ir.cpp:2125:7:2125:7 | Unary | r2125_12 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_5 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_5 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_7 | +| ir.cpp:2128:5:2128:23 | Address | &:r2128_7 | +| ir.cpp:2128:5:2128:23 | ChiPartial | partial:m2128_3 | +| ir.cpp:2128:5:2128:23 | ChiTotal | total:m2128_2 | +| ir.cpp:2128:5:2128:23 | Load | m2128_6 | +| ir.cpp:2128:5:2128:23 | SideEffect | m2128_20 | +| ir.cpp:2128:5:2128:23 | SideEffect | ~m2128_13 | +| ir.cpp:2128:29:2128:29 | Address | &:r2128_16 | +| ir.cpp:2128:29:2128:29 | Address | &:r2128_18 | +| ir.cpp:2128:29:2128:29 | Load | m2128_6 | +| ir.cpp:2128:29:2128:29 | Unary | r2128_17 | +| ir.cpp:2128:29:2128:40 | ChiPartial | partial:m2128_19 | +| ir.cpp:2128:29:2128:40 | ChiTotal | total:m2128_8 | +| ir.cpp:2128:33:2128:40 | Address | &:r2128_11 | +| ir.cpp:2128:33:2128:40 | Arg(0) | 0:r2128_10 | +| ir.cpp:2128:33:2128:40 | CallTarget | func:r2128_9 | +| ir.cpp:2128:33:2128:40 | ChiPartial | partial:m2128_12 | +| ir.cpp:2128:33:2128:40 | ChiTotal | total:m2128_4 | +| ir.cpp:2128:33:2128:40 | SideEffect | ~m2128_4 | +| ir.cpp:2128:33:2128:40 | StoreValue | r2128_15 | +| ir.cpp:2128:33:2128:40 | Unary | r2128_11 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_5 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_5 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_7 | +| ir.cpp:2129:5:2129:24 | Address | &:r2129_7 | +| ir.cpp:2129:5:2129:24 | ChiPartial | partial:m2129_3 | +| ir.cpp:2129:5:2129:24 | ChiTotal | total:m2129_2 | +| ir.cpp:2129:5:2129:24 | Load | m2129_6 | +| ir.cpp:2129:5:2129:24 | SideEffect | m2129_8 | +| ir.cpp:2129:5:2129:24 | SideEffect | ~m2129_16 | +| ir.cpp:2129:30:2129:37 | CallTarget | func:r2129_9 | +| ir.cpp:2129:30:2129:37 | ChiPartial | partial:m2129_15 | +| ir.cpp:2129:30:2129:37 | ChiTotal | total:m2129_4 | +| ir.cpp:2129:30:2129:37 | SideEffect | ~m2129_4 | +| ir.cpp:2129:37:2129:37 | Address | &:r2129_10 | +| ir.cpp:2129:37:2129:37 | Address | &:r2129_12 | +| ir.cpp:2129:37:2129:37 | Arg(0) | 0:r2129_13 | +| ir.cpp:2129:37:2129:37 | Load | m2129_6 | +| ir.cpp:2129:37:2129:37 | Load | ~m2129_8 | +| ir.cpp:2129:37:2129:37 | Unary | r2129_11 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_5 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_5 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_7 | +| ir.cpp:2131:10:2131:14 | Address | &:r2131_7 | +| ir.cpp:2131:10:2131:14 | ChiPartial | partial:m2131_3 | +| ir.cpp:2131:10:2131:14 | ChiTotal | total:m2131_2 | +| ir.cpp:2131:10:2131:14 | Load | m2131_6 | +| ir.cpp:2131:10:2131:14 | SideEffect | m2131_8 | +| ir.cpp:2131:10:2131:14 | SideEffect | ~m2131_19 | +| ir.cpp:2131:21:2131:21 | Address | &:r2131_9 | +| ir.cpp:2131:26:2131:27 | Address | &:r2131_17 | +| ir.cpp:2131:26:2131:31 | ChiPartial | partial:m2131_18 | +| ir.cpp:2131:26:2131:31 | ChiTotal | total:m2131_4 | +| ir.cpp:2131:27:2131:27 | Address | &:r2131_13 | +| ir.cpp:2131:27:2131:27 | Address | &:r2131_15 | +| ir.cpp:2131:27:2131:27 | Load | m2131_6 | +| ir.cpp:2131:27:2131:27 | Load | ~m2131_8 | +| ir.cpp:2131:27:2131:27 | Unary | r2131_14 | +| ir.cpp:2131:27:2131:27 | Unary | r2131_16 | +| ir.cpp:2131:31:2131:31 | Address | &:r2131_11 | +| ir.cpp:2131:31:2131:31 | Load | m2131_10 | +| ir.cpp:2131:31:2131:31 | StoreValue | r2131_12 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_5 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_5 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_7 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_7 | +| ir.cpp:2132:10:2132:14 | Address | &:r2132_17 | +| ir.cpp:2132:10:2132:14 | ChiPartial | partial:m2132_3 | +| ir.cpp:2132:10:2132:14 | ChiTotal | total:m2132_2 | +| ir.cpp:2132:10:2132:14 | Load | m2132_6 | +| ir.cpp:2132:10:2132:14 | Load | m2132_15 | +| ir.cpp:2132:10:2132:14 | SideEffect | m2132_3 | +| ir.cpp:2132:10:2132:14 | SideEffect | m2132_8 | +| ir.cpp:2132:20:2132:29 | Address | &:r2132_9 | +| ir.cpp:2132:27:2132:28 | Load | ~m2132_4 | +| ir.cpp:2132:27:2132:28 | StoreValue | r2132_14 | +| ir.cpp:2132:28:2132:28 | Address | &:r2132_10 | +| ir.cpp:2132:28:2132:28 | Address | &:r2132_12 | +| ir.cpp:2132:28:2132:28 | Address | &:r2132_13 | +| ir.cpp:2132:28:2132:28 | Load | m2132_6 | +| ir.cpp:2132:28:2132:28 | Load | ~m2132_8 | +| ir.cpp:2132:28:2132:28 | Unary | r2132_11 | +| ir.cpp:2135:16:2135:50 | Address | &:r2135_3 | +| ir.cpp:2135:16:2135:50 | SideEffect | ~m2135_6 | +| ir.cpp:2135:54:2135:57 | ChiPartial | partial:m2135_5 | +| ir.cpp:2135:54:2135:57 | ChiTotal | total:m2135_2 | +| ir.cpp:2135:54:2135:57 | StoreValue | r2135_4 | +| ir.cpp:2137:6:2137:35 | ChiPartial | partial:m2137_3 | +| ir.cpp:2137:6:2137:35 | ChiTotal | total:m2137_2 | +| ir.cpp:2137:6:2137:35 | Phi | from 14:~m2159_5 | +| ir.cpp:2137:6:2137:35 | Phi | from 19:~m2163_54 | +| ir.cpp:2137:6:2137:35 | Phi | from 20:~m2163_38 | +| ir.cpp:2137:6:2137:35 | SideEffect | ~m2137_9 | +| ir.cpp:2137:42:2137:42 | Address | &:r2137_5 | +| ir.cpp:2137:50:2137:50 | Address | &:r2137_7 | +| ir.cpp:2138:29:2138:29 | Address | &:r2138_1 | +| ir.cpp:2138:29:2138:29 | Address | &:r2138_1 | +| ir.cpp:2138:29:2138:29 | Arg(this) | this:r2138_1 | +| ir.cpp:2138:29:2138:29 | CallTarget | func:r2138_3 | +| ir.cpp:2138:29:2138:29 | ChiPartial | partial:m2138_5 | +| ir.cpp:2138:29:2138:29 | ChiPartial | partial:m2138_7 | +| ir.cpp:2138:29:2138:29 | ChiTotal | total:m2137_4 | +| ir.cpp:2138:29:2138:29 | ChiTotal | total:m2138_2 | +| ir.cpp:2138:29:2138:29 | SideEffect | ~m2137_4 | +| ir.cpp:2138:32:2138:32 | Address | &:r2138_9 | +| ir.cpp:2138:32:2138:32 | Condition | r2138_10 | +| ir.cpp:2138:32:2138:32 | Load | m2137_6 | +| ir.cpp:2139:9:2139:9 | Address | &:r2139_1 | +| ir.cpp:2139:9:2139:9 | Address | &:r2139_1 | +| ir.cpp:2139:9:2139:9 | Arg(this) | this:r2139_1 | +| ir.cpp:2139:9:2139:9 | ChiPartial | partial:m2139_8 | +| ir.cpp:2139:9:2139:9 | ChiTotal | total:m2138_8 | +| ir.cpp:2139:9:2139:9 | SideEffect | m2138_8 | +| ir.cpp:2139:11:2139:15 | CallTarget | func:r2139_2 | +| ir.cpp:2139:11:2139:15 | ChiPartial | partial:m2139_5 | +| ir.cpp:2139:11:2139:15 | ChiTotal | total:m2138_6 | +| ir.cpp:2139:11:2139:15 | SideEffect | ~m2138_6 | +| ir.cpp:2139:17:2139:19 | Arg(0) | 0:r2139_3 | +| ir.cpp:2141:39:2141:39 | Address | &:r2141_2 | +| ir.cpp:2141:39:2141:39 | Address | &:r2141_2 | +| ir.cpp:2141:39:2141:39 | Arg(this) | this:r2141_2 | +| ir.cpp:2141:39:2141:39 | CallTarget | func:r2141_4 | +| ir.cpp:2141:39:2141:39 | ChiPartial | partial:m2141_6 | +| ir.cpp:2141:39:2141:39 | ChiPartial | partial:m2141_8 | +| ir.cpp:2141:39:2141:39 | ChiTotal | total:m2141_1 | +| ir.cpp:2141:39:2141:39 | ChiTotal | total:m2141_3 | +| ir.cpp:2141:39:2141:39 | Phi | from 0:~m2138_6 | +| ir.cpp:2141:39:2141:39 | Phi | from 2:~m2139_6 | +| ir.cpp:2141:39:2141:39 | SideEffect | ~m2141_1 | +| ir.cpp:2141:42:2141:76 | Condition | r2141_10 | +| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | +| ir.cpp:2142:9:2142:9 | Address | &:r2142_1 | +| ir.cpp:2142:9:2142:9 | Arg(this) | this:r2142_1 | +| ir.cpp:2142:9:2142:9 | ChiPartial | partial:m2142_8 | +| ir.cpp:2142:9:2142:9 | ChiTotal | total:m2141_9 | +| ir.cpp:2142:9:2142:9 | SideEffect | m2141_9 | +| ir.cpp:2142:11:2142:15 | CallTarget | func:r2142_2 | +| ir.cpp:2142:11:2142:15 | ChiPartial | partial:m2142_5 | +| ir.cpp:2142:11:2142:15 | ChiTotal | total:m2141_7 | +| ir.cpp:2142:11:2142:15 | SideEffect | ~m2141_7 | +| ir.cpp:2142:17:2142:19 | Arg(0) | 0:r2142_3 | +| ir.cpp:2144:32:2144:32 | Address | &:r2144_1 | +| ir.cpp:2144:32:2144:32 | Address | &:r2144_1 | +| ir.cpp:2144:32:2144:32 | Arg(this) | this:r2144_1 | +| ir.cpp:2144:32:2144:32 | CallTarget | func:r2144_3 | +| ir.cpp:2144:32:2144:32 | ChiPartial | partial:m2144_5 | +| ir.cpp:2144:32:2144:32 | ChiPartial | partial:m2144_7 | +| ir.cpp:2144:32:2144:32 | ChiTotal | total:m2142_6 | +| ir.cpp:2144:32:2144:32 | ChiTotal | total:m2144_2 | +| ir.cpp:2144:32:2144:32 | SideEffect | ~m2142_6 | +| ir.cpp:2144:35:2144:35 | Address | &:r2144_9 | +| ir.cpp:2144:35:2144:35 | Condition | r2144_11 | +| ir.cpp:2144:35:2144:35 | Load | m2137_8 | +| ir.cpp:2144:35:2144:35 | Unary | r2144_10 | +| ir.cpp:2146:11:2146:11 | Address | &:r2146_1 | +| ir.cpp:2146:11:2146:11 | Address | &:r2146_1 | +| ir.cpp:2146:11:2146:11 | Arg(this) | this:r2146_1 | +| ir.cpp:2146:11:2146:11 | ChiPartial | partial:m2146_8 | +| ir.cpp:2146:11:2146:11 | ChiTotal | total:m2144_8 | +| ir.cpp:2146:11:2146:11 | SideEffect | m2144_8 | +| ir.cpp:2146:13:2146:17 | CallTarget | func:r2146_2 | +| ir.cpp:2146:13:2146:17 | ChiPartial | partial:m2146_5 | +| ir.cpp:2146:13:2146:17 | ChiTotal | total:m2144_6 | +| ir.cpp:2146:13:2146:17 | SideEffect | ~m2144_6 | +| ir.cpp:2146:19:2146:21 | Arg(0) | 0:r2146_3 | +| ir.cpp:2149:11:2149:11 | Address | &:r2149_1 | +| ir.cpp:2149:11:2149:11 | Address | &:r2149_1 | +| ir.cpp:2149:11:2149:11 | Arg(this) | this:r2149_1 | +| ir.cpp:2149:11:2149:11 | ChiPartial | partial:m2149_8 | +| ir.cpp:2149:11:2149:11 | ChiTotal | total:m2144_8 | +| ir.cpp:2149:11:2149:11 | SideEffect | m2144_8 | +| ir.cpp:2149:13:2149:17 | CallTarget | func:r2149_2 | +| ir.cpp:2149:13:2149:17 | ChiPartial | partial:m2149_5 | +| ir.cpp:2149:13:2149:17 | ChiTotal | total:m2144_6 | +| ir.cpp:2149:13:2149:17 | SideEffect | ~m2144_6 | +| ir.cpp:2149:19:2149:21 | Arg(0) | 0:r2149_3 | +| ir.cpp:2151:5:2151:5 | Phi | from 5:~m2146_6 | +| ir.cpp:2151:5:2151:5 | Phi | from 6:~m2149_6 | +| ir.cpp:2153:25:2153:25 | Address | &:r2153_1 | +| ir.cpp:2153:25:2153:25 | Address | &:r2153_1 | +| ir.cpp:2153:25:2153:25 | Arg(this) | this:r2153_1 | +| ir.cpp:2153:25:2153:25 | CallTarget | func:r2153_3 | +| ir.cpp:2153:25:2153:25 | ChiPartial | partial:m2153_5 | +| ir.cpp:2153:25:2153:25 | ChiPartial | partial:m2153_7 | +| ir.cpp:2153:25:2153:25 | ChiTotal | total:m2151_1 | +| ir.cpp:2153:25:2153:25 | ChiTotal | total:m2153_2 | +| ir.cpp:2153:25:2153:25 | SideEffect | ~m2151_1 | +| ir.cpp:2154:5:2154:5 | Address | &:r2154_14 | +| ir.cpp:2154:5:2154:5 | Address | &:r2154_18 | +| ir.cpp:2154:5:2154:5 | Address | &:r2154_26 | +| ir.cpp:2154:37:2154:38 | Address | &:r2154_1 | +| ir.cpp:2154:37:2154:38 | Address | &:r2154_1 | +| ir.cpp:2154:37:2154:38 | Arg(this) | this:r2154_1 | +| ir.cpp:2154:40:2154:40 | Address | &:r2154_4 | +| ir.cpp:2154:40:2154:40 | Address | &:r2154_4 | +| ir.cpp:2154:40:2154:40 | Address | &:r2154_5 | +| ir.cpp:2154:40:2154:40 | Arg(0) | 0:r2154_8 | +| ir.cpp:2154:40:2154:40 | Load | m2153_8 | +| ir.cpp:2154:40:2154:40 | Load | m2154_7 | +| ir.cpp:2154:40:2154:40 | StoreValue | r2154_6 | +| ir.cpp:2154:40:2154:41 | CallTarget | func:r2154_3 | +| ir.cpp:2154:40:2154:41 | ChiPartial | partial:m2154_10 | +| ir.cpp:2154:40:2154:41 | ChiPartial | partial:m2154_12 | +| ir.cpp:2154:40:2154:41 | ChiTotal | total:m2153_6 | +| ir.cpp:2154:40:2154:41 | ChiTotal | total:m2154_2 | +| ir.cpp:2154:40:2154:41 | SideEffect | ~m2153_6 | +| ir.cpp:2154:64:2154:64 | Address | &:r2154_44 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_19 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_27 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_38 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_47 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_52 | +| ir.cpp:2154:68:2154:68 | Address | &:r2154_52 | +| ir.cpp:2154:68:2154:68 | Arg(0) | 0:r2154_39 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_2 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_5 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_7 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r0_9 | +| ir.cpp:2154:68:2154:68 | Arg(this) | this:r2154_52 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_21 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_29 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_37 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_46 | +| ir.cpp:2154:68:2154:68 | CallTarget | func:r2154_53 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_23 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_31 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_41 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_48 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_55 | +| ir.cpp:2154:68:2154:68 | ChiPartial | partial:m2154_58 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_11 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_24 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_34 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_35 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2154_42 | +| ir.cpp:2154:68:2154:68 | ChiTotal | total:m2155_6 | +| ir.cpp:2154:68:2154:68 | Condition | r2154_40 | +| ir.cpp:2154:68:2154:68 | Load | m2154_17 | +| ir.cpp:2154:68:2154:68 | Load | m2154_17 | +| ir.cpp:2154:68:2154:68 | Load | m2154_33 | +| ir.cpp:2154:68:2154:68 | Phi | from 7:m2154_25 | +| ir.cpp:2154:68:2154:68 | Phi | from 7:~m2154_32 | +| ir.cpp:2154:68:2154:68 | Phi | from 9:m2154_59 | +| ir.cpp:2154:68:2154:68 | Phi | from 9:~m2154_56 | +| ir.cpp:2154:68:2154:68 | SideEffect | m2154_34 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_11 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_24 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_35 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2154_42 | +| ir.cpp:2154:68:2154:68 | SideEffect | ~m2155_6 | +| ir.cpp:2154:68:2154:68 | StoreValue | r2154_22 | +| ir.cpp:2154:68:2154:68 | StoreValue | r2154_30 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_20 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_28 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_36 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_45 | +| ir.cpp:2154:68:2154:68 | Unary | r2154_54 | +| ir.cpp:2154:68:2154:69 | StoreValue | r2154_16 | +| ir.cpp:2154:68:2154:69 | Unary | r2154_15 | +| ir.cpp:2154:68:2154:70 | Load | ~m2154_49 | +| ir.cpp:2154:68:2154:70 | StoreValue | r2154_50 | +| ir.cpp:2155:7:2155:7 | Address | &:r2155_1 | +| ir.cpp:2155:7:2155:7 | Address | &:r2155_1 | +| ir.cpp:2155:7:2155:7 | Arg(this) | this:r2155_1 | +| ir.cpp:2155:7:2155:7 | ChiPartial | partial:m2155_8 | +| ir.cpp:2155:7:2155:7 | ChiTotal | total:m2154_51 | +| ir.cpp:2155:7:2155:7 | SideEffect | m2154_51 | +| ir.cpp:2155:9:2155:13 | CallTarget | func:r2155_2 | +| ir.cpp:2155:9:2155:13 | ChiPartial | partial:m2155_5 | +| ir.cpp:2155:9:2155:13 | ChiTotal | total:m2154_49 | +| ir.cpp:2155:9:2155:13 | SideEffect | ~m2154_49 | +| ir.cpp:2155:15:2155:17 | Arg(0) | 0:r2155_3 | +| ir.cpp:2157:5:2157:5 | Address | &:r2157_14 | +| ir.cpp:2157:5:2157:5 | Address | &:r2157_18 | +| ir.cpp:2157:5:2157:5 | Address | &:r2157_26 | +| ir.cpp:2157:37:2157:38 | Address | &:r2157_1 | +| ir.cpp:2157:37:2157:38 | Address | &:r2157_1 | +| ir.cpp:2157:37:2157:38 | Arg(this) | this:r2157_1 | +| ir.cpp:2157:40:2157:40 | Address | &:r2157_4 | +| ir.cpp:2157:40:2157:40 | Address | &:r2157_4 | +| ir.cpp:2157:40:2157:40 | Address | &:r2157_5 | +| ir.cpp:2157:40:2157:40 | Arg(0) | 0:r2157_8 | +| ir.cpp:2157:40:2157:40 | Load | m2153_8 | +| ir.cpp:2157:40:2157:40 | Load | m2157_7 | +| ir.cpp:2157:40:2157:40 | StoreValue | r2157_6 | +| ir.cpp:2157:40:2157:41 | CallTarget | func:r2157_3 | +| ir.cpp:2157:40:2157:41 | ChiPartial | partial:m2157_10 | +| ir.cpp:2157:40:2157:41 | ChiPartial | partial:m2157_12 | +| ir.cpp:2157:40:2157:41 | ChiTotal | total:m2154_42 | +| ir.cpp:2157:40:2157:41 | ChiTotal | total:m2157_2 | +| ir.cpp:2157:40:2157:41 | SideEffect | ~m2154_42 | +| ir.cpp:2157:64:2157:64 | Address | &:r2157_53 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_19 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_27 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_38 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_44 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_44 | +| ir.cpp:2157:68:2157:68 | Address | &:r2157_56 | +| ir.cpp:2157:68:2157:68 | Arg(0) | 0:r2157_39 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_12 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_15 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_17 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r0_19 | +| ir.cpp:2157:68:2157:68 | Arg(this) | this:r2157_44 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_21 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_29 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_37 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_45 | +| ir.cpp:2157:68:2157:68 | CallTarget | func:r2157_55 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_23 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_31 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_41 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_47 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_50 | +| ir.cpp:2157:68:2157:68 | ChiPartial | partial:m2157_57 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_11 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_24 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_34 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_35 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2157_42 | +| ir.cpp:2157:68:2157:68 | ChiTotal | total:m2159_5 | +| ir.cpp:2157:68:2157:68 | Condition | r2157_40 | +| ir.cpp:2157:68:2157:68 | Load | m2157_17 | +| ir.cpp:2157:68:2157:68 | Load | m2157_17 | +| ir.cpp:2157:68:2157:68 | Load | m2157_33 | +| ir.cpp:2157:68:2157:68 | Phi | from 10:m2157_25 | +| ir.cpp:2157:68:2157:68 | Phi | from 10:~m2157_32 | +| ir.cpp:2157:68:2157:68 | Phi | from 12:m2157_51 | +| ir.cpp:2157:68:2157:68 | Phi | from 12:~m2157_48 | +| ir.cpp:2157:68:2157:68 | SideEffect | m2157_34 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_11 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_24 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_35 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2157_42 | +| ir.cpp:2157:68:2157:68 | SideEffect | ~m2159_5 | +| ir.cpp:2157:68:2157:68 | StoreValue | r2157_22 | +| ir.cpp:2157:68:2157:68 | StoreValue | r2157_30 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_20 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_28 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_36 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_46 | +| ir.cpp:2157:68:2157:68 | Unary | r2157_54 | +| ir.cpp:2157:68:2157:69 | StoreValue | r2157_16 | +| ir.cpp:2157:68:2157:69 | Unary | r2157_15 | +| ir.cpp:2157:68:2157:70 | Load | ~m2157_58 | +| ir.cpp:2157:68:2157:70 | StoreValue | r2157_59 | +| ir.cpp:2158:7:2158:7 | Address | &:r2158_1 | +| ir.cpp:2158:7:2158:7 | Address | &:r2158_1 | +| ir.cpp:2158:7:2158:7 | Arg(this) | this:r2158_1 | +| ir.cpp:2158:7:2158:7 | ChiPartial | partial:m2158_8 | +| ir.cpp:2158:7:2158:7 | ChiTotal | total:m2157_60 | +| ir.cpp:2158:7:2158:7 | SideEffect | m2157_60 | +| ir.cpp:2158:9:2158:13 | CallTarget | func:r2158_2 | +| ir.cpp:2158:9:2158:13 | ChiPartial | partial:m2158_5 | +| ir.cpp:2158:9:2158:13 | ChiTotal | total:m2157_58 | +| ir.cpp:2158:9:2158:13 | SideEffect | ~m2157_58 | +| ir.cpp:2158:15:2158:17 | Arg(0) | 0:r2158_3 | +| ir.cpp:2159:11:2159:11 | Address | &:r2159_1 | +| ir.cpp:2159:11:2159:11 | Address | &:r2159_1 | +| ir.cpp:2159:11:2159:11 | Arg(this) | this:r2159_1 | +| ir.cpp:2159:11:2159:11 | ChiPartial | partial:m2159_7 | +| ir.cpp:2159:11:2159:11 | ChiTotal | total:m2158_9 | +| ir.cpp:2159:11:2159:11 | SideEffect | m2158_9 | +| ir.cpp:2159:11:2159:19 | Left | r2159_9 | +| ir.cpp:2159:11:2159:26 | Condition | r2159_11 | +| ir.cpp:2159:13:2159:17 | CallTarget | func:r2159_2 | +| ir.cpp:2159:13:2159:17 | ChiPartial | partial:m2159_4 | +| ir.cpp:2159:13:2159:17 | ChiTotal | total:m2158_6 | +| ir.cpp:2159:13:2159:17 | SideEffect | ~m2158_6 | +| ir.cpp:2159:13:2159:17 | Unary | r2159_3 | +| ir.cpp:2159:24:2159:26 | Right | r2159_10 | +| ir.cpp:2163:5:2163:5 | Address | &:r2163_10 | +| ir.cpp:2163:5:2163:5 | Address | &:r2163_14 | +| ir.cpp:2163:5:2163:5 | Address | &:r2163_22 | +| ir.cpp:2163:21:2163:22 | Address | &:r2163_1 | +| ir.cpp:2163:21:2163:22 | Address | &:r2163_1 | +| ir.cpp:2163:21:2163:22 | Arg(this) | this:r2163_1 | +| ir.cpp:2163:24:2163:24 | Arg(0) | 0:r2163_4 | +| ir.cpp:2163:24:2163:25 | CallTarget | func:r2163_3 | +| ir.cpp:2163:24:2163:25 | ChiPartial | partial:m2163_6 | +| ir.cpp:2163:24:2163:25 | ChiPartial | partial:m2163_8 | +| ir.cpp:2163:24:2163:25 | ChiTotal | total:m2157_42 | +| ir.cpp:2163:24:2163:25 | ChiTotal | total:m2163_2 | +| ir.cpp:2163:24:2163:25 | SideEffect | ~m2157_42 | +| ir.cpp:2163:32:2163:32 | Address | &:r2163_49 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_15 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_23 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_34 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_40 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_40 | +| ir.cpp:2163:36:2163:36 | Address | &:r2163_52 | +| ir.cpp:2163:36:2163:36 | Arg(0) | 0:r2163_35 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_22 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_25 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_27 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r0_29 | +| ir.cpp:2163:36:2163:36 | Arg(this) | this:r2163_40 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_17 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_25 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_33 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_41 | +| ir.cpp:2163:36:2163:36 | CallTarget | func:r2163_51 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_19 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_27 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_37 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_43 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_46 | +| ir.cpp:2163:36:2163:36 | ChiPartial | partial:m2163_53 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_7 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_20 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_30 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_31 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_38 | +| ir.cpp:2163:36:2163:36 | ChiTotal | total:m2163_54 | +| ir.cpp:2163:36:2163:36 | Condition | r2163_36 | +| ir.cpp:2163:36:2163:36 | Load | m2163_13 | +| ir.cpp:2163:36:2163:36 | Load | m2163_13 | +| ir.cpp:2163:36:2163:36 | Load | m2163_29 | +| ir.cpp:2163:36:2163:36 | Phi | from 15:m2163_21 | +| ir.cpp:2163:36:2163:36 | Phi | from 15:~m2163_28 | +| ir.cpp:2163:36:2163:36 | Phi | from 17:m2163_47 | +| ir.cpp:2163:36:2163:36 | Phi | from 17:~m2163_44 | +| ir.cpp:2163:36:2163:36 | SideEffect | m2163_30 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_7 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_20 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_31 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_38 | +| ir.cpp:2163:36:2163:36 | SideEffect | ~m2163_54 | +| ir.cpp:2163:36:2163:36 | StoreValue | r2163_18 | +| ir.cpp:2163:36:2163:36 | StoreValue | r2163_26 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_16 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_24 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_32 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_42 | +| ir.cpp:2163:36:2163:36 | Unary | r2163_50 | +| ir.cpp:2163:36:2163:37 | StoreValue | r2163_12 | +| ir.cpp:2163:36:2163:37 | Unary | r2163_11 | +| ir.cpp:2163:36:2163:38 | Load | ~m2163_54 | +| ir.cpp:2163:36:2163:38 | StoreValue | r2163_55 | +| ir.cpp:2164:11:2164:11 | Address | &:r2164_1 | +| ir.cpp:2164:11:2164:11 | Left | r2164_2 | +| ir.cpp:2164:11:2164:11 | Load | m2163_56 | +| ir.cpp:2164:11:2164:16 | Condition | r2164_4 | +| ir.cpp:2164:16:2164:16 | Right | r2164_3 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_5 | | perf-regression.cpp:6:3:6:5 | Address | &:r6_7 | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected index d2a11541fd1..aefdbf9d134 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_consistency.expected @@ -20,7 +20,7 @@ multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition -| ir.cpp:1486:8:1486:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1486:8:1486:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | +| ir.cpp:1488:8:1488:8 | Unary | Operand 'Unary' is not dominated by its definition in function '$@'. | ir.cpp:1488:8:1488:8 | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | | try_except.c:13:13:13:13 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:6:6:6:6 | void f() | void f() | | try_except.c:39:15:39:15 | Left | Operand 'Left' is not dominated by its definition in function '$@'. | try_except.c:32:6:32:6 | void h(int) | void h(int) | diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index af98e5f6419..313f09530cd 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -6345,1445 +6345,1417 @@ ir.cpp: # 1054| v1054_41(void) = AliasedUse : ~m? # 1054| v1054_42(void) = ExitFunction : -# 1077| void RangeBasedFor(vector const&) -# 1077| Block 0 -# 1077| v1077_1(void) = EnterFunction : -# 1077| mu1077_2(unknown) = AliasedDefinition : -# 1077| mu1077_3(unknown) = InitializeNonLocal : -# 1077| r1077_4(glval &>) = VariableAddress[v] : -# 1077| mu1077_5(vector &) = InitializeParameter[v] : &:r1077_4 -# 1077| r1077_6(vector &) = Load[v] : &:r1077_4, ~m? -# 1077| mu1077_7(unknown) = InitializeIndirection[v] : &:r1077_6 -# 1078| r1078_1(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_2(glval &>) = VariableAddress[v] : -# 1078| r1078_3(vector &) = Load[v] : &:r1078_2, ~m? -# 1078| r1078_4(glval>) = CopyValue : r1078_3 -# 1078| r1078_5(vector &) = CopyValue : r1078_4 -# 1078| mu1078_6(vector &) = Store[(__range)] : &:r1078_1, r1078_5 -# 1078| r1078_7(glval) = VariableAddress[(__begin)] : -# 1078| r1078_8(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_9(vector &) = Load[(__range)] : &:r1078_8, ~m? -#-----| r0_1(glval>) = CopyValue : r1078_9 -# 1078| r1078_10(glval) = FunctionAddress[begin] : -# 1078| r1078_11(iterator) = Call[begin] : func:r1078_10, this:r0_1 -# 1078| mu1078_12(unknown) = ^CallSideEffect : ~m? +# 1079| void RangeBasedFor(vector const&) +# 1079| Block 0 +# 1079| v1079_1(void) = EnterFunction : +# 1079| mu1079_2(unknown) = AliasedDefinition : +# 1079| mu1079_3(unknown) = InitializeNonLocal : +# 1079| r1079_4(glval &>) = VariableAddress[v] : +# 1079| mu1079_5(vector &) = InitializeParameter[v] : &:r1079_4 +# 1079| r1079_6(vector &) = Load[v] : &:r1079_4, ~m? +# 1079| mu1079_7(unknown) = InitializeIndirection[v] : &:r1079_6 +# 1080| r1080_1(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_2(glval &>) = VariableAddress[v] : +# 1080| r1080_3(vector &) = Load[v] : &:r1080_2, ~m? +# 1080| r1080_4(glval>) = CopyValue : r1080_3 +# 1080| r1080_5(vector &) = CopyValue : r1080_4 +# 1080| mu1080_6(vector &) = Store[(__range)] : &:r1080_1, r1080_5 +# 1080| r1080_7(glval) = VariableAddress[(__begin)] : +# 1080| r1080_8(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_9(vector &) = Load[(__range)] : &:r1080_8, ~m? +#-----| r0_1(glval>) = CopyValue : r1080_9 +# 1080| r1080_10(glval) = FunctionAddress[begin] : +# 1080| r1080_11(iterator) = Call[begin] : func:r1080_10, this:r0_1 +# 1080| mu1080_12(unknown) = ^CallSideEffect : ~m? #-----| v0_2(void) = ^IndirectReadSideEffect[-1] : &:r0_1, ~m? -# 1078| mu1078_13(iterator) = Store[(__begin)] : &:r1078_7, r1078_11 -# 1078| r1078_14(glval) = VariableAddress[(__end)] : -# 1078| r1078_15(glval &>) = VariableAddress[(__range)] : -# 1078| r1078_16(vector &) = Load[(__range)] : &:r1078_15, ~m? -#-----| r0_3(glval>) = CopyValue : r1078_16 -# 1078| r1078_17(glval) = FunctionAddress[end] : -# 1078| r1078_18(iterator) = Call[end] : func:r1078_17, this:r0_3 -# 1078| mu1078_19(unknown) = ^CallSideEffect : ~m? +# 1080| mu1080_13(iterator) = Store[(__begin)] : &:r1080_7, r1080_11 +# 1080| r1080_14(glval) = VariableAddress[(__end)] : +# 1080| r1080_15(glval &>) = VariableAddress[(__range)] : +# 1080| r1080_16(vector &) = Load[(__range)] : &:r1080_15, ~m? +#-----| r0_3(glval>) = CopyValue : r1080_16 +# 1080| r1080_17(glval) = FunctionAddress[end] : +# 1080| r1080_18(iterator) = Call[end] : func:r1080_17, this:r0_3 +# 1080| mu1080_19(unknown) = ^CallSideEffect : ~m? #-----| v0_4(void) = ^IndirectReadSideEffect[-1] : &:r0_3, ~m? -# 1078| mu1078_20(iterator) = Store[(__end)] : &:r1078_14, r1078_18 +# 1080| mu1080_20(iterator) = Store[(__end)] : &:r1080_14, r1080_18 #-----| Goto -> Block 1 -# 1078| Block 1 -# 1078| r1078_21(glval) = VariableAddress[(__begin)] : -#-----| r0_5(glval) = Convert : r1078_21 -# 1078| r1078_22(glval) = FunctionAddress[operator!=] : -# 1078| r1078_23(glval) = VariableAddress[(__end)] : -# 1078| r1078_24(iterator) = Load[(__end)] : &:r1078_23, ~m? -# 1078| r1078_25(bool) = Call[operator!=] : func:r1078_22, this:r0_5, 0:r1078_24 -# 1078| mu1078_26(unknown) = ^CallSideEffect : ~m? +# 1080| Block 1 +# 1080| r1080_21(glval) = VariableAddress[(__begin)] : +#-----| r0_5(glval) = Convert : r1080_21 +# 1080| r1080_22(glval) = FunctionAddress[operator!=] : +# 1080| r1080_23(glval) = VariableAddress[(__end)] : +# 1080| r1080_24(iterator) = Load[(__end)] : &:r1080_23, ~m? +# 1080| r1080_25(bool) = Call[operator!=] : func:r1080_22, this:r0_5, 0:r1080_24 +# 1080| mu1080_26(unknown) = ^CallSideEffect : ~m? #-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? -# 1078| v1078_27(void) = ConditionalBranch : r1078_25 +# 1080| v1080_27(void) = ConditionalBranch : r1080_25 #-----| False -> Block 5 #-----| True -> Block 2 -# 1078| Block 2 -# 1078| r1078_28(glval) = VariableAddress[e] : -# 1078| r1078_29(glval) = VariableAddress[(__begin)] : -#-----| r0_7(glval) = Convert : r1078_29 -# 1078| r1078_30(glval) = FunctionAddress[operator*] : -# 1078| r1078_31(int &) = Call[operator*] : func:r1078_30, this:r0_7 -# 1078| mu1078_32(unknown) = ^CallSideEffect : ~m? +# 1080| Block 2 +# 1080| r1080_28(glval) = VariableAddress[e] : +# 1080| r1080_29(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r1080_29 +# 1080| r1080_30(glval) = FunctionAddress[operator*] : +# 1080| r1080_31(int &) = Call[operator*] : func:r1080_30, this:r0_7 +# 1080| mu1080_32(unknown) = ^CallSideEffect : ~m? #-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? -# 1078| r1078_33(int) = Load[?] : &:r1078_31, ~m? -# 1078| mu1078_34(int) = Store[e] : &:r1078_28, r1078_33 -# 1079| r1079_1(glval) = VariableAddress[e] : -# 1079| r1079_2(int) = Load[e] : &:r1079_1, ~m? -# 1079| r1079_3(int) = Constant[0] : -# 1079| r1079_4(bool) = CompareGT : r1079_2, r1079_3 -# 1079| v1079_5(void) = ConditionalBranch : r1079_4 +# 1080| r1080_33(int) = Load[?] : &:r1080_31, ~m? +# 1080| mu1080_34(int) = Store[e] : &:r1080_28, r1080_33 +# 1081| r1081_1(glval) = VariableAddress[e] : +# 1081| r1081_2(int) = Load[e] : &:r1081_1, ~m? +# 1081| r1081_3(int) = Constant[0] : +# 1081| r1081_4(bool) = CompareGT : r1081_2, r1081_3 +# 1081| v1081_5(void) = ConditionalBranch : r1081_4 #-----| False -> Block 4 #-----| True -> Block 3 -# 1080| Block 3 -# 1080| v1080_1(void) = NoOp : +# 1082| Block 3 +# 1082| v1082_1(void) = NoOp : #-----| Goto -> Block 4 -# 1078| Block 4 -# 1078| v1078_35(void) = NoOp : -# 1078| r1078_36(glval) = VariableAddress[(__begin)] : -# 1078| r1078_37(glval) = FunctionAddress[operator++] : -# 1078| r1078_38(iterator &) = Call[operator++] : func:r1078_37, this:r1078_36 -# 1078| mu1078_39(unknown) = ^CallSideEffect : ~m? -# 1078| v1078_40(void) = ^IndirectReadSideEffect[-1] : &:r1078_36, ~m? -# 1078| mu1078_41(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1078_36 -# 1078| r1078_42(glval) = CopyValue : r1078_38 +# 1080| Block 4 +# 1080| v1080_35(void) = NoOp : +# 1080| r1080_36(glval) = VariableAddress[(__begin)] : +# 1080| r1080_37(glval) = FunctionAddress[operator++] : +# 1080| r1080_38(iterator &) = Call[operator++] : func:r1080_37, this:r1080_36 +# 1080| mu1080_39(unknown) = ^CallSideEffect : ~m? +# 1080| v1080_40(void) = ^IndirectReadSideEffect[-1] : &:r1080_36, ~m? +# 1080| mu1080_41(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1080_36 +# 1080| r1080_42(glval) = CopyValue : r1080_38 #-----| Goto (back edge) -> Block 1 -# 1084| Block 5 -# 1084| r1084_1(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_2(glval &>) = VariableAddress[v] : -# 1084| r1084_3(vector &) = Load[v] : &:r1084_2, ~m? -# 1084| r1084_4(glval>) = CopyValue : r1084_3 -# 1084| r1084_5(vector &) = CopyValue : r1084_4 -# 1084| mu1084_6(vector &) = Store[(__range)] : &:r1084_1, r1084_5 -# 1084| r1084_7(glval) = VariableAddress[(__begin)] : -# 1084| r1084_8(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_9(vector &) = Load[(__range)] : &:r1084_8, ~m? -#-----| r0_9(glval>) = CopyValue : r1084_9 -# 1084| r1084_10(glval) = FunctionAddress[begin] : -# 1084| r1084_11(iterator) = Call[begin] : func:r1084_10, this:r0_9 -# 1084| mu1084_12(unknown) = ^CallSideEffect : ~m? +# 1086| Block 5 +# 1086| r1086_1(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_2(glval &>) = VariableAddress[v] : +# 1086| r1086_3(vector &) = Load[v] : &:r1086_2, ~m? +# 1086| r1086_4(glval>) = CopyValue : r1086_3 +# 1086| r1086_5(vector &) = CopyValue : r1086_4 +# 1086| mu1086_6(vector &) = Store[(__range)] : &:r1086_1, r1086_5 +# 1086| r1086_7(glval) = VariableAddress[(__begin)] : +# 1086| r1086_8(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_9(vector &) = Load[(__range)] : &:r1086_8, ~m? +#-----| r0_9(glval>) = CopyValue : r1086_9 +# 1086| r1086_10(glval) = FunctionAddress[begin] : +# 1086| r1086_11(iterator) = Call[begin] : func:r1086_10, this:r0_9 +# 1086| mu1086_12(unknown) = ^CallSideEffect : ~m? #-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? -# 1084| mu1084_13(iterator) = Store[(__begin)] : &:r1084_7, r1084_11 -# 1084| r1084_14(glval) = VariableAddress[(__end)] : -# 1084| r1084_15(glval &>) = VariableAddress[(__range)] : -# 1084| r1084_16(vector &) = Load[(__range)] : &:r1084_15, ~m? -#-----| r0_11(glval>) = CopyValue : r1084_16 -# 1084| r1084_17(glval) = FunctionAddress[end] : -# 1084| r1084_18(iterator) = Call[end] : func:r1084_17, this:r0_11 -# 1084| mu1084_19(unknown) = ^CallSideEffect : ~m? +# 1086| mu1086_13(iterator) = Store[(__begin)] : &:r1086_7, r1086_11 +# 1086| r1086_14(glval) = VariableAddress[(__end)] : +# 1086| r1086_15(glval &>) = VariableAddress[(__range)] : +# 1086| r1086_16(vector &) = Load[(__range)] : &:r1086_15, ~m? +#-----| r0_11(glval>) = CopyValue : r1086_16 +# 1086| r1086_17(glval) = FunctionAddress[end] : +# 1086| r1086_18(iterator) = Call[end] : func:r1086_17, this:r0_11 +# 1086| mu1086_19(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? -# 1084| mu1084_20(iterator) = Store[(__end)] : &:r1084_14, r1084_18 +# 1086| mu1086_20(iterator) = Store[(__end)] : &:r1086_14, r1086_18 #-----| Goto -> Block 6 -# 1084| Block 6 -# 1084| r1084_21(glval) = VariableAddress[(__begin)] : -#-----| r0_13(glval) = Convert : r1084_21 -# 1084| r1084_22(glval) = FunctionAddress[operator!=] : -# 1084| r1084_23(glval) = VariableAddress[(__end)] : -# 1084| r1084_24(iterator) = Load[(__end)] : &:r1084_23, ~m? -# 1084| r1084_25(bool) = Call[operator!=] : func:r1084_22, this:r0_13, 0:r1084_24 -# 1084| mu1084_26(unknown) = ^CallSideEffect : ~m? +# 1086| Block 6 +# 1086| r1086_21(glval) = VariableAddress[(__begin)] : +#-----| r0_13(glval) = Convert : r1086_21 +# 1086| r1086_22(glval) = FunctionAddress[operator!=] : +# 1086| r1086_23(glval) = VariableAddress[(__end)] : +# 1086| r1086_24(iterator) = Load[(__end)] : &:r1086_23, ~m? +# 1086| r1086_25(bool) = Call[operator!=] : func:r1086_22, this:r0_13, 0:r1086_24 +# 1086| mu1086_26(unknown) = ^CallSideEffect : ~m? #-----| v0_14(void) = ^IndirectReadSideEffect[-1] : &:r0_13, ~m? -# 1084| v1084_27(void) = ConditionalBranch : r1084_25 +# 1086| v1086_27(void) = ConditionalBranch : r1086_25 #-----| False -> Block 10 #-----| True -> Block 8 -# 1084| Block 7 -# 1084| r1084_28(glval) = VariableAddress[(__begin)] : -# 1084| r1084_29(glval) = FunctionAddress[operator++] : -# 1084| r1084_30(iterator &) = Call[operator++] : func:r1084_29, this:r1084_28 -# 1084| mu1084_31(unknown) = ^CallSideEffect : ~m? -# 1084| v1084_32(void) = ^IndirectReadSideEffect[-1] : &:r1084_28, ~m? -# 1084| mu1084_33(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1084_28 -# 1084| r1084_34(glval) = CopyValue : r1084_30 +# 1086| Block 7 +# 1086| r1086_28(glval) = VariableAddress[(__begin)] : +# 1086| r1086_29(glval) = FunctionAddress[operator++] : +# 1086| r1086_30(iterator &) = Call[operator++] : func:r1086_29, this:r1086_28 +# 1086| mu1086_31(unknown) = ^CallSideEffect : ~m? +# 1086| v1086_32(void) = ^IndirectReadSideEffect[-1] : &:r1086_28, ~m? +# 1086| mu1086_33(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r1086_28 +# 1086| r1086_34(glval) = CopyValue : r1086_30 #-----| Goto (back edge) -> Block 6 -# 1084| Block 8 -# 1084| r1084_35(glval) = VariableAddress[e] : -# 1084| r1084_36(glval) = VariableAddress[(__begin)] : -#-----| r0_15(glval) = Convert : r1084_36 -# 1084| r1084_37(glval) = FunctionAddress[operator*] : -# 1084| r1084_38(int &) = Call[operator*] : func:r1084_37, this:r0_15 -# 1084| mu1084_39(unknown) = ^CallSideEffect : ~m? +# 1086| Block 8 +# 1086| r1086_35(glval) = VariableAddress[e] : +# 1086| r1086_36(glval) = VariableAddress[(__begin)] : +#-----| r0_15(glval) = Convert : r1086_36 +# 1086| r1086_37(glval) = FunctionAddress[operator*] : +# 1086| r1086_38(int &) = Call[operator*] : func:r1086_37, this:r0_15 +# 1086| mu1086_39(unknown) = ^CallSideEffect : ~m? #-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? -# 1084| r1084_40(glval) = CopyValue : r1084_38 -# 1084| r1084_41(glval) = Convert : r1084_40 -# 1084| r1084_42(int &) = CopyValue : r1084_41 -# 1084| mu1084_43(int &) = Store[e] : &:r1084_35, r1084_42 -# 1085| r1085_1(glval) = VariableAddress[e] : -# 1085| r1085_2(int &) = Load[e] : &:r1085_1, ~m? -# 1085| r1085_3(int) = Load[?] : &:r1085_2, ~m? -# 1085| r1085_4(int) = Constant[5] : -# 1085| r1085_5(bool) = CompareLT : r1085_3, r1085_4 -# 1085| v1085_6(void) = ConditionalBranch : r1085_5 +# 1086| r1086_40(glval) = CopyValue : r1086_38 +# 1086| r1086_41(glval) = Convert : r1086_40 +# 1086| r1086_42(int &) = CopyValue : r1086_41 +# 1086| mu1086_43(int &) = Store[e] : &:r1086_35, r1086_42 +# 1087| r1087_1(glval) = VariableAddress[e] : +# 1087| r1087_2(int &) = Load[e] : &:r1087_1, ~m? +# 1087| r1087_3(int) = Load[?] : &:r1087_2, ~m? +# 1087| r1087_4(int) = Constant[5] : +# 1087| r1087_5(bool) = CompareLT : r1087_3, r1087_4 +# 1087| v1087_6(void) = ConditionalBranch : r1087_5 #-----| False -> Block 7 #-----| True -> Block 9 -# 1086| Block 9 -# 1086| v1086_1(void) = NoOp : +# 1088| Block 9 +# 1088| v1088_1(void) = NoOp : #-----| Goto -> Block 10 -# 1088| Block 10 -# 1088| v1088_1(void) = NoOp : -# 1089| v1089_1(void) = NoOp : -# 1077| v1077_8(void) = ReturnIndirection[v] : &:r1077_6, ~m? -# 1077| v1077_9(void) = ReturnVoid : -# 1077| v1077_10(void) = AliasedUse : ~m? -# 1077| v1077_11(void) = ExitFunction : +# 1090| Block 10 +# 1090| v1090_1(void) = NoOp : +# 1091| v1091_1(void) = NoOp : +# 1079| v1079_8(void) = ReturnIndirection[v] : &:r1079_6, ~m? +# 1079| v1079_9(void) = ReturnVoid : +# 1079| v1079_10(void) = AliasedUse : ~m? +# 1079| v1079_11(void) = ExitFunction : -# 1108| int AsmStmt(int) -# 1108| Block 0 -# 1108| v1108_1(void) = EnterFunction : -# 1108| mu1108_2(unknown) = AliasedDefinition : -# 1108| mu1108_3(unknown) = InitializeNonLocal : -# 1108| r1108_4(glval) = VariableAddress[x] : -# 1108| mu1108_5(int) = InitializeParameter[x] : &:r1108_4 -# 1109| mu1109_1(unknown) = InlineAsm : ~m? -# 1110| r1110_1(glval) = VariableAddress[#return] : -# 1110| r1110_2(glval) = VariableAddress[x] : -# 1110| r1110_3(int) = Load[x] : &:r1110_2, ~m? -# 1110| mu1110_4(int) = Store[#return] : &:r1110_1, r1110_3 -# 1108| r1108_6(glval) = VariableAddress[#return] : -# 1108| v1108_7(void) = ReturnValue : &:r1108_6, ~m? -# 1108| v1108_8(void) = AliasedUse : ~m? -# 1108| v1108_9(void) = ExitFunction : +# 1110| int AsmStmt(int) +# 1110| Block 0 +# 1110| v1110_1(void) = EnterFunction : +# 1110| mu1110_2(unknown) = AliasedDefinition : +# 1110| mu1110_3(unknown) = InitializeNonLocal : +# 1110| r1110_4(glval) = VariableAddress[x] : +# 1110| mu1110_5(int) = InitializeParameter[x] : &:r1110_4 +# 1111| mu1111_1(unknown) = InlineAsm : ~m? +# 1112| r1112_1(glval) = VariableAddress[#return] : +# 1112| r1112_2(glval) = VariableAddress[x] : +# 1112| r1112_3(int) = Load[x] : &:r1112_2, ~m? +# 1112| mu1112_4(int) = Store[#return] : &:r1112_1, r1112_3 +# 1110| r1110_6(glval) = VariableAddress[#return] : +# 1110| v1110_7(void) = ReturnValue : &:r1110_6, ~m? +# 1110| v1110_8(void) = AliasedUse : ~m? +# 1110| v1110_9(void) = ExitFunction : -# 1113| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) -# 1113| Block 0 -# 1113| v1113_1(void) = EnterFunction : -# 1113| mu1113_2(unknown) = AliasedDefinition : -# 1113| mu1113_3(unknown) = InitializeNonLocal : -# 1113| r1113_4(glval) = VariableAddress[a] : -# 1113| mu1113_5(unsigned int &) = InitializeParameter[a] : &:r1113_4 -# 1113| r1113_6(unsigned int &) = Load[a] : &:r1113_4, ~m? -# 1113| mu1113_7(unknown) = InitializeIndirection[a] : &:r1113_6 -# 1113| r1113_8(glval) = VariableAddress[b] : -# 1113| mu1113_9(unsigned int) = InitializeParameter[b] : &:r1113_8 -# 1113| r1113_10(glval) = VariableAddress[c] : -# 1113| mu1113_11(unsigned int &) = InitializeParameter[c] : &:r1113_10 -# 1113| r1113_12(unsigned int &) = Load[c] : &:r1113_10, ~m? -# 1113| mu1113_13(unknown) = InitializeIndirection[c] : &:r1113_12 -# 1113| r1113_14(glval) = VariableAddress[d] : -# 1113| mu1113_15(unsigned int) = InitializeParameter[d] : &:r1113_14 -# 1118| r1118_1(glval) = VariableAddress[a] : -# 1118| r1118_2(unsigned int &) = Load[a] : &:r1118_1, ~m? -# 1118| r1118_3(glval) = CopyValue : r1118_2 -# 1118| r1118_4(glval) = VariableAddress[b] : -# 1118| r1118_5(glval) = VariableAddress[c] : -# 1118| r1118_6(unsigned int &) = Load[c] : &:r1118_5, ~m? -# 1118| r1118_7(unsigned int) = Load[?] : &:r1118_6, ~m? -# 1118| r1118_8(glval) = VariableAddress[d] : -# 1118| r1118_9(unsigned int) = Load[d] : &:r1118_8, ~m? -# 1115| mu1115_1(unknown) = InlineAsm : ~m?, 0:r1118_3, 1:r1118_4, 2:r1118_7, 3:r1118_9 -# 1120| v1120_1(void) = NoOp : -# 1113| v1113_16(void) = ReturnIndirection[a] : &:r1113_6, ~m? -# 1113| v1113_17(void) = ReturnIndirection[c] : &:r1113_12, ~m? -# 1113| v1113_18(void) = ReturnVoid : -# 1113| v1113_19(void) = AliasedUse : ~m? -# 1113| v1113_20(void) = ExitFunction : +# 1115| void AsmStmtWithOutputs(unsigned int&, unsigned int, unsigned int&, unsigned int) +# 1115| Block 0 +# 1115| v1115_1(void) = EnterFunction : +# 1115| mu1115_2(unknown) = AliasedDefinition : +# 1115| mu1115_3(unknown) = InitializeNonLocal : +# 1115| r1115_4(glval) = VariableAddress[a] : +# 1115| mu1115_5(unsigned int &) = InitializeParameter[a] : &:r1115_4 +# 1115| r1115_6(unsigned int &) = Load[a] : &:r1115_4, ~m? +# 1115| mu1115_7(unknown) = InitializeIndirection[a] : &:r1115_6 +# 1115| r1115_8(glval) = VariableAddress[b] : +# 1115| mu1115_9(unsigned int) = InitializeParameter[b] : &:r1115_8 +# 1115| r1115_10(glval) = VariableAddress[c] : +# 1115| mu1115_11(unsigned int &) = InitializeParameter[c] : &:r1115_10 +# 1115| r1115_12(unsigned int &) = Load[c] : &:r1115_10, ~m? +# 1115| mu1115_13(unknown) = InitializeIndirection[c] : &:r1115_12 +# 1115| r1115_14(glval) = VariableAddress[d] : +# 1115| mu1115_15(unsigned int) = InitializeParameter[d] : &:r1115_14 +# 1120| r1120_1(glval) = VariableAddress[a] : +# 1120| r1120_2(unsigned int &) = Load[a] : &:r1120_1, ~m? +# 1120| r1120_3(glval) = CopyValue : r1120_2 +# 1120| r1120_4(glval) = VariableAddress[b] : +# 1120| r1120_5(glval) = VariableAddress[c] : +# 1120| r1120_6(unsigned int &) = Load[c] : &:r1120_5, ~m? +# 1120| r1120_7(unsigned int) = Load[?] : &:r1120_6, ~m? +# 1120| r1120_8(glval) = VariableAddress[d] : +# 1120| r1120_9(unsigned int) = Load[d] : &:r1120_8, ~m? +# 1117| mu1117_1(unknown) = InlineAsm : ~m?, 0:r1120_3, 1:r1120_4, 2:r1120_7, 3:r1120_9 +# 1122| v1122_1(void) = NoOp : +# 1115| v1115_16(void) = ReturnIndirection[a] : &:r1115_6, ~m? +# 1115| v1115_17(void) = ReturnIndirection[c] : &:r1115_12, ~m? +# 1115| v1115_18(void) = ReturnVoid : +# 1115| v1115_19(void) = AliasedUse : ~m? +# 1115| v1115_20(void) = ExitFunction : -# 1122| void ExternDeclarations() -# 1122| Block 0 -# 1122| v1122_1(void) = EnterFunction : -# 1122| mu1122_2(unknown) = AliasedDefinition : -# 1122| mu1122_3(unknown) = InitializeNonLocal : -# 1125| r1125_1(glval) = VariableAddress[x] : -# 1125| mu1125_2(int) = Uninitialized[x] : &:r1125_1 -# 1126| r1126_1(glval) = VariableAddress[y] : -# 1126| mu1126_2(int) = Uninitialized[y] : &:r1126_1 -# 1127| r1127_1(glval) = VariableAddress[h] : -# 1127| mu1127_2(int) = Uninitialized[h] : &:r1127_1 -# 1129| v1129_1(void) = NoOp : -# 1122| v1122_4(void) = ReturnVoid : -# 1122| v1122_5(void) = AliasedUse : ~m? -# 1122| v1122_6(void) = ExitFunction : +# 1124| void ExternDeclarations() +# 1124| Block 0 +# 1124| v1124_1(void) = EnterFunction : +# 1124| mu1124_2(unknown) = AliasedDefinition : +# 1124| mu1124_3(unknown) = InitializeNonLocal : +# 1127| r1127_1(glval) = VariableAddress[x] : +# 1127| mu1127_2(int) = Uninitialized[x] : &:r1127_1 +# 1128| r1128_1(glval) = VariableAddress[y] : +# 1128| mu1128_2(int) = Uninitialized[y] : &:r1128_1 +# 1129| r1129_1(glval) = VariableAddress[h] : +# 1129| mu1129_2(int) = Uninitialized[h] : &:r1129_1 +# 1131| v1131_1(void) = NoOp : +# 1124| v1124_4(void) = ReturnVoid : +# 1124| v1124_5(void) = AliasedUse : ~m? +# 1124| v1124_6(void) = ExitFunction : -# 1137| void ExternDeclarationsInMacro() -# 1137| Block 0 -# 1137| v1137_1(void) = EnterFunction : -# 1137| mu1137_2(unknown) = AliasedDefinition : -# 1137| mu1137_3(unknown) = InitializeNonLocal : -# 1139| r1139_1(glval) = VariableAddress[i] : -# 1139| r1139_2(int) = Constant[0] : -# 1139| mu1139_3(int) = Store[i] : &:r1139_1, r1139_2 +# 1139| void ExternDeclarationsInMacro() +# 1139| Block 0 +# 1139| v1139_1(void) = EnterFunction : +# 1139| mu1139_2(unknown) = AliasedDefinition : +# 1139| mu1139_3(unknown) = InitializeNonLocal : +# 1141| r1141_1(glval) = VariableAddress[i] : +# 1141| r1141_2(int) = Constant[0] : +# 1141| mu1141_3(int) = Store[i] : &:r1141_1, r1141_2 #-----| Goto -> Block 1 -# 1139| Block 1 -# 1139| r1139_4(glval) = VariableAddress[i] : -# 1139| r1139_5(int) = Load[i] : &:r1139_4, ~m? -# 1139| r1139_6(int) = Constant[10] : -# 1139| r1139_7(bool) = CompareLT : r1139_5, r1139_6 -# 1139| v1139_8(void) = ConditionalBranch : r1139_7 +# 1141| Block 1 +# 1141| r1141_4(glval) = VariableAddress[i] : +# 1141| r1141_5(int) = Load[i] : &:r1141_4, ~m? +# 1141| r1141_6(int) = Constant[10] : +# 1141| r1141_7(bool) = CompareLT : r1141_5, r1141_6 +# 1141| v1141_8(void) = ConditionalBranch : r1141_7 #-----| False -> Block 3 #-----| True -> Block 2 -# 1139| Block 2 -# 1139| r1139_9(glval) = VariableAddress[i] : -# 1139| r1139_10(int) = Load[i] : &:r1139_9, ~m? -# 1139| r1139_11(int) = Constant[1] : -# 1139| r1139_12(int) = Add : r1139_10, r1139_11 -# 1139| mu1139_13(int) = Store[i] : &:r1139_9, r1139_12 +# 1141| Block 2 +# 1141| r1141_9(glval) = VariableAddress[i] : +# 1141| r1141_10(int) = Load[i] : &:r1141_9, ~m? +# 1141| r1141_11(int) = Constant[1] : +# 1141| r1141_12(int) = Add : r1141_10, r1141_11 +# 1141| mu1141_13(int) = Store[i] : &:r1141_9, r1141_12 #-----| Goto (back edge) -> Block 1 -# 1139| Block 3 -# 1139| v1139_14(void) = NoOp : -# 1140| v1140_1(void) = NoOp : -# 1137| v1137_4(void) = ReturnVoid : -# 1137| v1137_5(void) = AliasedUse : ~m? -# 1137| v1137_6(void) = ExitFunction : +# 1141| Block 3 +# 1141| v1141_14(void) = NoOp : +# 1142| v1142_1(void) = NoOp : +# 1139| v1139_4(void) = ReturnVoid : +# 1139| v1139_5(void) = AliasedUse : ~m? +# 1139| v1139_6(void) = ExitFunction : -# 1142| void TryCatchNoCatchAny(bool) -# 1142| Block 0 -# 1142| v1142_1(void) = EnterFunction : -# 1142| mu1142_2(unknown) = AliasedDefinition : -# 1142| mu1142_3(unknown) = InitializeNonLocal : -# 1142| r1142_4(glval) = VariableAddress[b] : -# 1142| mu1142_5(bool) = InitializeParameter[b] : &:r1142_4 -# 1144| r1144_1(glval) = VariableAddress[x] : -# 1144| r1144_2(int) = Constant[5] : -# 1144| mu1144_3(int) = Store[x] : &:r1144_1, r1144_2 -# 1145| r1145_1(glval) = VariableAddress[b] : -# 1145| r1145_2(bool) = Load[b] : &:r1145_1, ~m? -# 1145| v1145_3(void) = ConditionalBranch : r1145_2 +# 1144| void TryCatchNoCatchAny(bool) +# 1144| Block 0 +# 1144| v1144_1(void) = EnterFunction : +# 1144| mu1144_2(unknown) = AliasedDefinition : +# 1144| mu1144_3(unknown) = InitializeNonLocal : +# 1144| r1144_4(glval) = VariableAddress[b] : +# 1144| mu1144_5(bool) = InitializeParameter[b] : &:r1144_4 +# 1146| r1146_1(glval) = VariableAddress[x] : +# 1146| r1146_2(int) = Constant[5] : +# 1146| mu1146_3(int) = Store[x] : &:r1146_1, r1146_2 +# 1147| r1147_1(glval) = VariableAddress[b] : +# 1147| r1147_2(bool) = Load[b] : &:r1147_1, ~m? +# 1147| v1147_3(void) = ConditionalBranch : r1147_2 #-----| False -> Block 4 #-----| True -> Block 3 -# 1142| Block 1 -# 1142| v1142_6(void) = AliasedUse : ~m? -# 1142| v1142_7(void) = ExitFunction : +# 1144| Block 1 +# 1144| v1144_6(void) = AliasedUse : ~m? +# 1144| v1144_7(void) = ExitFunction : -# 1142| Block 2 -# 1142| v1142_8(void) = Unwind : +# 1144| Block 2 +# 1144| v1144_8(void) = Unwind : #-----| Goto -> Block 1 -# 1146| Block 3 -# 1146| r1146_1(glval) = VariableAddress[#throw1146:7] : -# 1146| r1146_2(glval) = StringConstant["string literal"] : -# 1146| r1146_3(char *) = Convert : r1146_2 -# 1146| mu1146_4(char *) = Store[#throw1146:7] : &:r1146_1, r1146_3 -# 1146| v1146_5(void) = ThrowValue : &:r1146_1, ~m? +# 1148| Block 3 +# 1148| r1148_1(glval) = VariableAddress[#throw1148:7] : +# 1148| r1148_2(glval) = StringConstant["string literal"] : +# 1148| r1148_3(char *) = Convert : r1148_2 +# 1148| mu1148_4(char *) = Store[#throw1148:7] : &:r1148_1, r1148_3 +# 1148| v1148_5(void) = ThrowValue : &:r1148_1, ~m? #-----| Exception -> Block 9 -# 1148| Block 4 -# 1148| r1148_1(glval) = VariableAddress[x] : -# 1148| r1148_2(int) = Load[x] : &:r1148_1, ~m? -# 1148| r1148_3(int) = Constant[2] : -# 1148| r1148_4(bool) = CompareLT : r1148_2, r1148_3 -# 1148| v1148_5(void) = ConditionalBranch : r1148_4 +# 1150| Block 4 +# 1150| r1150_1(glval) = VariableAddress[x] : +# 1150| r1150_2(int) = Load[x] : &:r1150_1, ~m? +# 1150| r1150_3(int) = Constant[2] : +# 1150| r1150_4(bool) = CompareLT : r1150_2, r1150_3 +# 1150| v1150_5(void) = ConditionalBranch : r1150_4 #-----| False -> Block 8 #-----| True -> Block 5 -# 1149| Block 5 -# 1149| r1149_1(glval) = VariableAddress[b] : -# 1149| r1149_2(bool) = Load[b] : &:r1149_1, ~m? -# 1149| v1149_3(void) = ConditionalBranch : r1149_2 +# 1151| Block 5 +# 1151| r1151_1(glval) = VariableAddress[b] : +# 1151| r1151_2(bool) = Load[b] : &:r1151_1, ~m? +# 1151| v1151_3(void) = ConditionalBranch : r1151_2 #-----| False -> Block 7 #-----| True -> Block 6 -# 1149| Block 6 -# 1149| r1149_4(int) = Constant[7] : -# 1149| r1149_5(glval) = VariableAddress[#temp1149:11] : -# 1149| mu1149_6(int) = Store[#temp1149:11] : &:r1149_5, r1149_4 -# 1149| r1149_7(glval) = VariableAddress[#temp1149:11] : -# 1149| r1149_8(int) = Load[#temp1149:11] : &:r1149_7, ~m? -# 1149| r1149_9(glval) = VariableAddress[x] : -# 1149| mu1149_10(int) = Store[x] : &:r1149_9, r1149_8 +# 1151| Block 6 +# 1151| r1151_4(int) = Constant[7] : +# 1151| r1151_5(glval) = VariableAddress[#temp1151:11] : +# 1151| mu1151_6(int) = Store[#temp1151:11] : &:r1151_5, r1151_4 +# 1151| r1151_7(glval) = VariableAddress[#temp1151:11] : +# 1151| r1151_8(int) = Load[#temp1151:11] : &:r1151_7, ~m? +# 1151| r1151_9(glval) = VariableAddress[x] : +# 1151| mu1151_10(int) = Store[x] : &:r1151_9, r1151_8 #-----| Goto -> Block 8 -# 1149| Block 7 -# 1149| r1149_11(glval) = VariableAddress[#throw1149:19] : -# 1149| mu1149_12(String) = Uninitialized[#throw1149:19] : &:r1149_11 -# 1149| r1149_13(glval) = FunctionAddress[String] : -# 1149| r1149_14(glval) = StringConstant["String object"] : -# 1149| r1149_15(char *) = Convert : r1149_14 -# 1149| v1149_16(void) = Call[String] : func:r1149_13, this:r1149_11, 0:r1149_15 -# 1149| mu1149_17(unknown) = ^CallSideEffect : ~m? -# 1149| v1149_18(void) = ^BufferReadSideEffect[0] : &:r1149_15, ~m? -# 1149| mu1149_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1149_11 -# 1149| v1149_20(void) = ThrowValue : &:r1149_11, ~m? +# 1151| Block 7 +# 1151| r1151_11(glval) = VariableAddress[#throw1151:19] : +# 1151| mu1151_12(String) = Uninitialized[#throw1151:19] : &:r1151_11 +# 1151| r1151_13(glval) = FunctionAddress[String] : +# 1151| r1151_14(glval) = StringConstant["String object"] : +# 1151| r1151_15(char *) = Convert : r1151_14 +# 1151| v1151_16(void) = Call[String] : func:r1151_13, this:r1151_11, 0:r1151_15 +# 1151| mu1151_17(unknown) = ^CallSideEffect : ~m? +# 1151| v1151_18(void) = ^BufferReadSideEffect[0] : &:r1151_15, ~m? +# 1151| mu1151_19(String) = ^IndirectMayWriteSideEffect[-1] : &:r1151_11 +# 1151| v1151_20(void) = ThrowValue : &:r1151_11, ~m? #-----| Exception -> Block 9 -# 1151| Block 8 -# 1151| r1151_1(int) = Constant[7] : -# 1151| r1151_2(glval) = VariableAddress[x] : -# 1151| mu1151_3(int) = Store[x] : &:r1151_2, r1151_1 +# 1153| Block 8 +# 1153| r1153_1(int) = Constant[7] : +# 1153| r1153_2(glval) = VariableAddress[x] : +# 1153| mu1153_3(int) = Store[x] : &:r1153_2, r1153_1 #-----| Goto -> Block 13 -# 1153| Block 9 -# 1153| v1153_1(void) = CatchByType[const char *] : +# 1155| Block 9 +# 1155| v1155_1(void) = CatchByType[const char *] : #-----| Exception -> Block 11 #-----| Goto -> Block 10 -# 1153| Block 10 -# 1153| r1153_2(glval) = VariableAddress[s] : -# 1153| mu1153_3(char *) = InitializeParameter[s] : &:r1153_2 -# 1153| r1153_4(char *) = Load[s] : &:r1153_2, ~m? -# 1153| mu1153_5(unknown) = InitializeIndirection[s] : &:r1153_4 -# 1154| r1154_1(glval) = VariableAddress[#throw1154:5] : -# 1154| mu1154_2(String) = Uninitialized[#throw1154:5] : &:r1154_1 -# 1154| r1154_3(glval) = FunctionAddress[String] : -# 1154| r1154_4(glval) = VariableAddress[s] : -# 1154| r1154_5(char *) = Load[s] : &:r1154_4, ~m? -# 1154| v1154_6(void) = Call[String] : func:r1154_3, this:r1154_1, 0:r1154_5 -# 1154| mu1154_7(unknown) = ^CallSideEffect : ~m? -# 1154| v1154_8(void) = ^BufferReadSideEffect[0] : &:r1154_5, ~m? -# 1154| mu1154_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1154_1 -# 1154| v1154_10(void) = ThrowValue : &:r1154_1, ~m? +# 1155| Block 10 +# 1155| r1155_2(glval) = VariableAddress[s] : +# 1155| mu1155_3(char *) = InitializeParameter[s] : &:r1155_2 +# 1155| r1155_4(char *) = Load[s] : &:r1155_2, ~m? +# 1155| mu1155_5(unknown) = InitializeIndirection[s] : &:r1155_4 +# 1156| r1156_1(glval) = VariableAddress[#throw1156:5] : +# 1156| mu1156_2(String) = Uninitialized[#throw1156:5] : &:r1156_1 +# 1156| r1156_3(glval) = FunctionAddress[String] : +# 1156| r1156_4(glval) = VariableAddress[s] : +# 1156| r1156_5(char *) = Load[s] : &:r1156_4, ~m? +# 1156| v1156_6(void) = Call[String] : func:r1156_3, this:r1156_1, 0:r1156_5 +# 1156| mu1156_7(unknown) = ^CallSideEffect : ~m? +# 1156| v1156_8(void) = ^BufferReadSideEffect[0] : &:r1156_5, ~m? +# 1156| mu1156_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1156_1 +# 1156| v1156_10(void) = ThrowValue : &:r1156_1, ~m? #-----| Exception -> Block 2 -# 1156| Block 11 -# 1156| v1156_1(void) = CatchByType[const String &] : +# 1158| Block 11 +# 1158| v1158_1(void) = CatchByType[const String &] : #-----| Exception -> Block 2 #-----| Goto -> Block 12 -# 1156| Block 12 -# 1156| r1156_2(glval) = VariableAddress[e] : -# 1156| mu1156_3(String &) = InitializeParameter[e] : &:r1156_2 -# 1156| r1156_4(String &) = Load[e] : &:r1156_2, ~m? -# 1156| mu1156_5(unknown) = InitializeIndirection[e] : &:r1156_4 -# 1156| v1156_6(void) = NoOp : +# 1158| Block 12 +# 1158| r1158_2(glval) = VariableAddress[e] : +# 1158| mu1158_3(String &) = InitializeParameter[e] : &:r1158_2 +# 1158| r1158_4(String &) = Load[e] : &:r1158_2, ~m? +# 1158| mu1158_5(unknown) = InitializeIndirection[e] : &:r1158_4 +# 1158| v1158_6(void) = NoOp : #-----| Goto -> Block 13 -# 1158| Block 13 -# 1158| v1158_1(void) = NoOp : -# 1142| v1142_9(void) = ReturnVoid : +# 1160| Block 13 +# 1160| v1160_1(void) = NoOp : +# 1144| v1144_9(void) = ReturnVoid : #-----| Goto -> Block 1 -# 1162| void VectorTypes(int) -# 1162| Block 0 -# 1162| v1162_1(void) = EnterFunction : -# 1162| mu1162_2(unknown) = AliasedDefinition : -# 1162| mu1162_3(unknown) = InitializeNonLocal : -# 1162| r1162_4(glval) = VariableAddress[i] : -# 1162| mu1162_5(int) = InitializeParameter[i] : &:r1162_4 -# 1163| r1163_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1163| mu1163_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1163_1 -# 1163| r1163_3(int) = Constant[0] : -# 1163| r1163_4(glval) = PointerAdd[4] : r1163_1, r1163_3 -# 1163| r1163_5(int) = Constant[0] : -# 1163| mu1163_6(int) = Store[?] : &:r1163_4, r1163_5 -# 1163| r1163_7(int) = Constant[1] : -# 1163| r1163_8(glval) = PointerAdd[4] : r1163_1, r1163_7 -# 1163| r1163_9(int) = Constant[1] : -# 1163| mu1163_10(int) = Store[?] : &:r1163_8, r1163_9 -# 1163| r1163_11(int) = Constant[2] : -# 1163| r1163_12(glval) = PointerAdd[4] : r1163_1, r1163_11 -# 1163| r1163_13(int) = Constant[2] : -# 1163| mu1163_14(int) = Store[?] : &:r1163_12, r1163_13 -# 1163| r1163_15(int) = Constant[3] : -# 1163| r1163_16(glval) = PointerAdd[4] : r1163_1, r1163_15 -# 1163| r1163_17(int) = Constant[3] : -# 1163| mu1163_18(int) = Store[?] : &:r1163_16, r1163_17 -# 1164| r1164_1(glval) = VariableAddress[x] : -# 1164| r1164_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1164| r1164_3(glval) = VariableAddress[i] : -# 1164| r1164_4(int) = Load[i] : &:r1164_3, ~m? -# 1164| r1164_5(glval) = PointerAdd[4] : r1164_2, r1164_4 -# 1164| r1164_6(int) = Load[?] : &:r1164_5, ~m? -# 1164| mu1164_7(int) = Store[x] : &:r1164_1, r1164_6 -# 1165| r1165_1(glval) = VariableAddress[x] : -# 1165| r1165_2(int) = Load[x] : &:r1165_1, ~m? -# 1165| r1165_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1165| r1165_4(glval) = VariableAddress[i] : -# 1165| r1165_5(int) = Load[i] : &:r1165_4, ~m? -# 1165| r1165_6(glval) = PointerAdd[4] : r1165_3, r1165_5 -# 1165| mu1165_7(int) = Store[?] : &:r1165_6, r1165_2 -# 1166| r1166_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1164| void VectorTypes(int) +# 1164| Block 0 +# 1164| v1164_1(void) = EnterFunction : +# 1164| mu1164_2(unknown) = AliasedDefinition : +# 1164| mu1164_3(unknown) = InitializeNonLocal : +# 1164| r1164_4(glval) = VariableAddress[i] : +# 1164| mu1164_5(int) = InitializeParameter[i] : &:r1164_4 +# 1165| r1165_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1165| mu1165_2(__attribute((vector_size(16UL))) int) = Uninitialized[vi4] : &:r1165_1 +# 1165| r1165_3(int) = Constant[0] : +# 1165| r1165_4(glval) = PointerAdd[4] : r1165_1, r1165_3 +# 1165| r1165_5(int) = Constant[0] : +# 1165| mu1165_6(int) = Store[?] : &:r1165_4, r1165_5 +# 1165| r1165_7(int) = Constant[1] : +# 1165| r1165_8(glval) = PointerAdd[4] : r1165_1, r1165_7 +# 1165| r1165_9(int) = Constant[1] : +# 1165| mu1165_10(int) = Store[?] : &:r1165_8, r1165_9 +# 1165| r1165_11(int) = Constant[2] : +# 1165| r1165_12(glval) = PointerAdd[4] : r1165_1, r1165_11 +# 1165| r1165_13(int) = Constant[2] : +# 1165| mu1165_14(int) = Store[?] : &:r1165_12, r1165_13 +# 1165| r1165_15(int) = Constant[3] : +# 1165| r1165_16(glval) = PointerAdd[4] : r1165_1, r1165_15 +# 1165| r1165_17(int) = Constant[3] : +# 1165| mu1165_18(int) = Store[?] : &:r1165_16, r1165_17 +# 1166| r1166_1(glval) = VariableAddress[x] : # 1166| r1166_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_2, ~m? -# 1166| r1166_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1166| r1166_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1166_4, ~m? -# 1166| r1166_6(int) = Constant[3] : -# 1166| r1166_7(int) = Constant[2] : -# 1166| r1166_8(int) = Constant[1] : -# 1166| r1166_9(int) = Constant[0] : -# 1166| r1166_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1166_3, 1:r1166_5, 2:r1166_6, 3:r1166_7, 4:r1166_8, 5:r1166_9 -# 1166| mu1166_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1166_1, r1166_10 -# 1167| r1167_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| r1167_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1167_1, ~m? -# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : -# 1167| r1167_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1167_3, ~m? -# 1167| r1167_5(__attribute((vector_size(16UL))) int) = Add : r1167_2, r1167_4 -# 1167| r1167_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : -# 1167| mu1167_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1167_6, r1167_5 -# 1168| v1168_1(void) = NoOp : -# 1162| v1162_6(void) = ReturnVoid : -# 1162| v1162_7(void) = AliasedUse : ~m? -# 1162| v1162_8(void) = ExitFunction : +# 1166| r1166_3(glval) = VariableAddress[i] : +# 1166| r1166_4(int) = Load[i] : &:r1166_3, ~m? +# 1166| r1166_5(glval) = PointerAdd[4] : r1166_2, r1166_4 +# 1166| r1166_6(int) = Load[?] : &:r1166_5, ~m? +# 1166| mu1166_7(int) = Store[x] : &:r1166_1, r1166_6 +# 1167| r1167_1(glval) = VariableAddress[x] : +# 1167| r1167_2(int) = Load[x] : &:r1167_1, ~m? +# 1167| r1167_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1167| r1167_4(glval) = VariableAddress[i] : +# 1167| r1167_5(int) = Load[i] : &:r1167_4, ~m? +# 1167| r1167_6(glval) = PointerAdd[4] : r1167_3, r1167_5 +# 1167| mu1167_7(int) = Store[?] : &:r1167_6, r1167_2 +# 1168| r1168_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1168| r1168_2(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_3(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_2, ~m? +# 1168| r1168_4(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1168| r1168_5(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1168_4, ~m? +# 1168| r1168_6(int) = Constant[3] : +# 1168| r1168_7(int) = Constant[2] : +# 1168| r1168_8(int) = Constant[1] : +# 1168| r1168_9(int) = Constant[0] : +# 1168| r1168_10(__attribute((vector_size(16))) int) = BuiltIn[__builtin_shufflevector] : 0:r1168_3, 1:r1168_5, 2:r1168_6, 3:r1168_7, 4:r1168_8, 5:r1168_9 +# 1168| mu1168_11(__attribute((vector_size(16UL))) int) = Store[vi4_shuffle] : &:r1168_1, r1168_10 +# 1169| r1169_1(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| r1169_2(__attribute((vector_size(16UL))) int) = Load[vi4] : &:r1169_1, ~m? +# 1169| r1169_3(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4_shuffle] : +# 1169| r1169_4(__attribute((vector_size(16UL))) int) = Load[vi4_shuffle] : &:r1169_3, ~m? +# 1169| r1169_5(__attribute((vector_size(16UL))) int) = Add : r1169_2, r1169_4 +# 1169| r1169_6(glval<__attribute((vector_size(16UL))) int>) = VariableAddress[vi4] : +# 1169| mu1169_7(__attribute((vector_size(16UL))) int) = Store[vi4] : &:r1169_6, r1169_5 +# 1170| v1170_1(void) = NoOp : +# 1164| v1164_6(void) = ReturnVoid : +# 1164| v1164_7(void) = AliasedUse : ~m? +# 1164| v1164_8(void) = ExitFunction : -# 1172| int ModeledCallTarget(int) -# 1172| Block 0 -# 1172| v1172_1(void) = EnterFunction : -# 1172| mu1172_2(unknown) = AliasedDefinition : -# 1172| mu1172_3(unknown) = InitializeNonLocal : -# 1172| r1172_4(glval) = VariableAddress[x] : -# 1172| mu1172_5(int) = InitializeParameter[x] : &:r1172_4 -# 1173| r1173_1(glval) = VariableAddress[y] : -# 1173| mu1173_2(int) = Uninitialized[y] : &:r1173_1 -# 1174| r1174_1(glval) = FunctionAddress[memcpy] : -# 1174| r1174_2(glval) = VariableAddress[y] : -# 1174| r1174_3(int *) = CopyValue : r1174_2 -# 1174| r1174_4(void *) = Convert : r1174_3 -# 1174| r1174_5(glval) = VariableAddress[x] : -# 1174| r1174_6(int *) = CopyValue : r1174_5 -# 1174| r1174_7(void *) = Convert : r1174_6 -# 1174| r1174_8(int) = Constant[4] : -# 1174| r1174_9(void *) = Call[memcpy] : func:r1174_1, 0:r1174_4, 1:r1174_7, 2:r1174_8 -# 1174| v1174_10(void) = ^SizedBufferReadSideEffect[1] : &:r1174_7, r1174_8, ~m? -# 1174| mu1174_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1174_4, r1174_8 -# 1175| r1175_1(glval) = VariableAddress[#return] : -# 1175| r1175_2(glval) = VariableAddress[y] : -# 1175| r1175_3(int) = Load[y] : &:r1175_2, ~m? -# 1175| mu1175_4(int) = Store[#return] : &:r1175_1, r1175_3 -# 1172| r1172_6(glval) = VariableAddress[#return] : -# 1172| v1172_7(void) = ReturnValue : &:r1172_6, ~m? -# 1172| v1172_8(void) = AliasedUse : ~m? -# 1172| v1172_9(void) = ExitFunction : +# 1174| int ModeledCallTarget(int) +# 1174| Block 0 +# 1174| v1174_1(void) = EnterFunction : +# 1174| mu1174_2(unknown) = AliasedDefinition : +# 1174| mu1174_3(unknown) = InitializeNonLocal : +# 1174| r1174_4(glval) = VariableAddress[x] : +# 1174| mu1174_5(int) = InitializeParameter[x] : &:r1174_4 +# 1175| r1175_1(glval) = VariableAddress[y] : +# 1175| mu1175_2(int) = Uninitialized[y] : &:r1175_1 +# 1176| r1176_1(glval) = FunctionAddress[memcpy] : +# 1176| r1176_2(glval) = VariableAddress[y] : +# 1176| r1176_3(int *) = CopyValue : r1176_2 +# 1176| r1176_4(void *) = Convert : r1176_3 +# 1176| r1176_5(glval) = VariableAddress[x] : +# 1176| r1176_6(int *) = CopyValue : r1176_5 +# 1176| r1176_7(void *) = Convert : r1176_6 +# 1176| r1176_8(int) = Constant[4] : +# 1176| r1176_9(void *) = Call[memcpy] : func:r1176_1, 0:r1176_4, 1:r1176_7, 2:r1176_8 +# 1176| v1176_10(void) = ^SizedBufferReadSideEffect[1] : &:r1176_7, r1176_8, ~m? +# 1176| mu1176_11(unknown) = ^SizedBufferMustWriteSideEffect[0] : &:r1176_4, r1176_8 +# 1177| r1177_1(glval) = VariableAddress[#return] : +# 1177| r1177_2(glval) = VariableAddress[y] : +# 1177| r1177_3(int) = Load[y] : &:r1177_2, ~m? +# 1177| mu1177_4(int) = Store[#return] : &:r1177_1, r1177_3 +# 1174| r1174_6(glval) = VariableAddress[#return] : +# 1174| v1174_7(void) = ReturnValue : &:r1174_6, ~m? +# 1174| v1174_8(void) = AliasedUse : ~m? +# 1174| v1174_9(void) = ExitFunction : -# 1178| String ReturnObjectImpl() -# 1178| Block 0 -# 1178| v1178_1(void) = EnterFunction : -# 1178| mu1178_2(unknown) = AliasedDefinition : -# 1178| mu1178_3(unknown) = InitializeNonLocal : -# 1179| r1179_1(glval) = VariableAddress[#return] : -# 1179| mu1179_2(String) = Uninitialized[#return] : &:r1179_1 -# 1179| r1179_3(glval) = FunctionAddress[String] : -# 1179| r1179_4(glval) = StringConstant["foo"] : -# 1179| r1179_5(char *) = Convert : r1179_4 -# 1179| v1179_6(void) = Call[String] : func:r1179_3, this:r1179_1, 0:r1179_5 -# 1179| mu1179_7(unknown) = ^CallSideEffect : ~m? -# 1179| v1179_8(void) = ^BufferReadSideEffect[0] : &:r1179_5, ~m? -# 1179| mu1179_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1179_1 -# 1178| r1178_4(glval) = VariableAddress[#return] : -# 1178| v1178_5(void) = ReturnValue : &:r1178_4, ~m? -# 1178| v1178_6(void) = AliasedUse : ~m? -# 1178| v1178_7(void) = ExitFunction : +# 1180| String ReturnObjectImpl() +# 1180| Block 0 +# 1180| v1180_1(void) = EnterFunction : +# 1180| mu1180_2(unknown) = AliasedDefinition : +# 1180| mu1180_3(unknown) = InitializeNonLocal : +# 1181| r1181_1(glval) = VariableAddress[#return] : +# 1181| mu1181_2(String) = Uninitialized[#return] : &:r1181_1 +# 1181| r1181_3(glval) = FunctionAddress[String] : +# 1181| r1181_4(glval) = StringConstant["foo"] : +# 1181| r1181_5(char *) = Convert : r1181_4 +# 1181| v1181_6(void) = Call[String] : func:r1181_3, this:r1181_1, 0:r1181_5 +# 1181| mu1181_7(unknown) = ^CallSideEffect : ~m? +# 1181| v1181_8(void) = ^BufferReadSideEffect[0] : &:r1181_5, ~m? +# 1181| mu1181_9(String) = ^IndirectMayWriteSideEffect[-1] : &:r1181_1 +# 1180| r1180_4(glval) = VariableAddress[#return] : +# 1180| v1180_5(void) = ReturnValue : &:r1180_4, ~m? +# 1180| v1180_6(void) = AliasedUse : ~m? +# 1180| v1180_7(void) = ExitFunction : -# 1182| void switch1Case(int) -# 1182| Block 0 -# 1182| v1182_1(void) = EnterFunction : -# 1182| mu1182_2(unknown) = AliasedDefinition : -# 1182| mu1182_3(unknown) = InitializeNonLocal : -# 1182| r1182_4(glval) = VariableAddress[x] : -# 1182| mu1182_5(int) = InitializeParameter[x] : &:r1182_4 -# 1183| r1183_1(glval) = VariableAddress[y] : -# 1183| r1183_2(int) = Constant[0] : -# 1183| mu1183_3(int) = Store[y] : &:r1183_1, r1183_2 -# 1184| r1184_1(glval) = VariableAddress[x] : -# 1184| r1184_2(int) = Load[x] : &:r1184_1, ~m? -# 1184| v1184_3(void) = Switch : r1184_2 +# 1184| void switch1Case(int) +# 1184| Block 0 +# 1184| v1184_1(void) = EnterFunction : +# 1184| mu1184_2(unknown) = AliasedDefinition : +# 1184| mu1184_3(unknown) = InitializeNonLocal : +# 1184| r1184_4(glval) = VariableAddress[x] : +# 1184| mu1184_5(int) = InitializeParameter[x] : &:r1184_4 +# 1185| r1185_1(glval) = VariableAddress[y] : +# 1185| r1185_2(int) = Constant[0] : +# 1185| mu1185_3(int) = Store[y] : &:r1185_1, r1185_2 +# 1186| r1186_1(glval) = VariableAddress[x] : +# 1186| r1186_2(int) = Load[x] : &:r1186_1, ~m? +# 1186| v1186_3(void) = Switch : r1186_2 #-----| Case[1] -> Block 1 #-----| Default -> Block 2 -# 1185| Block 1 -# 1185| v1185_1(void) = NoOp : -# 1186| r1186_1(int) = Constant[2] : -# 1186| r1186_2(glval) = VariableAddress[y] : -# 1186| mu1186_3(int) = Store[y] : &:r1186_2, r1186_1 +# 1187| Block 1 +# 1187| v1187_1(void) = NoOp : +# 1188| r1188_1(int) = Constant[2] : +# 1188| r1188_2(glval) = VariableAddress[y] : +# 1188| mu1188_3(int) = Store[y] : &:r1188_2, r1188_1 #-----| Goto -> Block 2 -# 1188| Block 2 -# 1188| r1188_1(glval) = VariableAddress[z] : -# 1188| r1188_2(glval) = VariableAddress[y] : -# 1188| r1188_3(int) = Load[y] : &:r1188_2, ~m? -# 1188| mu1188_4(int) = Store[z] : &:r1188_1, r1188_3 -# 1189| v1189_1(void) = NoOp : -# 1182| v1182_6(void) = ReturnVoid : -# 1182| v1182_7(void) = AliasedUse : ~m? -# 1182| v1182_8(void) = ExitFunction : +# 1190| Block 2 +# 1190| r1190_1(glval) = VariableAddress[z] : +# 1190| r1190_2(glval) = VariableAddress[y] : +# 1190| r1190_3(int) = Load[y] : &:r1190_2, ~m? +# 1190| mu1190_4(int) = Store[z] : &:r1190_1, r1190_3 +# 1191| v1191_1(void) = NoOp : +# 1184| v1184_6(void) = ReturnVoid : +# 1184| v1184_7(void) = AliasedUse : ~m? +# 1184| v1184_8(void) = ExitFunction : -# 1191| void switch2Case_fallthrough(int) -# 1191| Block 0 -# 1191| v1191_1(void) = EnterFunction : -# 1191| mu1191_2(unknown) = AliasedDefinition : -# 1191| mu1191_3(unknown) = InitializeNonLocal : -# 1191| r1191_4(glval) = VariableAddress[x] : -# 1191| mu1191_5(int) = InitializeParameter[x] : &:r1191_4 -# 1192| r1192_1(glval) = VariableAddress[y] : -# 1192| r1192_2(int) = Constant[0] : -# 1192| mu1192_3(int) = Store[y] : &:r1192_1, r1192_2 -# 1193| r1193_1(glval) = VariableAddress[x] : -# 1193| r1193_2(int) = Load[x] : &:r1193_1, ~m? -# 1193| v1193_3(void) = Switch : r1193_2 +# 1193| void switch2Case_fallthrough(int) +# 1193| Block 0 +# 1193| v1193_1(void) = EnterFunction : +# 1193| mu1193_2(unknown) = AliasedDefinition : +# 1193| mu1193_3(unknown) = InitializeNonLocal : +# 1193| r1193_4(glval) = VariableAddress[x] : +# 1193| mu1193_5(int) = InitializeParameter[x] : &:r1193_4 +# 1194| r1194_1(glval) = VariableAddress[y] : +# 1194| r1194_2(int) = Constant[0] : +# 1194| mu1194_3(int) = Store[y] : &:r1194_1, r1194_2 +# 1195| r1195_1(glval) = VariableAddress[x] : +# 1195| r1195_2(int) = Load[x] : &:r1195_1, ~m? +# 1195| v1195_3(void) = Switch : r1195_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1194| Block 1 -# 1194| v1194_1(void) = NoOp : -# 1195| r1195_1(int) = Constant[2] : -# 1195| r1195_2(glval) = VariableAddress[y] : -# 1195| mu1195_3(int) = Store[y] : &:r1195_2, r1195_1 -#-----| Goto -> Block 2 - -# 1196| Block 2 +# 1196| Block 1 # 1196| v1196_1(void) = NoOp : -# 1197| r1197_1(int) = Constant[3] : +# 1197| r1197_1(int) = Constant[2] : # 1197| r1197_2(glval) = VariableAddress[y] : # 1197| mu1197_3(int) = Store[y] : &:r1197_2, r1197_1 -#-----| Goto -> Block 3 +#-----| Goto -> Block 2 -# 1199| Block 3 -# 1199| r1199_1(glval) = VariableAddress[z] : +# 1198| Block 2 +# 1198| v1198_1(void) = NoOp : +# 1199| r1199_1(int) = Constant[3] : # 1199| r1199_2(glval) = VariableAddress[y] : -# 1199| r1199_3(int) = Load[y] : &:r1199_2, ~m? -# 1199| mu1199_4(int) = Store[z] : &:r1199_1, r1199_3 -# 1200| v1200_1(void) = NoOp : -# 1191| v1191_6(void) = ReturnVoid : -# 1191| v1191_7(void) = AliasedUse : ~m? -# 1191| v1191_8(void) = ExitFunction : +# 1199| mu1199_3(int) = Store[y] : &:r1199_2, r1199_1 +#-----| Goto -> Block 3 -# 1202| void switch2Case(int) -# 1202| Block 0 -# 1202| v1202_1(void) = EnterFunction : -# 1202| mu1202_2(unknown) = AliasedDefinition : -# 1202| mu1202_3(unknown) = InitializeNonLocal : -# 1202| r1202_4(glval) = VariableAddress[x] : -# 1202| mu1202_5(int) = InitializeParameter[x] : &:r1202_4 -# 1203| r1203_1(glval) = VariableAddress[y] : -# 1203| r1203_2(int) = Constant[0] : -# 1203| mu1203_3(int) = Store[y] : &:r1203_1, r1203_2 -# 1204| r1204_1(glval) = VariableAddress[x] : -# 1204| r1204_2(int) = Load[x] : &:r1204_1, ~m? -# 1204| v1204_3(void) = Switch : r1204_2 +# 1201| Block 3 +# 1201| r1201_1(glval) = VariableAddress[z] : +# 1201| r1201_2(glval) = VariableAddress[y] : +# 1201| r1201_3(int) = Load[y] : &:r1201_2, ~m? +# 1201| mu1201_4(int) = Store[z] : &:r1201_1, r1201_3 +# 1202| v1202_1(void) = NoOp : +# 1193| v1193_6(void) = ReturnVoid : +# 1193| v1193_7(void) = AliasedUse : ~m? +# 1193| v1193_8(void) = ExitFunction : + +# 1204| void switch2Case(int) +# 1204| Block 0 +# 1204| v1204_1(void) = EnterFunction : +# 1204| mu1204_2(unknown) = AliasedDefinition : +# 1204| mu1204_3(unknown) = InitializeNonLocal : +# 1204| r1204_4(glval) = VariableAddress[x] : +# 1204| mu1204_5(int) = InitializeParameter[x] : &:r1204_4 +# 1205| r1205_1(glval) = VariableAddress[y] : +# 1205| r1205_2(int) = Constant[0] : +# 1205| mu1205_3(int) = Store[y] : &:r1205_1, r1205_2 +# 1206| r1206_1(glval) = VariableAddress[x] : +# 1206| r1206_2(int) = Load[x] : &:r1206_1, ~m? +# 1206| v1206_3(void) = Switch : r1206_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1205| Block 1 -# 1205| v1205_1(void) = NoOp : -# 1206| r1206_1(int) = Constant[2] : -# 1206| r1206_2(glval) = VariableAddress[y] : -# 1206| mu1206_3(int) = Store[y] : &:r1206_2, r1206_1 +# 1207| Block 1 # 1207| v1207_1(void) = NoOp : +# 1208| r1208_1(int) = Constant[2] : +# 1208| r1208_2(glval) = VariableAddress[y] : +# 1208| mu1208_3(int) = Store[y] : &:r1208_2, r1208_1 +# 1209| v1209_1(void) = NoOp : #-----| Goto -> Block 3 -# 1208| Block 2 -# 1208| v1208_1(void) = NoOp : -# 1209| r1209_1(int) = Constant[3] : -# 1209| r1209_2(glval) = VariableAddress[y] : -# 1209| mu1209_3(int) = Store[y] : &:r1209_2, r1209_1 -#-----| Goto -> Block 3 - -# 1210| Block 3 +# 1210| Block 2 # 1210| v1210_1(void) = NoOp : -# 1211| r1211_1(glval) = VariableAddress[z] : +# 1211| r1211_1(int) = Constant[3] : # 1211| r1211_2(glval) = VariableAddress[y] : -# 1211| r1211_3(int) = Load[y] : &:r1211_2, ~m? -# 1211| mu1211_4(int) = Store[z] : &:r1211_1, r1211_3 -# 1212| v1212_1(void) = NoOp : -# 1202| v1202_6(void) = ReturnVoid : -# 1202| v1202_7(void) = AliasedUse : ~m? -# 1202| v1202_8(void) = ExitFunction : +# 1211| mu1211_3(int) = Store[y] : &:r1211_2, r1211_1 +#-----| Goto -> Block 3 -# 1214| void switch2Case_default(int) -# 1214| Block 0 -# 1214| v1214_1(void) = EnterFunction : -# 1214| mu1214_2(unknown) = AliasedDefinition : -# 1214| mu1214_3(unknown) = InitializeNonLocal : -# 1214| r1214_4(glval) = VariableAddress[x] : -# 1214| mu1214_5(int) = InitializeParameter[x] : &:r1214_4 -# 1215| r1215_1(glval) = VariableAddress[y] : -# 1215| r1215_2(int) = Constant[0] : -# 1215| mu1215_3(int) = Store[y] : &:r1215_1, r1215_2 -# 1216| r1216_1(glval) = VariableAddress[x] : -# 1216| r1216_2(int) = Load[x] : &:r1216_1, ~m? -# 1216| v1216_3(void) = Switch : r1216_2 +# 1212| Block 3 +# 1212| v1212_1(void) = NoOp : +# 1213| r1213_1(glval) = VariableAddress[z] : +# 1213| r1213_2(glval) = VariableAddress[y] : +# 1213| r1213_3(int) = Load[y] : &:r1213_2, ~m? +# 1213| mu1213_4(int) = Store[z] : &:r1213_1, r1213_3 +# 1214| v1214_1(void) = NoOp : +# 1204| v1204_6(void) = ReturnVoid : +# 1204| v1204_7(void) = AliasedUse : ~m? +# 1204| v1204_8(void) = ExitFunction : + +# 1216| void switch2Case_default(int) +# 1216| Block 0 +# 1216| v1216_1(void) = EnterFunction : +# 1216| mu1216_2(unknown) = AliasedDefinition : +# 1216| mu1216_3(unknown) = InitializeNonLocal : +# 1216| r1216_4(glval) = VariableAddress[x] : +# 1216| mu1216_5(int) = InitializeParameter[x] : &:r1216_4 +# 1217| r1217_1(glval) = VariableAddress[y] : +# 1217| r1217_2(int) = Constant[0] : +# 1217| mu1217_3(int) = Store[y] : &:r1217_1, r1217_2 +# 1218| r1218_1(glval) = VariableAddress[x] : +# 1218| r1218_2(int) = Load[x] : &:r1218_1, ~m? +# 1218| v1218_3(void) = Switch : r1218_2 #-----| Case[1] -> Block 1 #-----| Case[2] -> Block 2 #-----| Default -> Block 3 -# 1217| Block 1 -# 1217| v1217_1(void) = NoOp : -# 1218| r1218_1(int) = Constant[2] : -# 1218| r1218_2(glval) = VariableAddress[y] : -# 1218| mu1218_3(int) = Store[y] : &:r1218_2, r1218_1 +# 1219| Block 1 # 1219| v1219_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1221| Block 2 +# 1220| r1220_1(int) = Constant[2] : +# 1220| r1220_2(glval) = VariableAddress[y] : +# 1220| mu1220_3(int) = Store[y] : &:r1220_2, r1220_1 # 1221| v1221_1(void) = NoOp : -# 1222| r1222_1(int) = Constant[3] : -# 1222| r1222_2(glval) = VariableAddress[y] : -# 1222| mu1222_3(int) = Store[y] : &:r1222_2, r1222_1 +#-----| Goto -> Block 4 + +# 1223| Block 2 # 1223| v1223_1(void) = NoOp : -#-----| Goto -> Block 4 - -# 1225| Block 3 +# 1224| r1224_1(int) = Constant[3] : +# 1224| r1224_2(glval) = VariableAddress[y] : +# 1224| mu1224_3(int) = Store[y] : &:r1224_2, r1224_1 # 1225| v1225_1(void) = NoOp : -# 1226| r1226_1(int) = Constant[4] : -# 1226| r1226_2(glval) = VariableAddress[y] : -# 1226| mu1226_3(int) = Store[y] : &:r1226_2, r1226_1 #-----| Goto -> Block 4 -# 1227| Block 4 +# 1227| Block 3 # 1227| v1227_1(void) = NoOp : -# 1228| r1228_1(glval) = VariableAddress[z] : +# 1228| r1228_1(int) = Constant[4] : # 1228| r1228_2(glval) = VariableAddress[y] : -# 1228| r1228_3(int) = Load[y] : &:r1228_2, ~m? -# 1228| mu1228_4(int) = Store[z] : &:r1228_1, r1228_3 +# 1228| mu1228_3(int) = Store[y] : &:r1228_2, r1228_1 +#-----| Goto -> Block 4 + +# 1229| Block 4 # 1229| v1229_1(void) = NoOp : -# 1214| v1214_6(void) = ReturnVoid : -# 1214| v1214_7(void) = AliasedUse : ~m? -# 1214| v1214_8(void) = ExitFunction : +# 1230| r1230_1(glval) = VariableAddress[z] : +# 1230| r1230_2(glval) = VariableAddress[y] : +# 1230| r1230_3(int) = Load[y] : &:r1230_2, ~m? +# 1230| mu1230_4(int) = Store[z] : &:r1230_1, r1230_3 +# 1231| v1231_1(void) = NoOp : +# 1216| v1216_6(void) = ReturnVoid : +# 1216| v1216_7(void) = AliasedUse : ~m? +# 1216| v1216_8(void) = ExitFunction : -# 1231| int staticLocalInit(int) -# 1231| Block 0 -# 1231| v1231_1(void) = EnterFunction : -# 1231| mu1231_2(unknown) = AliasedDefinition : -# 1231| mu1231_3(unknown) = InitializeNonLocal : -# 1231| r1231_4(glval) = VariableAddress[x] : -# 1231| mu1231_5(int) = InitializeParameter[x] : &:r1231_4 -# 1234| r1234_1(glval) = VariableAddress[c#init] : -# 1234| r1234_2(bool) = Load[c#init] : &:r1234_1, ~m? -# 1234| v1234_3(void) = ConditionalBranch : r1234_2 -#-----| False -> Block 1 -#-----| True -> Block 2 - -# 1234| Block 1 -# 1234| r1234_4(glval) = VariableAddress[c] : -# 1234| r1234_5(glval) = VariableAddress[x] : -# 1234| r1234_6(int) = Load[x] : &:r1234_5, ~m? -# 1234| mu1234_7(int) = Store[c] : &:r1234_4, r1234_6 -# 1234| r1234_8(bool) = Constant[1] : -# 1234| mu1234_9(bool) = Store[c#init] : &:r1234_1, r1234_8 -#-----| Goto -> Block 2 - -# 1237| Block 2 -# 1237| r1237_1(glval) = VariableAddress[#return] : -# 1237| r1237_2(glval) = VariableAddress[a] : -# 1237| r1237_3(int) = Load[a] : &:r1237_2, ~m? -# 1237| r1237_4(glval) = VariableAddress[b] : -# 1237| r1237_5(int) = Load[b] : &:r1237_4, ~m? -# 1237| r1237_6(int) = Add : r1237_3, r1237_5 -# 1237| r1237_7(glval) = VariableAddress[c] : -# 1237| r1237_8(int) = Load[c] : &:r1237_7, ~m? -# 1237| r1237_9(int) = Add : r1237_6, r1237_8 -# 1237| r1237_10(glval) = VariableAddress[d] : -# 1237| r1237_11(int) = Load[d] : &:r1237_10, ~m? -# 1237| r1237_12(int) = Add : r1237_9, r1237_11 -# 1237| mu1237_13(int) = Store[#return] : &:r1237_1, r1237_12 -# 1231| r1231_6(glval) = VariableAddress[#return] : -# 1231| v1231_7(void) = ReturnValue : &:r1231_6, ~m? -# 1231| v1231_8(void) = AliasedUse : ~m? -# 1231| v1231_9(void) = ExitFunction : - -# 1232| int a -# 1232| Block 0 -# 1232| v1232_1(void) = EnterFunction : -# 1232| mu1232_2(unknown) = AliasedDefinition : -# 1232| r1232_3(glval) = VariableAddress[a] : -# 1232| r1232_4(int) = Constant[0] : -# 1232| mu1232_5(int) = Store[a] : &:r1232_3, r1232_4 -# 1232| v1232_6(void) = ReturnVoid : -# 1232| v1232_7(void) = AliasedUse : ~m? -# 1232| v1232_8(void) = ExitFunction : - -# 1233| int b +# 1233| int staticLocalInit(int) # 1233| Block 0 -# 1233| v1233_1(void) = EnterFunction : -# 1233| mu1233_2(unknown) = AliasedDefinition : -# 1233| r1233_3(glval) = VariableAddress[b] : -# 1233| r1233_4(int) = Constant[4] : -# 1233| mu1233_5(int) = Store[b] : &:r1233_3, r1233_4 -# 1233| v1233_6(void) = ReturnVoid : -# 1233| v1233_7(void) = AliasedUse : ~m? -# 1233| v1233_8(void) = ExitFunction : - -# 1240| void staticLocalWithConstructor(char const*) -# 1240| Block 0 -# 1240| v1240_1(void) = EnterFunction : -# 1240| mu1240_2(unknown) = AliasedDefinition : -# 1240| mu1240_3(unknown) = InitializeNonLocal : -# 1240| r1240_4(glval) = VariableAddress[dynamic] : -# 1240| mu1240_5(char *) = InitializeParameter[dynamic] : &:r1240_4 -# 1240| r1240_6(char *) = Load[dynamic] : &:r1240_4, ~m? -# 1240| mu1240_7(unknown) = InitializeIndirection[dynamic] : &:r1240_6 -# 1241| r1241_1(glval) = VariableAddress[a#init] : -# 1241| r1241_2(bool) = Load[a#init] : &:r1241_1, ~m? -# 1241| v1241_3(void) = ConditionalBranch : r1241_2 +# 1233| v1233_1(void) = EnterFunction : +# 1233| mu1233_2(unknown) = AliasedDefinition : +# 1233| mu1233_3(unknown) = InitializeNonLocal : +# 1233| r1233_4(glval) = VariableAddress[x] : +# 1233| mu1233_5(int) = InitializeParameter[x] : &:r1233_4 +# 1236| r1236_1(glval) = VariableAddress[c#init] : +# 1236| r1236_2(bool) = Load[c#init] : &:r1236_1, ~m? +# 1236| v1236_3(void) = ConditionalBranch : r1236_2 #-----| False -> Block 1 #-----| True -> Block 2 -# 1241| Block 1 -# 1241| r1241_4(glval) = VariableAddress[a] : -#-----| r0_1(glval) = FunctionAddress[String] : -#-----| v0_2(void) = Call[String] : func:r0_1, this:r1241_4 -#-----| mu0_3(unknown) = ^CallSideEffect : ~m? -#-----| mu0_4(String) = ^IndirectMayWriteSideEffect[-1] : &:r1241_4 -# 1241| r1241_5(bool) = Constant[1] : -# 1241| mu1241_6(bool) = Store[a#init] : &:r1241_1, r1241_5 +# 1236| Block 1 +# 1236| r1236_4(glval) = VariableAddress[c] : +# 1236| r1236_5(glval) = VariableAddress[x] : +# 1236| r1236_6(int) = Load[x] : &:r1236_5, ~m? +# 1236| mu1236_7(int) = Store[c] : &:r1236_4, r1236_6 +# 1236| r1236_8(bool) = Constant[1] : +# 1236| mu1236_9(bool) = Store[c#init] : &:r1236_1, r1236_8 #-----| Goto -> Block 2 -# 1242| Block 2 -# 1242| r1242_1(glval) = VariableAddress[b#init] : -# 1242| r1242_2(bool) = Load[b#init] : &:r1242_1, ~m? -# 1242| v1242_3(void) = ConditionalBranch : r1242_2 +# 1239| Block 2 +# 1239| r1239_1(glval) = VariableAddress[#return] : +# 1239| r1239_2(glval) = VariableAddress[a] : +# 1239| r1239_3(int) = Load[a] : &:r1239_2, ~m? +# 1239| r1239_4(glval) = VariableAddress[b] : +# 1239| r1239_5(int) = Load[b] : &:r1239_4, ~m? +# 1239| r1239_6(int) = Add : r1239_3, r1239_5 +# 1239| r1239_7(glval) = VariableAddress[c] : +# 1239| r1239_8(int) = Load[c] : &:r1239_7, ~m? +# 1239| r1239_9(int) = Add : r1239_6, r1239_8 +# 1239| r1239_10(glval) = VariableAddress[d] : +# 1239| r1239_11(int) = Load[d] : &:r1239_10, ~m? +# 1239| r1239_12(int) = Add : r1239_9, r1239_11 +# 1239| mu1239_13(int) = Store[#return] : &:r1239_1, r1239_12 +# 1233| r1233_6(glval) = VariableAddress[#return] : +# 1233| v1233_7(void) = ReturnValue : &:r1233_6, ~m? +# 1233| v1233_8(void) = AliasedUse : ~m? +# 1233| v1233_9(void) = ExitFunction : + +# 1234| int a +# 1234| Block 0 +# 1234| v1234_1(void) = EnterFunction : +# 1234| mu1234_2(unknown) = AliasedDefinition : +# 1234| r1234_3(glval) = VariableAddress[a] : +# 1234| r1234_4(int) = Constant[0] : +# 1234| mu1234_5(int) = Store[a] : &:r1234_3, r1234_4 +# 1234| v1234_6(void) = ReturnVoid : +# 1234| v1234_7(void) = AliasedUse : ~m? +# 1234| v1234_8(void) = ExitFunction : + +# 1235| int b +# 1235| Block 0 +# 1235| v1235_1(void) = EnterFunction : +# 1235| mu1235_2(unknown) = AliasedDefinition : +# 1235| r1235_3(glval) = VariableAddress[b] : +# 1235| r1235_4(int) = Constant[4] : +# 1235| mu1235_5(int) = Store[b] : &:r1235_3, r1235_4 +# 1235| v1235_6(void) = ReturnVoid : +# 1235| v1235_7(void) = AliasedUse : ~m? +# 1235| v1235_8(void) = ExitFunction : + +# 1242| void staticLocalWithConstructor(char const*) +# 1242| Block 0 +# 1242| v1242_1(void) = EnterFunction : +# 1242| mu1242_2(unknown) = AliasedDefinition : +# 1242| mu1242_3(unknown) = InitializeNonLocal : +# 1242| r1242_4(glval) = VariableAddress[dynamic] : +# 1242| mu1242_5(char *) = InitializeParameter[dynamic] : &:r1242_4 +# 1242| r1242_6(char *) = Load[dynamic] : &:r1242_4, ~m? +# 1242| mu1242_7(unknown) = InitializeIndirection[dynamic] : &:r1242_6 +# 1243| r1243_1(glval) = VariableAddress[a#init] : +# 1243| r1243_2(bool) = Load[a#init] : &:r1243_1, ~m? +# 1243| v1243_3(void) = ConditionalBranch : r1243_2 +#-----| False -> Block 1 +#-----| True -> Block 2 + +# 1243| Block 1 +# 1243| r1243_4(glval) = VariableAddress[a] : +#-----| r0_1(glval) = FunctionAddress[String] : +#-----| v0_2(void) = Call[String] : func:r0_1, this:r1243_4 +#-----| mu0_3(unknown) = ^CallSideEffect : ~m? +#-----| mu0_4(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 +# 1243| r1243_5(bool) = Constant[1] : +# 1243| mu1243_6(bool) = Store[a#init] : &:r1243_1, r1243_5 +#-----| Goto -> Block 2 + +# 1244| Block 2 +# 1244| r1244_1(glval) = VariableAddress[b#init] : +# 1244| r1244_2(bool) = Load[b#init] : &:r1244_1, ~m? +# 1244| v1244_3(void) = ConditionalBranch : r1244_2 #-----| False -> Block 3 #-----| True -> Block 4 -# 1242| Block 3 -# 1242| r1242_4(glval) = VariableAddress[b] : -# 1242| r1242_5(glval) = FunctionAddress[String] : -# 1242| r1242_6(glval) = StringConstant["static"] : -# 1242| r1242_7(char *) = Convert : r1242_6 -# 1242| v1242_8(void) = Call[String] : func:r1242_5, this:r1242_4, 0:r1242_7 -# 1242| mu1242_9(unknown) = ^CallSideEffect : ~m? -# 1242| v1242_10(void) = ^BufferReadSideEffect[0] : &:r1242_7, ~m? -# 1242| mu1242_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1242_4 -# 1242| r1242_12(bool) = Constant[1] : -# 1242| mu1242_13(bool) = Store[b#init] : &:r1242_1, r1242_12 +# 1244| Block 3 +# 1244| r1244_4(glval) = VariableAddress[b] : +# 1244| r1244_5(glval) = FunctionAddress[String] : +# 1244| r1244_6(glval) = StringConstant["static"] : +# 1244| r1244_7(char *) = Convert : r1244_6 +# 1244| v1244_8(void) = Call[String] : func:r1244_5, this:r1244_4, 0:r1244_7 +# 1244| mu1244_9(unknown) = ^CallSideEffect : ~m? +# 1244| v1244_10(void) = ^BufferReadSideEffect[0] : &:r1244_7, ~m? +# 1244| mu1244_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1244_4 +# 1244| r1244_12(bool) = Constant[1] : +# 1244| mu1244_13(bool) = Store[b#init] : &:r1244_1, r1244_12 #-----| Goto -> Block 4 -# 1243| Block 4 -# 1243| r1243_1(glval) = VariableAddress[c#init] : -# 1243| r1243_2(bool) = Load[c#init] : &:r1243_1, ~m? -# 1243| v1243_3(void) = ConditionalBranch : r1243_2 +# 1245| Block 4 +# 1245| r1245_1(glval) = VariableAddress[c#init] : +# 1245| r1245_2(bool) = Load[c#init] : &:r1245_1, ~m? +# 1245| v1245_3(void) = ConditionalBranch : r1245_2 #-----| False -> Block 5 #-----| True -> Block 6 -# 1243| Block 5 -# 1243| r1243_4(glval) = VariableAddress[c] : -# 1243| r1243_5(glval) = FunctionAddress[String] : -# 1243| r1243_6(glval) = VariableAddress[dynamic] : -# 1243| r1243_7(char *) = Load[dynamic] : &:r1243_6, ~m? -# 1243| v1243_8(void) = Call[String] : func:r1243_5, this:r1243_4, 0:r1243_7 -# 1243| mu1243_9(unknown) = ^CallSideEffect : ~m? -# 1243| v1243_10(void) = ^BufferReadSideEffect[0] : &:r1243_7, ~m? -# 1243| mu1243_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1243_4 -# 1243| r1243_12(bool) = Constant[1] : -# 1243| mu1243_13(bool) = Store[c#init] : &:r1243_1, r1243_12 +# 1245| Block 5 +# 1245| r1245_4(glval) = VariableAddress[c] : +# 1245| r1245_5(glval) = FunctionAddress[String] : +# 1245| r1245_6(glval) = VariableAddress[dynamic] : +# 1245| r1245_7(char *) = Load[dynamic] : &:r1245_6, ~m? +# 1245| v1245_8(void) = Call[String] : func:r1245_5, this:r1245_4, 0:r1245_7 +# 1245| mu1245_9(unknown) = ^CallSideEffect : ~m? +# 1245| v1245_10(void) = ^BufferReadSideEffect[0] : &:r1245_7, ~m? +# 1245| mu1245_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1245_4 +# 1245| r1245_12(bool) = Constant[1] : +# 1245| mu1245_13(bool) = Store[c#init] : &:r1245_1, r1245_12 #-----| Goto -> Block 6 -# 1244| Block 6 -# 1244| v1244_1(void) = NoOp : -# 1240| v1240_8(void) = ReturnIndirection[dynamic] : &:r1240_6, ~m? -# 1240| v1240_9(void) = ReturnVoid : -# 1240| v1240_10(void) = AliasedUse : ~m? -# 1240| v1240_11(void) = ExitFunction : +# 1246| Block 6 +# 1246| v1246_1(void) = NoOp : +# 1242| v1242_8(void) = ReturnIndirection[dynamic] : &:r1242_6, ~m? +# 1242| v1242_9(void) = ReturnVoid : +# 1242| v1242_10(void) = AliasedUse : ~m? +# 1242| v1242_11(void) = ExitFunction : -# 1251| void test_strings(char*, char*) -# 1251| Block 0 -# 1251| v1251_1(void) = EnterFunction : -# 1251| mu1251_2(unknown) = AliasedDefinition : -# 1251| mu1251_3(unknown) = InitializeNonLocal : -# 1251| r1251_4(glval) = VariableAddress[s1] : -# 1251| mu1251_5(char *) = InitializeParameter[s1] : &:r1251_4 -# 1251| r1251_6(char *) = Load[s1] : &:r1251_4, ~m? -# 1251| mu1251_7(unknown) = InitializeIndirection[s1] : &:r1251_6 -# 1251| r1251_8(glval) = VariableAddress[s2] : -# 1251| mu1251_9(char *) = InitializeParameter[s2] : &:r1251_8 -# 1251| r1251_10(char *) = Load[s2] : &:r1251_8, ~m? -# 1251| mu1251_11(unknown) = InitializeIndirection[s2] : &:r1251_10 -# 1252| r1252_1(glval) = VariableAddress[buffer] : -# 1252| mu1252_2(char[1024]) = Uninitialized[buffer] : &:r1252_1 -# 1252| r1252_3(int) = Constant[0] : -# 1252| r1252_4(glval) = PointerAdd[1] : r1252_1, r1252_3 -# 1252| r1252_5(char) = Constant[0] : -# 1252| mu1252_6(char) = Store[?] : &:r1252_4, r1252_5 -# 1252| r1252_7(int) = Constant[1] : -# 1252| r1252_8(glval) = PointerAdd[1] : r1252_1, r1252_7 -# 1252| r1252_9(unknown[1023]) = Constant[0] : -# 1252| mu1252_10(unknown[1023]) = Store[?] : &:r1252_8, r1252_9 -# 1254| r1254_1(glval) = FunctionAddress[strcpy] : -# 1254| r1254_2(glval) = VariableAddress[buffer] : -# 1254| r1254_3(char *) = Convert : r1254_2 -# 1254| r1254_4(glval) = VariableAddress[s1] : -# 1254| r1254_5(char *) = Load[s1] : &:r1254_4, ~m? -# 1254| r1254_6(char *) = Convert : r1254_5 -# 1254| r1254_7(char *) = Call[strcpy] : func:r1254_1, 0:r1254_3, 1:r1254_6 -# 1254| v1254_8(void) = ^BufferReadSideEffect[1] : &:r1254_6, ~m? -# 1254| mu1254_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1254_3 -# 1255| r1255_1(glval) = FunctionAddress[strcat] : -# 1255| r1255_2(glval) = VariableAddress[buffer] : -# 1255| r1255_3(char *) = Convert : r1255_2 -# 1255| r1255_4(glval) = VariableAddress[s2] : -# 1255| r1255_5(char *) = Load[s2] : &:r1255_4, ~m? -# 1255| r1255_6(char *) = Convert : r1255_5 -# 1255| r1255_7(char *) = Call[strcat] : func:r1255_1, 0:r1255_3, 1:r1255_6 -# 1255| v1255_8(void) = ^BufferReadSideEffect[0] : &:r1255_3, ~m? -# 1255| v1255_9(void) = ^BufferReadSideEffect[1] : &:r1255_6, ~m? -# 1255| mu1255_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1255_3 -# 1256| v1256_1(void) = NoOp : -# 1251| v1251_12(void) = ReturnIndirection[s1] : &:r1251_6, ~m? -# 1251| v1251_13(void) = ReturnIndirection[s2] : &:r1251_10, ~m? -# 1251| v1251_14(void) = ReturnVoid : -# 1251| v1251_15(void) = AliasedUse : ~m? -# 1251| v1251_16(void) = ExitFunction : +# 1253| void test_strings(char*, char*) +# 1253| Block 0 +# 1253| v1253_1(void) = EnterFunction : +# 1253| mu1253_2(unknown) = AliasedDefinition : +# 1253| mu1253_3(unknown) = InitializeNonLocal : +# 1253| r1253_4(glval) = VariableAddress[s1] : +# 1253| mu1253_5(char *) = InitializeParameter[s1] : &:r1253_4 +# 1253| r1253_6(char *) = Load[s1] : &:r1253_4, ~m? +# 1253| mu1253_7(unknown) = InitializeIndirection[s1] : &:r1253_6 +# 1253| r1253_8(glval) = VariableAddress[s2] : +# 1253| mu1253_9(char *) = InitializeParameter[s2] : &:r1253_8 +# 1253| r1253_10(char *) = Load[s2] : &:r1253_8, ~m? +# 1253| mu1253_11(unknown) = InitializeIndirection[s2] : &:r1253_10 +# 1254| r1254_1(glval) = VariableAddress[buffer] : +# 1254| mu1254_2(char[1024]) = Uninitialized[buffer] : &:r1254_1 +# 1254| r1254_3(int) = Constant[0] : +# 1254| r1254_4(glval) = PointerAdd[1] : r1254_1, r1254_3 +# 1254| r1254_5(char) = Constant[0] : +# 1254| mu1254_6(char) = Store[?] : &:r1254_4, r1254_5 +# 1254| r1254_7(int) = Constant[1] : +# 1254| r1254_8(glval) = PointerAdd[1] : r1254_1, r1254_7 +# 1254| r1254_9(unknown[1023]) = Constant[0] : +# 1254| mu1254_10(unknown[1023]) = Store[?] : &:r1254_8, r1254_9 +# 1256| r1256_1(glval) = FunctionAddress[strcpy] : +# 1256| r1256_2(glval) = VariableAddress[buffer] : +# 1256| r1256_3(char *) = Convert : r1256_2 +# 1256| r1256_4(glval) = VariableAddress[s1] : +# 1256| r1256_5(char *) = Load[s1] : &:r1256_4, ~m? +# 1256| r1256_6(char *) = Convert : r1256_5 +# 1256| r1256_7(char *) = Call[strcpy] : func:r1256_1, 0:r1256_3, 1:r1256_6 +# 1256| v1256_8(void) = ^BufferReadSideEffect[1] : &:r1256_6, ~m? +# 1256| mu1256_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1256_3 +# 1257| r1257_1(glval) = FunctionAddress[strcat] : +# 1257| r1257_2(glval) = VariableAddress[buffer] : +# 1257| r1257_3(char *) = Convert : r1257_2 +# 1257| r1257_4(glval) = VariableAddress[s2] : +# 1257| r1257_5(char *) = Load[s2] : &:r1257_4, ~m? +# 1257| r1257_6(char *) = Convert : r1257_5 +# 1257| r1257_7(char *) = Call[strcat] : func:r1257_1, 0:r1257_3, 1:r1257_6 +# 1257| v1257_8(void) = ^BufferReadSideEffect[0] : &:r1257_3, ~m? +# 1257| v1257_9(void) = ^BufferReadSideEffect[1] : &:r1257_6, ~m? +# 1257| mu1257_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1257_3 +# 1258| v1258_1(void) = NoOp : +# 1253| v1253_12(void) = ReturnIndirection[s1] : &:r1253_6, ~m? +# 1253| v1253_13(void) = ReturnIndirection[s2] : &:r1253_10, ~m? +# 1253| v1253_14(void) = ReturnVoid : +# 1253| v1253_15(void) = AliasedUse : ~m? +# 1253| v1253_16(void) = ExitFunction : -# 1261| void A::static_member(A*, int) -# 1261| Block 0 -# 1261| v1261_1(void) = EnterFunction : -# 1261| mu1261_2(unknown) = AliasedDefinition : -# 1261| mu1261_3(unknown) = InitializeNonLocal : -# 1261| r1261_4(glval) = VariableAddress[a] : -# 1261| mu1261_5(A *) = InitializeParameter[a] : &:r1261_4 -# 1261| r1261_6(A *) = Load[a] : &:r1261_4, ~m? -# 1261| mu1261_7(unknown) = InitializeIndirection[a] : &:r1261_6 -# 1261| r1261_8(glval) = VariableAddress[x] : -# 1261| mu1261_9(int) = InitializeParameter[x] : &:r1261_8 -# 1262| r1262_1(glval) = VariableAddress[x] : -# 1262| r1262_2(int) = Load[x] : &:r1262_1, ~m? -# 1262| r1262_3(glval) = VariableAddress[a] : -# 1262| r1262_4(A *) = Load[a] : &:r1262_3, ~m? -# 1262| r1262_5(glval) = FieldAddress[member] : r1262_4 -# 1262| mu1262_6(int) = Store[?] : &:r1262_5, r1262_2 -# 1263| v1263_1(void) = NoOp : -# 1261| v1261_10(void) = ReturnIndirection[a] : &:r1261_6, ~m? -# 1261| v1261_11(void) = ReturnVoid : -# 1261| v1261_12(void) = AliasedUse : ~m? -# 1261| v1261_13(void) = ExitFunction : +# 1263| void A::static_member(A*, int) +# 1263| Block 0 +# 1263| v1263_1(void) = EnterFunction : +# 1263| mu1263_2(unknown) = AliasedDefinition : +# 1263| mu1263_3(unknown) = InitializeNonLocal : +# 1263| r1263_4(glval) = VariableAddress[a] : +# 1263| mu1263_5(A *) = InitializeParameter[a] : &:r1263_4 +# 1263| r1263_6(A *) = Load[a] : &:r1263_4, ~m? +# 1263| mu1263_7(unknown) = InitializeIndirection[a] : &:r1263_6 +# 1263| r1263_8(glval) = VariableAddress[x] : +# 1263| mu1263_9(int) = InitializeParameter[x] : &:r1263_8 +# 1264| r1264_1(glval) = VariableAddress[x] : +# 1264| r1264_2(int) = Load[x] : &:r1264_1, ~m? +# 1264| r1264_3(glval) = VariableAddress[a] : +# 1264| r1264_4(A *) = Load[a] : &:r1264_3, ~m? +# 1264| r1264_5(glval) = FieldAddress[member] : r1264_4 +# 1264| mu1264_6(int) = Store[?] : &:r1264_5, r1264_2 +# 1265| v1265_1(void) = NoOp : +# 1263| v1263_10(void) = ReturnIndirection[a] : &:r1263_6, ~m? +# 1263| v1263_11(void) = ReturnVoid : +# 1263| v1263_12(void) = AliasedUse : ~m? +# 1263| v1263_13(void) = ExitFunction : -# 1270| void test_static_member_functions(int, A*) -# 1270| Block 0 -# 1270| v1270_1(void) = EnterFunction : -# 1270| mu1270_2(unknown) = AliasedDefinition : -# 1270| mu1270_3(unknown) = InitializeNonLocal : -# 1270| r1270_4(glval) = VariableAddress[int_arg] : -# 1270| mu1270_5(int) = InitializeParameter[int_arg] : &:r1270_4 -# 1270| r1270_6(glval) = VariableAddress[a_arg] : -# 1270| mu1270_7(A *) = InitializeParameter[a_arg] : &:r1270_6 -# 1270| r1270_8(A *) = Load[a_arg] : &:r1270_6, ~m? -# 1270| mu1270_9(unknown) = InitializeIndirection[a_arg] : &:r1270_8 -# 1271| r1271_1(glval) = VariableAddress[c] : -# 1271| mu1271_2(C) = Uninitialized[c] : &:r1271_1 -# 1271| r1271_3(glval) = FunctionAddress[C] : -# 1271| v1271_4(void) = Call[C] : func:r1271_3, this:r1271_1 -# 1271| mu1271_5(unknown) = ^CallSideEffect : ~m? -# 1271| mu1271_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1271_1 -# 1272| r1272_1(glval) = VariableAddress[c] : -# 1272| r1272_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1272| r1272_3(int) = Constant[10] : -# 1272| r1272_4(int) = Call[StaticMemberFunction] : func:r1272_2, 0:r1272_3 -# 1272| mu1272_5(unknown) = ^CallSideEffect : ~m? -# 1273| r1273_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1273| r1273_2(int) = Constant[10] : -# 1273| r1273_3(int) = Call[StaticMemberFunction] : func:r1273_1, 0:r1273_2 -# 1273| mu1273_4(unknown) = ^CallSideEffect : ~m? -# 1275| r1275_1(glval) = VariableAddress[a] : -# 1275| mu1275_2(A) = Uninitialized[a] : &:r1275_1 -# 1276| r1276_1(glval) = VariableAddress[a] : -# 1276| r1276_2(glval) = FunctionAddress[static_member] : -# 1276| r1276_3(glval) = VariableAddress[a] : -# 1276| r1276_4(A *) = CopyValue : r1276_3 -# 1276| r1276_5(glval) = VariableAddress[int_arg] : -# 1276| r1276_6(int) = Load[int_arg] : &:r1276_5, ~m? -# 1276| v1276_7(void) = Call[static_member] : func:r1276_2, 0:r1276_4, 1:r1276_6 -# 1276| mu1276_8(unknown) = ^CallSideEffect : ~m? -# 1276| v1276_9(void) = ^BufferReadSideEffect[0] : &:r1276_4, ~m? -# 1276| mu1276_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1276_4 -# 1277| r1277_1(glval) = FunctionAddress[static_member] : -# 1277| r1277_2(glval) = VariableAddress[a] : -# 1277| r1277_3(A *) = CopyValue : r1277_2 -# 1277| r1277_4(glval) = VariableAddress[int_arg] : -# 1277| r1277_5(int) = Load[int_arg] : &:r1277_4, ~m? -# 1277| v1277_6(void) = Call[static_member] : func:r1277_1, 0:r1277_3, 1:r1277_5 -# 1277| mu1277_7(unknown) = ^CallSideEffect : ~m? -# 1277| v1277_8(void) = ^BufferReadSideEffect[0] : &:r1277_3, ~m? -# 1277| mu1277_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1277_3 -# 1279| r1279_1(glval) = VariableAddress[a] : -# 1279| r1279_2(A *) = CopyValue : r1279_1 -# 1279| r1279_3(glval) = FunctionAddress[static_member] : -# 1279| r1279_4(glval) = VariableAddress[a_arg] : -# 1279| r1279_5(A *) = Load[a_arg] : &:r1279_4, ~m? -# 1279| r1279_6(glval) = VariableAddress[int_arg] : -# 1279| r1279_7(int) = Load[int_arg] : &:r1279_6, ~m? -# 1279| r1279_8(int) = Constant[2] : -# 1279| r1279_9(int) = Add : r1279_7, r1279_8 -# 1279| v1279_10(void) = Call[static_member] : func:r1279_3, 0:r1279_5, 1:r1279_9 -# 1279| mu1279_11(unknown) = ^CallSideEffect : ~m? -# 1279| v1279_12(void) = ^BufferReadSideEffect[0] : &:r1279_5, ~m? -# 1279| mu1279_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_5 -# 1280| r1280_1(glval) = VariableAddress[a_arg] : -# 1280| r1280_2(A *) = Load[a_arg] : &:r1280_1, ~m? -# 1280| r1280_3(glval) = CopyValue : r1280_2 -# 1280| r1280_4(glval) = FunctionAddress[static_member] : -# 1280| r1280_5(glval) = VariableAddress[a] : -# 1280| r1280_6(A *) = CopyValue : r1280_5 -# 1280| r1280_7(int) = Constant[99] : -# 1280| v1280_8(void) = Call[static_member] : func:r1280_4, 0:r1280_6, 1:r1280_7 -# 1280| mu1280_9(unknown) = ^CallSideEffect : ~m? -# 1280| v1280_10(void) = ^BufferReadSideEffect[0] : &:r1280_6, ~m? -# 1280| mu1280_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1280_6 -# 1281| r1281_1(glval) = VariableAddress[a_arg] : -# 1281| r1281_2(A *) = Load[a_arg] : &:r1281_1, ~m? +# 1272| void test_static_member_functions(int, A*) +# 1272| Block 0 +# 1272| v1272_1(void) = EnterFunction : +# 1272| mu1272_2(unknown) = AliasedDefinition : +# 1272| mu1272_3(unknown) = InitializeNonLocal : +# 1272| r1272_4(glval) = VariableAddress[int_arg] : +# 1272| mu1272_5(int) = InitializeParameter[int_arg] : &:r1272_4 +# 1272| r1272_6(glval) = VariableAddress[a_arg] : +# 1272| mu1272_7(A *) = InitializeParameter[a_arg] : &:r1272_6 +# 1272| r1272_8(A *) = Load[a_arg] : &:r1272_6, ~m? +# 1272| mu1272_9(unknown) = InitializeIndirection[a_arg] : &:r1272_8 +# 1273| r1273_1(glval) = VariableAddress[c] : +# 1273| mu1273_2(C) = Uninitialized[c] : &:r1273_1 +# 1273| r1273_3(glval) = FunctionAddress[C] : +# 1273| v1273_4(void) = Call[C] : func:r1273_3, this:r1273_1 +# 1273| mu1273_5(unknown) = ^CallSideEffect : ~m? +# 1273| mu1273_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1273_1 +# 1274| r1274_1(glval) = VariableAddress[c] : +# 1274| r1274_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1274| r1274_3(int) = Constant[10] : +# 1274| r1274_4(int) = Call[StaticMemberFunction] : func:r1274_2, 0:r1274_3 +# 1274| mu1274_5(unknown) = ^CallSideEffect : ~m? +# 1275| r1275_1(glval) = FunctionAddress[StaticMemberFunction] : +# 1275| r1275_2(int) = Constant[10] : +# 1275| r1275_3(int) = Call[StaticMemberFunction] : func:r1275_1, 0:r1275_2 +# 1275| mu1275_4(unknown) = ^CallSideEffect : ~m? +# 1277| r1277_1(glval) = VariableAddress[a] : +# 1277| mu1277_2(A) = Uninitialized[a] : &:r1277_1 +# 1278| r1278_1(glval) = VariableAddress[a] : +# 1278| r1278_2(glval) = FunctionAddress[static_member] : +# 1278| r1278_3(glval) = VariableAddress[a] : +# 1278| r1278_4(A *) = CopyValue : r1278_3 +# 1278| r1278_5(glval) = VariableAddress[int_arg] : +# 1278| r1278_6(int) = Load[int_arg] : &:r1278_5, ~m? +# 1278| v1278_7(void) = Call[static_member] : func:r1278_2, 0:r1278_4, 1:r1278_6 +# 1278| mu1278_8(unknown) = ^CallSideEffect : ~m? +# 1278| v1278_9(void) = ^BufferReadSideEffect[0] : &:r1278_4, ~m? +# 1278| mu1278_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1278_4 +# 1279| r1279_1(glval) = FunctionAddress[static_member] : +# 1279| r1279_2(glval) = VariableAddress[a] : +# 1279| r1279_3(A *) = CopyValue : r1279_2 +# 1279| r1279_4(glval) = VariableAddress[int_arg] : +# 1279| r1279_5(int) = Load[int_arg] : &:r1279_4, ~m? +# 1279| v1279_6(void) = Call[static_member] : func:r1279_1, 0:r1279_3, 1:r1279_5 +# 1279| mu1279_7(unknown) = ^CallSideEffect : ~m? +# 1279| v1279_8(void) = ^BufferReadSideEffect[0] : &:r1279_3, ~m? +# 1279| mu1279_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1279_3 +# 1281| r1281_1(glval) = VariableAddress[a] : +# 1281| r1281_2(A *) = CopyValue : r1281_1 # 1281| r1281_3(glval) = FunctionAddress[static_member] : # 1281| r1281_4(glval) = VariableAddress[a_arg] : # 1281| r1281_5(A *) = Load[a_arg] : &:r1281_4, ~m? -# 1281| r1281_6(int) = Constant[-1] : -# 1281| v1281_7(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_6 -# 1281| mu1281_8(unknown) = ^CallSideEffect : ~m? -# 1281| v1281_9(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m? -# 1281| mu1281_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 -# 1283| r1283_1(glval) = VariableAddress[a] : -# 1283| r1283_2(glval) = FunctionAddress[static_member_without_def] : -# 1283| v1283_3(void) = Call[static_member_without_def] : func:r1283_2 -# 1283| mu1283_4(unknown) = ^CallSideEffect : ~m? -# 1284| r1284_1(glval) = FunctionAddress[static_member_without_def] : -# 1284| v1284_2(void) = Call[static_member_without_def] : func:r1284_1 -# 1284| mu1284_3(unknown) = ^CallSideEffect : ~m? -# 1286| r1286_1(glval) = FunctionAddress[getAnInstanceOfA] : -# 1286| r1286_2(A *) = Call[getAnInstanceOfA] : func:r1286_1 +# 1281| r1281_6(glval) = VariableAddress[int_arg] : +# 1281| r1281_7(int) = Load[int_arg] : &:r1281_6, ~m? +# 1281| r1281_8(int) = Constant[2] : +# 1281| r1281_9(int) = Add : r1281_7, r1281_8 +# 1281| v1281_10(void) = Call[static_member] : func:r1281_3, 0:r1281_5, 1:r1281_9 +# 1281| mu1281_11(unknown) = ^CallSideEffect : ~m? +# 1281| v1281_12(void) = ^BufferReadSideEffect[0] : &:r1281_5, ~m? +# 1281| mu1281_13(unknown) = ^BufferMayWriteSideEffect[0] : &:r1281_5 +# 1282| r1282_1(glval) = VariableAddress[a_arg] : +# 1282| r1282_2(A *) = Load[a_arg] : &:r1282_1, ~m? +# 1282| r1282_3(glval) = CopyValue : r1282_2 +# 1282| r1282_4(glval) = FunctionAddress[static_member] : +# 1282| r1282_5(glval) = VariableAddress[a] : +# 1282| r1282_6(A *) = CopyValue : r1282_5 +# 1282| r1282_7(int) = Constant[99] : +# 1282| v1282_8(void) = Call[static_member] : func:r1282_4, 0:r1282_6, 1:r1282_7 +# 1282| mu1282_9(unknown) = ^CallSideEffect : ~m? +# 1282| v1282_10(void) = ^BufferReadSideEffect[0] : &:r1282_6, ~m? +# 1282| mu1282_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1282_6 +# 1283| r1283_1(glval) = VariableAddress[a_arg] : +# 1283| r1283_2(A *) = Load[a_arg] : &:r1283_1, ~m? +# 1283| r1283_3(glval) = FunctionAddress[static_member] : +# 1283| r1283_4(glval) = VariableAddress[a_arg] : +# 1283| r1283_5(A *) = Load[a_arg] : &:r1283_4, ~m? +# 1283| r1283_6(int) = Constant[-1] : +# 1283| v1283_7(void) = Call[static_member] : func:r1283_3, 0:r1283_5, 1:r1283_6 +# 1283| mu1283_8(unknown) = ^CallSideEffect : ~m? +# 1283| v1283_9(void) = ^BufferReadSideEffect[0] : &:r1283_5, ~m? +# 1283| mu1283_10(unknown) = ^BufferMayWriteSideEffect[0] : &:r1283_5 +# 1285| r1285_1(glval) = VariableAddress[a] : +# 1285| r1285_2(glval) = FunctionAddress[static_member_without_def] : +# 1285| v1285_3(void) = Call[static_member_without_def] : func:r1285_2 +# 1285| mu1285_4(unknown) = ^CallSideEffect : ~m? +# 1286| r1286_1(glval) = FunctionAddress[static_member_without_def] : +# 1286| v1286_2(void) = Call[static_member_without_def] : func:r1286_1 # 1286| mu1286_3(unknown) = ^CallSideEffect : ~m? -# 1286| r1286_4(glval) = FunctionAddress[static_member_without_def] : -# 1286| v1286_5(void) = Call[static_member_without_def] : func:r1286_4 -# 1286| mu1286_6(unknown) = ^CallSideEffect : ~m? -# 1287| v1287_1(void) = NoOp : -# 1270| v1270_10(void) = ReturnIndirection[a_arg] : &:r1270_8, ~m? -# 1270| v1270_11(void) = ReturnVoid : -# 1270| v1270_12(void) = AliasedUse : ~m? -# 1270| v1270_13(void) = ExitFunction : +# 1288| r1288_1(glval) = FunctionAddress[getAnInstanceOfA] : +# 1288| r1288_2(A *) = Call[getAnInstanceOfA] : func:r1288_1 +# 1288| mu1288_3(unknown) = ^CallSideEffect : ~m? +# 1288| r1288_4(glval) = FunctionAddress[static_member_without_def] : +# 1288| v1288_5(void) = Call[static_member_without_def] : func:r1288_4 +# 1288| mu1288_6(unknown) = ^CallSideEffect : ~m? +# 1289| v1289_1(void) = NoOp : +# 1272| v1272_10(void) = ReturnIndirection[a_arg] : &:r1272_8, ~m? +# 1272| v1272_11(void) = ReturnVoid : +# 1272| v1272_12(void) = AliasedUse : ~m? +# 1272| v1272_13(void) = ExitFunction : -# 1289| int missingReturnValue(bool, int) -# 1289| Block 0 -# 1289| v1289_1(void) = EnterFunction : -# 1289| mu1289_2(unknown) = AliasedDefinition : -# 1289| mu1289_3(unknown) = InitializeNonLocal : -# 1289| r1289_4(glval) = VariableAddress[b] : -# 1289| mu1289_5(bool) = InitializeParameter[b] : &:r1289_4 -# 1289| r1289_6(glval) = VariableAddress[x] : -# 1289| mu1289_7(int) = InitializeParameter[x] : &:r1289_6 -# 1290| r1290_1(glval) = VariableAddress[b] : -# 1290| r1290_2(bool) = Load[b] : &:r1290_1, ~m? -# 1290| v1290_3(void) = ConditionalBranch : r1290_2 +# 1291| int missingReturnValue(bool, int) +# 1291| Block 0 +# 1291| v1291_1(void) = EnterFunction : +# 1291| mu1291_2(unknown) = AliasedDefinition : +# 1291| mu1291_3(unknown) = InitializeNonLocal : +# 1291| r1291_4(glval) = VariableAddress[b] : +# 1291| mu1291_5(bool) = InitializeParameter[b] : &:r1291_4 +# 1291| r1291_6(glval) = VariableAddress[x] : +# 1291| mu1291_7(int) = InitializeParameter[x] : &:r1291_6 +# 1292| r1292_1(glval) = VariableAddress[b] : +# 1292| r1292_2(bool) = Load[b] : &:r1292_1, ~m? +# 1292| v1292_3(void) = ConditionalBranch : r1292_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1289| Block 1 -# 1289| r1289_8(glval) = VariableAddress[#return] : -# 1289| v1289_9(void) = ReturnValue : &:r1289_8, ~m? -# 1289| v1289_10(void) = AliasedUse : ~m? -# 1289| v1289_11(void) = ExitFunction : +# 1291| Block 1 +# 1291| r1291_8(glval) = VariableAddress[#return] : +# 1291| v1291_9(void) = ReturnValue : &:r1291_8, ~m? +# 1291| v1291_10(void) = AliasedUse : ~m? +# 1291| v1291_11(void) = ExitFunction : -# 1291| Block 2 -# 1291| r1291_1(glval) = VariableAddress[#return] : -# 1291| r1291_2(glval) = VariableAddress[x] : -# 1291| r1291_3(int) = Load[x] : &:r1291_2, ~m? -# 1291| mu1291_4(int) = Store[#return] : &:r1291_1, r1291_3 -#-----| Goto -> Block 1 - -# 1293| Block 3 +# 1293| Block 2 # 1293| r1293_1(glval) = VariableAddress[#return] : -# 1293| mu1293_2(int) = Uninitialized[#return] : &:r1293_1 +# 1293| r1293_2(glval) = VariableAddress[x] : +# 1293| r1293_3(int) = Load[x] : &:r1293_2, ~m? +# 1293| mu1293_4(int) = Store[#return] : &:r1293_1, r1293_3 #-----| Goto -> Block 1 -# 1295| void returnVoid(int, int) -# 1295| Block 0 -# 1295| v1295_1(void) = EnterFunction : -# 1295| mu1295_2(unknown) = AliasedDefinition : -# 1295| mu1295_3(unknown) = InitializeNonLocal : -# 1295| r1295_4(glval) = VariableAddress[x] : -# 1295| mu1295_5(int) = InitializeParameter[x] : &:r1295_4 -# 1295| r1295_6(glval) = VariableAddress[y] : -# 1295| mu1295_7(int) = InitializeParameter[y] : &:r1295_6 -# 1296| r1296_1(glval) = FunctionAddress[IntegerOps] : -# 1296| r1296_2(glval) = VariableAddress[x] : -# 1296| r1296_3(int) = Load[x] : &:r1296_2, ~m? -# 1296| r1296_4(glval) = VariableAddress[y] : -# 1296| r1296_5(int) = Load[y] : &:r1296_4, ~m? -# 1296| v1296_6(void) = Call[IntegerOps] : func:r1296_1, 0:r1296_3, 1:r1296_5 -# 1296| mu1296_7(unknown) = ^CallSideEffect : ~m? -# 1296| v1296_8(void) = NoOp : -# 1295| v1295_8(void) = ReturnVoid : -# 1295| v1295_9(void) = AliasedUse : ~m? -# 1295| v1295_10(void) = ExitFunction : +# 1295| Block 3 +# 1295| r1295_1(glval) = VariableAddress[#return] : +# 1295| mu1295_2(int) = Uninitialized[#return] : &:r1295_1 +#-----| Goto -> Block 1 -# 1299| void gccBinaryConditional(bool, int, long) -# 1299| Block 0 -# 1299| v1299_1(void) = EnterFunction : -# 1299| mu1299_2(unknown) = AliasedDefinition : -# 1299| mu1299_3(unknown) = InitializeNonLocal : -# 1299| r1299_4(glval) = VariableAddress[b] : -# 1299| mu1299_5(bool) = InitializeParameter[b] : &:r1299_4 -# 1299| r1299_6(glval) = VariableAddress[x] : -# 1299| mu1299_7(int) = InitializeParameter[x] : &:r1299_6 -# 1299| r1299_8(glval) = VariableAddress[y] : -# 1299| mu1299_9(long) = InitializeParameter[y] : &:r1299_8 -# 1300| r1300_1(glval) = VariableAddress[z] : -# 1300| r1300_2(glval) = VariableAddress[x] : -# 1300| r1300_3(int) = Load[x] : &:r1300_2, ~m? -# 1300| mu1300_4(int) = Store[z] : &:r1300_1, r1300_3 -# 1301| r1301_1(glval) = VariableAddress[b] : -# 1301| r1301_2(bool) = Load[b] : &:r1301_1, ~m? -# 1301| v1301_3(void) = ConditionalBranch : r1301_2 +# 1297| void returnVoid(int, int) +# 1297| Block 0 +# 1297| v1297_1(void) = EnterFunction : +# 1297| mu1297_2(unknown) = AliasedDefinition : +# 1297| mu1297_3(unknown) = InitializeNonLocal : +# 1297| r1297_4(glval) = VariableAddress[x] : +# 1297| mu1297_5(int) = InitializeParameter[x] : &:r1297_4 +# 1297| r1297_6(glval) = VariableAddress[y] : +# 1297| mu1297_7(int) = InitializeParameter[y] : &:r1297_6 +# 1298| r1298_1(glval) = FunctionAddress[IntegerOps] : +# 1298| r1298_2(glval) = VariableAddress[x] : +# 1298| r1298_3(int) = Load[x] : &:r1298_2, ~m? +# 1298| r1298_4(glval) = VariableAddress[y] : +# 1298| r1298_5(int) = Load[y] : &:r1298_4, ~m? +# 1298| v1298_6(void) = Call[IntegerOps] : func:r1298_1, 0:r1298_3, 1:r1298_5 +# 1298| mu1298_7(unknown) = ^CallSideEffect : ~m? +# 1298| v1298_8(void) = NoOp : +# 1297| v1297_8(void) = ReturnVoid : +# 1297| v1297_9(void) = AliasedUse : ~m? +# 1297| v1297_10(void) = ExitFunction : + +# 1301| void gccBinaryConditional(bool, int, long) +# 1301| Block 0 +# 1301| v1301_1(void) = EnterFunction : +# 1301| mu1301_2(unknown) = AliasedDefinition : +# 1301| mu1301_3(unknown) = InitializeNonLocal : +# 1301| r1301_4(glval) = VariableAddress[b] : +# 1301| mu1301_5(bool) = InitializeParameter[b] : &:r1301_4 +# 1301| r1301_6(glval) = VariableAddress[x] : +# 1301| mu1301_7(int) = InitializeParameter[x] : &:r1301_6 +# 1301| r1301_8(glval) = VariableAddress[y] : +# 1301| mu1301_9(long) = InitializeParameter[y] : &:r1301_8 +# 1302| r1302_1(glval) = VariableAddress[z] : +# 1302| r1302_2(glval) = VariableAddress[x] : +# 1302| r1302_3(int) = Load[x] : &:r1302_2, ~m? +# 1302| mu1302_4(int) = Store[z] : &:r1302_1, r1302_3 +# 1303| r1303_1(glval) = VariableAddress[b] : +# 1303| r1303_2(bool) = Load[b] : &:r1303_1, ~m? +# 1303| v1303_3(void) = ConditionalBranch : r1303_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1301| Block 1 -# 1301| r1301_4(glval) = VariableAddress[#temp1301:9] : -# 1301| r1301_5(int) = Load[#temp1301:9] : &:r1301_4, ~m? -# 1301| r1301_6(glval) = VariableAddress[z] : -# 1301| mu1301_7(int) = Store[z] : &:r1301_6, r1301_5 -# 1302| r1302_1(glval) = VariableAddress[b] : -# 1302| r1302_2(bool) = Load[b] : &:r1302_1, ~m? -# 1302| v1302_3(void) = ConditionalBranch : r1302_2 +# 1303| Block 1 +# 1303| r1303_4(glval) = VariableAddress[#temp1303:9] : +# 1303| r1303_5(int) = Load[#temp1303:9] : &:r1303_4, ~m? +# 1303| r1303_6(glval) = VariableAddress[z] : +# 1303| mu1303_7(int) = Store[z] : &:r1303_6, r1303_5 +# 1304| r1304_1(glval) = VariableAddress[b] : +# 1304| r1304_2(bool) = Load[b] : &:r1304_1, ~m? +# 1304| v1304_3(void) = ConditionalBranch : r1304_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 1301| Block 2 -# 1301| r1301_8(glval) = VariableAddress[#temp1301:9] : -# 1301| mu1301_9(int) = Store[#temp1301:9] : &:r1301_8, r1301_2 +# 1303| Block 2 +# 1303| r1303_8(glval) = VariableAddress[#temp1303:9] : +# 1303| mu1303_9(int) = Store[#temp1303:9] : &:r1303_8, r1303_2 #-----| Goto -> Block 1 -# 1301| Block 3 -# 1301| r1301_10(glval) = VariableAddress[x] : -# 1301| r1301_11(int) = Load[x] : &:r1301_10, ~m? -# 1301| r1301_12(glval) = VariableAddress[#temp1301:9] : -# 1301| mu1301_13(int) = Store[#temp1301:9] : &:r1301_12, r1301_11 +# 1303| Block 3 +# 1303| r1303_10(glval) = VariableAddress[x] : +# 1303| r1303_11(int) = Load[x] : &:r1303_10, ~m? +# 1303| r1303_12(glval) = VariableAddress[#temp1303:9] : +# 1303| mu1303_13(int) = Store[#temp1303:9] : &:r1303_12, r1303_11 #-----| Goto -> Block 1 -# 1302| Block 4 -# 1302| r1302_4(glval) = VariableAddress[#temp1302:9] : -# 1302| r1302_5(long) = Load[#temp1302:9] : &:r1302_4, ~m? -# 1302| r1302_6(int) = Convert : r1302_5 -# 1302| r1302_7(glval) = VariableAddress[z] : -# 1302| mu1302_8(int) = Store[z] : &:r1302_7, r1302_6 -# 1303| r1303_1(glval) = VariableAddress[x] : -# 1303| r1303_2(int) = Load[x] : &:r1303_1, ~m? -# 1303| r1303_3(int) = Constant[0] : -# 1303| r1303_4(bool) = CompareNE : r1303_2, r1303_3 -# 1303| v1303_5(void) = ConditionalBranch : r1303_4 +# 1304| Block 4 +# 1304| r1304_4(glval) = VariableAddress[#temp1304:9] : +# 1304| r1304_5(long) = Load[#temp1304:9] : &:r1304_4, ~m? +# 1304| r1304_6(int) = Convert : r1304_5 +# 1304| r1304_7(glval) = VariableAddress[z] : +# 1304| mu1304_8(int) = Store[z] : &:r1304_7, r1304_6 +# 1305| r1305_1(glval) = VariableAddress[x] : +# 1305| r1305_2(int) = Load[x] : &:r1305_1, ~m? +# 1305| r1305_3(int) = Constant[0] : +# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 +# 1305| v1305_5(void) = ConditionalBranch : r1305_4 #-----| False -> Block 9 #-----| True -> Block 8 -# 1302| Block 5 -# 1302| r1302_9(glval) = VariableAddress[#temp1302:9] : -# 1302| mu1302_10(long) = Store[#temp1302:9] : &:r1302_9, r1302_2 +# 1304| Block 5 +# 1304| r1304_9(glval) = VariableAddress[#temp1304:9] : +# 1304| mu1304_10(long) = Store[#temp1304:9] : &:r1304_9, r1304_2 #-----| Goto -> Block 4 -# 1302| Block 6 -# 1302| r1302_11(glval) = VariableAddress[y] : -# 1302| r1302_12(long) = Load[y] : &:r1302_11, ~m? -# 1302| r1302_13(glval) = VariableAddress[#temp1302:9] : -# 1302| mu1302_14(long) = Store[#temp1302:9] : &:r1302_13, r1302_12 +# 1304| Block 6 +# 1304| r1304_11(glval) = VariableAddress[y] : +# 1304| r1304_12(long) = Load[y] : &:r1304_11, ~m? +# 1304| r1304_13(glval) = VariableAddress[#temp1304:9] : +# 1304| mu1304_14(long) = Store[#temp1304:9] : &:r1304_13, r1304_12 #-----| Goto -> Block 4 -# 1303| Block 7 -# 1303| r1303_6(glval) = VariableAddress[#temp1303:9] : -# 1303| r1303_7(int) = Load[#temp1303:9] : &:r1303_6, ~m? -# 1303| r1303_8(glval) = VariableAddress[z] : -# 1303| mu1303_9(int) = Store[z] : &:r1303_8, r1303_7 -# 1304| r1304_1(glval) = VariableAddress[x] : -# 1304| r1304_2(int) = Load[x] : &:r1304_1, ~m? -# 1304| r1304_3(int) = Constant[0] : -# 1304| r1304_4(bool) = CompareNE : r1304_2, r1304_3 -# 1304| v1304_5(void) = ConditionalBranch : r1304_4 +# 1305| Block 7 +# 1305| r1305_6(glval) = VariableAddress[#temp1305:9] : +# 1305| r1305_7(int) = Load[#temp1305:9] : &:r1305_6, ~m? +# 1305| r1305_8(glval) = VariableAddress[z] : +# 1305| mu1305_9(int) = Store[z] : &:r1305_8, r1305_7 +# 1306| r1306_1(glval) = VariableAddress[x] : +# 1306| r1306_2(int) = Load[x] : &:r1306_1, ~m? +# 1306| r1306_3(int) = Constant[0] : +# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 +# 1306| v1306_5(void) = ConditionalBranch : r1306_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 1303| Block 8 -# 1303| r1303_10(glval) = VariableAddress[#temp1303:9] : -# 1303| mu1303_11(int) = Store[#temp1303:9] : &:r1303_10, r1303_2 +# 1305| Block 8 +# 1305| r1305_10(glval) = VariableAddress[#temp1305:9] : +# 1305| mu1305_11(int) = Store[#temp1305:9] : &:r1305_10, r1305_2 #-----| Goto -> Block 7 -# 1303| Block 9 -# 1303| r1303_12(glval) = VariableAddress[x] : -# 1303| r1303_13(int) = Load[x] : &:r1303_12, ~m? -# 1303| r1303_14(glval) = VariableAddress[#temp1303:9] : -# 1303| mu1303_15(int) = Store[#temp1303:9] : &:r1303_14, r1303_13 +# 1305| Block 9 +# 1305| r1305_12(glval) = VariableAddress[x] : +# 1305| r1305_13(int) = Load[x] : &:r1305_12, ~m? +# 1305| r1305_14(glval) = VariableAddress[#temp1305:9] : +# 1305| mu1305_15(int) = Store[#temp1305:9] : &:r1305_14, r1305_13 #-----| Goto -> Block 7 -# 1304| Block 10 -# 1304| r1304_6(glval) = VariableAddress[#temp1304:9] : -# 1304| r1304_7(long) = Load[#temp1304:9] : &:r1304_6, ~m? -# 1304| r1304_8(int) = Convert : r1304_7 -# 1304| r1304_9(glval) = VariableAddress[z] : -# 1304| mu1304_10(int) = Store[z] : &:r1304_9, r1304_8 -# 1305| r1305_1(glval) = VariableAddress[y] : -# 1305| r1305_2(long) = Load[y] : &:r1305_1, ~m? -# 1305| r1305_3(long) = Constant[0] : -# 1305| r1305_4(bool) = CompareNE : r1305_2, r1305_3 -# 1305| v1305_5(void) = ConditionalBranch : r1305_4 -#-----| False -> Block 15 -#-----| True -> Block 14 - -# 1304| Block 11 -# 1304| r1304_11(glval) = VariableAddress[#temp1304:9] : -# 1304| mu1304_12(long) = Store[#temp1304:9] : &:r1304_11, r1304_2 -#-----| Goto -> Block 10 - -# 1304| Block 12 -# 1304| r1304_13(glval) = VariableAddress[y] : -# 1304| r1304_14(long) = Load[y] : &:r1304_13, ~m? -# 1304| r1304_15(glval) = VariableAddress[#temp1304:9] : -# 1304| mu1304_16(long) = Store[#temp1304:9] : &:r1304_15, r1304_14 -#-----| Goto -> Block 10 - -# 1305| Block 13 -# 1305| r1305_6(glval) = VariableAddress[#temp1305:9] : -# 1305| r1305_7(long) = Load[#temp1305:9] : &:r1305_6, ~m? -# 1305| r1305_8(int) = Convert : r1305_7 -# 1305| r1305_9(glval) = VariableAddress[z] : -# 1305| mu1305_10(int) = Store[z] : &:r1305_9, r1305_8 -# 1306| r1306_1(glval) = VariableAddress[y] : -# 1306| r1306_2(long) = Load[y] : &:r1306_1, ~m? -# 1306| r1306_3(long) = Constant[0] : -# 1306| r1306_4(bool) = CompareNE : r1306_2, r1306_3 -# 1306| v1306_5(void) = ConditionalBranch : r1306_4 -#-----| False -> Block 18 -#-----| True -> Block 17 - -# 1305| Block 14 -# 1305| r1305_11(glval) = VariableAddress[#temp1305:9] : -# 1305| mu1305_12(long) = Store[#temp1305:9] : &:r1305_11, r1305_2 -#-----| Goto -> Block 13 - -# 1305| Block 15 -# 1305| r1305_13(glval) = VariableAddress[x] : -# 1305| r1305_14(int) = Load[x] : &:r1305_13, ~m? -# 1305| r1305_15(long) = Convert : r1305_14 -# 1305| r1305_16(glval) = VariableAddress[#temp1305:9] : -# 1305| mu1305_17(long) = Store[#temp1305:9] : &:r1305_16, r1305_15 -#-----| Goto -> Block 13 - -# 1306| Block 16 +# 1306| Block 10 # 1306| r1306_6(glval) = VariableAddress[#temp1306:9] : # 1306| r1306_7(long) = Load[#temp1306:9] : &:r1306_6, ~m? # 1306| r1306_8(int) = Convert : r1306_7 # 1306| r1306_9(glval) = VariableAddress[z] : # 1306| mu1306_10(int) = Store[z] : &:r1306_9, r1306_8 -# 1308| r1308_1(glval) = VariableAddress[x] : -# 1308| r1308_2(int) = Load[x] : &:r1308_1, ~m? -# 1308| r1308_3(int) = Constant[0] : -# 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 -# 1308| v1308_5(void) = ConditionalBranch : r1308_4 -#-----| False -> Block 25 -#-----| True -> Block 24 +# 1307| r1307_1(glval) = VariableAddress[y] : +# 1307| r1307_2(long) = Load[y] : &:r1307_1, ~m? +# 1307| r1307_3(long) = Constant[0] : +# 1307| r1307_4(bool) = CompareNE : r1307_2, r1307_3 +# 1307| v1307_5(void) = ConditionalBranch : r1307_4 +#-----| False -> Block 15 +#-----| True -> Block 14 -# 1306| Block 17 +# 1306| Block 11 # 1306| r1306_11(glval) = VariableAddress[#temp1306:9] : # 1306| mu1306_12(long) = Store[#temp1306:9] : &:r1306_11, r1306_2 -#-----| Goto -> Block 16 +#-----| Goto -> Block 10 -# 1306| Block 18 +# 1306| Block 12 # 1306| r1306_13(glval) = VariableAddress[y] : # 1306| r1306_14(long) = Load[y] : &:r1306_13, ~m? # 1306| r1306_15(glval) = VariableAddress[#temp1306:9] : # 1306| mu1306_16(long) = Store[#temp1306:9] : &:r1306_15, r1306_14 +#-----| Goto -> Block 10 + +# 1307| Block 13 +# 1307| r1307_6(glval) = VariableAddress[#temp1307:9] : +# 1307| r1307_7(long) = Load[#temp1307:9] : &:r1307_6, ~m? +# 1307| r1307_8(int) = Convert : r1307_7 +# 1307| r1307_9(glval) = VariableAddress[z] : +# 1307| mu1307_10(int) = Store[z] : &:r1307_9, r1307_8 +# 1308| r1308_1(glval) = VariableAddress[y] : +# 1308| r1308_2(long) = Load[y] : &:r1308_1, ~m? +# 1308| r1308_3(long) = Constant[0] : +# 1308| r1308_4(bool) = CompareNE : r1308_2, r1308_3 +# 1308| v1308_5(void) = ConditionalBranch : r1308_4 +#-----| False -> Block 18 +#-----| True -> Block 17 + +# 1307| Block 14 +# 1307| r1307_11(glval) = VariableAddress[#temp1307:9] : +# 1307| mu1307_12(long) = Store[#temp1307:9] : &:r1307_11, r1307_2 +#-----| Goto -> Block 13 + +# 1307| Block 15 +# 1307| r1307_13(glval) = VariableAddress[x] : +# 1307| r1307_14(int) = Load[x] : &:r1307_13, ~m? +# 1307| r1307_15(long) = Convert : r1307_14 +# 1307| r1307_16(glval) = VariableAddress[#temp1307:9] : +# 1307| mu1307_17(long) = Store[#temp1307:9] : &:r1307_16, r1307_15 +#-----| Goto -> Block 13 + +# 1308| Block 16 +# 1308| r1308_6(glval) = VariableAddress[#temp1308:9] : +# 1308| r1308_7(long) = Load[#temp1308:9] : &:r1308_6, ~m? +# 1308| r1308_8(int) = Convert : r1308_7 +# 1308| r1308_9(glval) = VariableAddress[z] : +# 1308| mu1308_10(int) = Store[z] : &:r1308_9, r1308_8 +# 1310| r1310_1(glval) = VariableAddress[x] : +# 1310| r1310_2(int) = Load[x] : &:r1310_1, ~m? +# 1310| r1310_3(int) = Constant[0] : +# 1310| r1310_4(bool) = CompareNE : r1310_2, r1310_3 +# 1310| v1310_5(void) = ConditionalBranch : r1310_4 +#-----| False -> Block 25 +#-----| True -> Block 24 + +# 1308| Block 17 +# 1308| r1308_11(glval) = VariableAddress[#temp1308:9] : +# 1308| mu1308_12(long) = Store[#temp1308:9] : &:r1308_11, r1308_2 #-----| Goto -> Block 16 -# 1308| Block 19 -# 1308| r1308_6(glval) = VariableAddress[#temp1308:9] : -# 1308| r1308_7(int) = Load[#temp1308:9] : &:r1308_6, ~m? -# 1308| r1308_8(glval) = VariableAddress[z] : -# 1308| mu1308_9(int) = Store[z] : &:r1308_8, r1308_7 -# 1309| v1309_1(void) = NoOp : -# 1299| v1299_10(void) = ReturnVoid : -# 1299| v1299_11(void) = AliasedUse : ~m? -# 1299| v1299_12(void) = ExitFunction : +# 1308| Block 18 +# 1308| r1308_13(glval) = VariableAddress[y] : +# 1308| r1308_14(long) = Load[y] : &:r1308_13, ~m? +# 1308| r1308_15(glval) = VariableAddress[#temp1308:9] : +# 1308| mu1308_16(long) = Store[#temp1308:9] : &:r1308_15, r1308_14 +#-----| Goto -> Block 16 -# 1308| Block 20 -# 1308| r1308_10(glval) = VariableAddress[#temp1308:9] : -# 1308| mu1308_11(int) = Store[#temp1308:9] : &:r1308_10, r1308_16 +# 1310| Block 19 +# 1310| r1310_6(glval) = VariableAddress[#temp1310:9] : +# 1310| r1310_7(int) = Load[#temp1310:9] : &:r1310_6, ~m? +# 1310| r1310_8(glval) = VariableAddress[z] : +# 1310| mu1310_9(int) = Store[z] : &:r1310_8, r1310_7 +# 1311| v1311_1(void) = NoOp : +# 1301| v1301_10(void) = ReturnVoid : +# 1301| v1301_11(void) = AliasedUse : ~m? +# 1301| v1301_12(void) = ExitFunction : + +# 1310| Block 20 +# 1310| r1310_10(glval) = VariableAddress[#temp1310:9] : +# 1310| mu1310_11(int) = Store[#temp1310:9] : &:r1310_10, r1310_16 #-----| Goto -> Block 19 -# 1308| Block 21 -# 1308| r1308_12(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_13(bool) = Constant[0] : -# 1308| mu1308_14(bool) = Store[#temp1308:10] : &:r1308_12, r1308_13 +# 1310| Block 21 +# 1310| r1310_12(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_13(bool) = Constant[0] : +# 1310| mu1310_14(bool) = Store[#temp1310:10] : &:r1310_12, r1310_13 #-----| Goto -> Block 22 -# 1308| Block 22 -# 1308| r1308_15(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_16(bool) = Load[#temp1308:10] : &:r1308_15, ~m? -# 1308| v1308_17(void) = ConditionalBranch : r1308_16 +# 1310| Block 22 +# 1310| r1310_15(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_16(bool) = Load[#temp1310:10] : &:r1310_15, ~m? +# 1310| v1310_17(void) = ConditionalBranch : r1310_16 #-----| False -> Block 26 #-----| True -> Block 20 -# 1308| Block 23 -# 1308| r1308_18(glval) = VariableAddress[#temp1308:10] : -# 1308| r1308_19(bool) = Constant[1] : -# 1308| mu1308_20(bool) = Store[#temp1308:10] : &:r1308_18, r1308_19 +# 1310| Block 23 +# 1310| r1310_18(glval) = VariableAddress[#temp1310:10] : +# 1310| r1310_19(bool) = Constant[1] : +# 1310| mu1310_20(bool) = Store[#temp1310:10] : &:r1310_18, r1310_19 #-----| Goto -> Block 22 -# 1308| Block 24 -# 1308| r1308_21(glval) = VariableAddress[b] : -# 1308| r1308_22(bool) = Load[b] : &:r1308_21, ~m? -# 1308| v1308_23(void) = ConditionalBranch : r1308_22 +# 1310| Block 24 +# 1310| r1310_21(glval) = VariableAddress[b] : +# 1310| r1310_22(bool) = Load[b] : &:r1310_21, ~m? +# 1310| v1310_23(void) = ConditionalBranch : r1310_22 #-----| False -> Block 25 #-----| True -> Block 23 -# 1308| Block 25 -# 1308| r1308_24(glval) = VariableAddress[y] : -# 1308| r1308_25(long) = Load[y] : &:r1308_24, ~m? -# 1308| r1308_26(long) = Constant[0] : -# 1308| r1308_27(bool) = CompareNE : r1308_25, r1308_26 -# 1308| v1308_28(void) = ConditionalBranch : r1308_27 +# 1310| Block 25 +# 1310| r1310_24(glval) = VariableAddress[y] : +# 1310| r1310_25(long) = Load[y] : &:r1310_24, ~m? +# 1310| r1310_26(long) = Constant[0] : +# 1310| r1310_27(bool) = CompareNE : r1310_25, r1310_26 +# 1310| v1310_28(void) = ConditionalBranch : r1310_27 #-----| False -> Block 21 #-----| True -> Block 23 -# 1308| Block 26 -# 1308| r1308_29(glval) = VariableAddress[x] : -# 1308| r1308_30(int) = Load[x] : &:r1308_29, ~m? -# 1308| r1308_31(glval) = VariableAddress[#temp1308:9] : -# 1308| mu1308_32(int) = Store[#temp1308:9] : &:r1308_31, r1308_30 +# 1310| Block 26 +# 1310| r1310_29(glval) = VariableAddress[x] : +# 1310| r1310_30(int) = Load[x] : &:r1310_29, ~m? +# 1310| r1310_31(glval) = VariableAddress[#temp1310:9] : +# 1310| mu1310_32(int) = Store[#temp1310:9] : &:r1310_31, r1310_30 #-----| Goto -> Block 19 -# 1314| int shortCircuitConditional(int, int) -# 1314| Block 0 -# 1314| v1314_1(void) = EnterFunction : -# 1314| mu1314_2(unknown) = AliasedDefinition : -# 1314| mu1314_3(unknown) = InitializeNonLocal : -# 1314| r1314_4(glval) = VariableAddress[x] : -# 1314| mu1314_5(int) = InitializeParameter[x] : &:r1314_4 -# 1314| r1314_6(glval) = VariableAddress[y] : -# 1314| mu1314_7(int) = InitializeParameter[y] : &:r1314_6 -# 1315| r1315_1(glval) = VariableAddress[#return] : -# 1315| r1315_2(glval) = FunctionAddress[predicateA] : -# 1315| r1315_3(bool) = Call[predicateA] : func:r1315_2 -# 1315| mu1315_4(unknown) = ^CallSideEffect : ~m? -# 1315| v1315_5(void) = ConditionalBranch : r1315_3 +# 1316| int shortCircuitConditional(int, int) +# 1316| Block 0 +# 1316| v1316_1(void) = EnterFunction : +# 1316| mu1316_2(unknown) = AliasedDefinition : +# 1316| mu1316_3(unknown) = InitializeNonLocal : +# 1316| r1316_4(glval) = VariableAddress[x] : +# 1316| mu1316_5(int) = InitializeParameter[x] : &:r1316_4 +# 1316| r1316_6(glval) = VariableAddress[y] : +# 1316| mu1316_7(int) = InitializeParameter[y] : &:r1316_6 +# 1317| r1317_1(glval) = VariableAddress[#return] : +# 1317| r1317_2(glval) = FunctionAddress[predicateA] : +# 1317| r1317_3(bool) = Call[predicateA] : func:r1317_2 +# 1317| mu1317_4(unknown) = ^CallSideEffect : ~m? +# 1317| v1317_5(void) = ConditionalBranch : r1317_3 #-----| False -> Block 4 #-----| True -> Block 2 -# 1315| Block 1 -# 1315| r1315_6(glval) = VariableAddress[#temp1315:12] : -# 1315| r1315_7(int) = Load[#temp1315:12] : &:r1315_6, ~m? -# 1315| mu1315_8(int) = Store[#return] : &:r1315_1, r1315_7 -# 1314| r1314_8(glval) = VariableAddress[#return] : -# 1314| v1314_9(void) = ReturnValue : &:r1314_8, ~m? -# 1314| v1314_10(void) = AliasedUse : ~m? -# 1314| v1314_11(void) = ExitFunction : +# 1317| Block 1 +# 1317| r1317_6(glval) = VariableAddress[#temp1317:12] : +# 1317| r1317_7(int) = Load[#temp1317:12] : &:r1317_6, ~m? +# 1317| mu1317_8(int) = Store[#return] : &:r1317_1, r1317_7 +# 1316| r1316_8(glval) = VariableAddress[#return] : +# 1316| v1316_9(void) = ReturnValue : &:r1316_8, ~m? +# 1316| v1316_10(void) = AliasedUse : ~m? +# 1316| v1316_11(void) = ExitFunction : -# 1315| Block 2 -# 1315| r1315_9(glval) = FunctionAddress[predicateB] : -# 1315| r1315_10(bool) = Call[predicateB] : func:r1315_9 -# 1315| mu1315_11(unknown) = ^CallSideEffect : ~m? -# 1315| v1315_12(void) = ConditionalBranch : r1315_10 +# 1317| Block 2 +# 1317| r1317_9(glval) = FunctionAddress[predicateB] : +# 1317| r1317_10(bool) = Call[predicateB] : func:r1317_9 +# 1317| mu1317_11(unknown) = ^CallSideEffect : ~m? +# 1317| v1317_12(void) = ConditionalBranch : r1317_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1315| Block 3 -# 1315| r1315_13(glval) = VariableAddress[x] : -# 1315| r1315_14(int) = Load[x] : &:r1315_13, ~m? -# 1315| r1315_15(glval) = VariableAddress[#temp1315:12] : -# 1315| mu1315_16(int) = Store[#temp1315:12] : &:r1315_15, r1315_14 +# 1317| Block 3 +# 1317| r1317_13(glval) = VariableAddress[x] : +# 1317| r1317_14(int) = Load[x] : &:r1317_13, ~m? +# 1317| r1317_15(glval) = VariableAddress[#temp1317:12] : +# 1317| mu1317_16(int) = Store[#temp1317:12] : &:r1317_15, r1317_14 #-----| Goto -> Block 1 -# 1315| Block 4 -# 1315| r1315_17(glval) = VariableAddress[y] : -# 1315| r1315_18(int) = Load[y] : &:r1315_17, ~m? -# 1315| r1315_19(glval) = VariableAddress[#temp1315:12] : -# 1315| mu1315_20(int) = Store[#temp1315:12] : &:r1315_19, r1315_18 +# 1317| Block 4 +# 1317| r1317_17(glval) = VariableAddress[y] : +# 1317| r1317_18(int) = Load[y] : &:r1317_17, ~m? +# 1317| r1317_19(glval) = VariableAddress[#temp1317:12] : +# 1317| mu1317_20(int) = Store[#temp1317:12] : &:r1317_19, r1317_18 #-----| Goto -> Block 1 -# 1320| void f(int*) -# 1320| Block 0 -# 1320| v1320_1(void) = EnterFunction : -# 1320| mu1320_2(unknown) = AliasedDefinition : -# 1320| mu1320_3(unknown) = InitializeNonLocal : -# 1320| r1320_4(glval) = VariableAddress[p] : -# 1320| mu1320_5(int *) = InitializeParameter[p] : &:r1320_4 -# 1320| r1320_6(int *) = Load[p] : &:r1320_4, ~m? -# 1320| mu1320_7(unknown) = InitializeIndirection[p] : &:r1320_6 -# 1322| r1322_1(glval) = FunctionAddress[operator new] : -# 1322| r1322_2(unsigned long) = Constant[4] : -# 1322| r1322_3(glval) = VariableAddress[p] : -# 1322| r1322_4(int *) = Load[p] : &:r1322_3, ~m? -# 1322| r1322_5(void *) = Convert : r1322_4 -# 1322| r1322_6(void *) = Call[operator new] : func:r1322_1, 0:r1322_2, 1:r1322_5 -# 1322| mu1322_7(unknown) = ^CallSideEffect : ~m? -# 1322| mu1322_8(unknown) = ^InitializeDynamicAllocation : &:r1322_6 -# 1322| r1322_9(int *) = Convert : r1322_6 -# 1323| v1323_1(void) = NoOp : -# 1320| v1320_8(void) = ReturnIndirection[p] : &:r1320_6, ~m? -# 1320| v1320_9(void) = ReturnVoid : -# 1320| v1320_10(void) = AliasedUse : ~m? -# 1320| v1320_11(void) = ExitFunction : +# 1322| void f(int*) +# 1322| Block 0 +# 1322| v1322_1(void) = EnterFunction : +# 1322| mu1322_2(unknown) = AliasedDefinition : +# 1322| mu1322_3(unknown) = InitializeNonLocal : +# 1322| r1322_4(glval) = VariableAddress[p] : +# 1322| mu1322_5(int *) = InitializeParameter[p] : &:r1322_4 +# 1322| r1322_6(int *) = Load[p] : &:r1322_4, ~m? +# 1322| mu1322_7(unknown) = InitializeIndirection[p] : &:r1322_6 +# 1324| r1324_1(glval) = FunctionAddress[operator new] : +# 1324| r1324_2(unsigned long) = Constant[4] : +# 1324| r1324_3(glval) = VariableAddress[p] : +# 1324| r1324_4(int *) = Load[p] : &:r1324_3, ~m? +# 1324| r1324_5(void *) = Convert : r1324_4 +# 1324| r1324_6(void *) = Call[operator new] : func:r1324_1, 0:r1324_2, 1:r1324_5 +# 1324| mu1324_7(unknown) = ^CallSideEffect : ~m? +# 1324| mu1324_8(unknown) = ^InitializeDynamicAllocation : &:r1324_6 +# 1324| r1324_9(int *) = Convert : r1324_6 +# 1325| v1325_1(void) = NoOp : +# 1322| v1322_8(void) = ReturnIndirection[p] : &:r1322_6, ~m? +# 1322| v1322_9(void) = ReturnVoid : +# 1322| v1322_10(void) = AliasedUse : ~m? +# 1322| v1322_11(void) = ExitFunction : -# 1326| Point defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(Point) = Constant[0] : -# 1327| mu1327_3(Point) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| Point defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(Point) = Constant[0] : +# 1329| mu1329_3(Point) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1326| String defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| mu1327_2(String) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[String] : -# 1327| v1327_4(void) = Call[String] : func:r1327_3, this:r1327_1 -# 1327| mu1327_5(unknown) = ^CallSideEffect : ~m? -# 1327| mu1327_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| String defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| mu1329_2(String) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[String] : +# 1329| v1329_4(void) = Call[String] : func:r1329_3, this:r1329_1 +# 1329| mu1329_5(unknown) = ^CallSideEffect : ~m? +# 1329| mu1329_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1326| copy_constructor defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| mu1327_2(copy_constructor) = Uninitialized[#return] : &:r1327_1 -# 1327| r1327_3(glval) = FunctionAddress[copy_constructor] : -# 1327| v1327_4(void) = Call[copy_constructor] : func:r1327_3, this:r1327_1 -# 1327| mu1327_5(unknown) = ^CallSideEffect : ~m? -# 1327| mu1327_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1327_1 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| copy_constructor defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| mu1329_2(copy_constructor) = Uninitialized[#return] : &:r1329_1 +# 1329| r1329_3(glval) = FunctionAddress[copy_constructor] : +# 1329| v1329_4(void) = Call[copy_constructor] : func:r1329_3, this:r1329_1 +# 1329| mu1329_5(unknown) = ^CallSideEffect : ~m? +# 1329| mu1329_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1329_1 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1326| destructor_only defaultConstruct() -# 1326| Block 0 -# 1326| v1326_1(void) = EnterFunction : -# 1326| mu1326_2(unknown) = AliasedDefinition : -# 1326| mu1326_3(unknown) = InitializeNonLocal : -# 1327| r1327_1(glval) = VariableAddress[#return] : -# 1327| r1327_2(destructor_only) = Constant[0] : -# 1327| mu1327_3(destructor_only) = Store[#return] : &:r1327_1, r1327_2 -# 1326| r1326_4(glval) = VariableAddress[#return] : -# 1326| v1326_5(void) = ReturnValue : &:r1326_4, ~m? -# 1326| v1326_6(void) = AliasedUse : ~m? -# 1326| v1326_7(void) = ExitFunction : +# 1328| destructor_only defaultConstruct() +# 1328| Block 0 +# 1328| v1328_1(void) = EnterFunction : +# 1328| mu1328_2(unknown) = AliasedDefinition : +# 1328| mu1328_3(unknown) = InitializeNonLocal : +# 1329| r1329_1(glval) = VariableAddress[#return] : +# 1329| r1329_2(destructor_only) = Constant[0] : +# 1329| mu1329_3(destructor_only) = Store[#return] : &:r1329_1, r1329_2 +# 1328| r1328_4(glval) = VariableAddress[#return] : +# 1328| v1328_5(void) = ReturnValue : &:r1328_4, ~m? +# 1328| v1328_6(void) = AliasedUse : ~m? +# 1328| v1328_7(void) = ExitFunction : -# 1365| void temporary_string() -# 1365| Block 0 -# 1365| v1365_1(void) = EnterFunction : -# 1365| mu1365_2(unknown) = AliasedDefinition : -# 1365| mu1365_3(unknown) = InitializeNonLocal : -# 1366| r1366_1(glval) = VariableAddress[s] : -# 1366| r1366_2(glval) = FunctionAddress[returnValue] : -# 1366| r1366_3(String) = Call[returnValue] : func:r1366_2 -# 1366| mu1366_4(unknown) = ^CallSideEffect : ~m? -# 1366| mu1366_5(String) = Store[s] : &:r1366_1, r1366_3 -# 1367| r1367_1(glval) = VariableAddress[rs] : -# 1367| r1367_2(glval) = VariableAddress[#temp1367:24] : -# 1367| r1367_3(glval) = FunctionAddress[returnValue] : -# 1367| r1367_4(String) = Call[returnValue] : func:r1367_3 -# 1367| mu1367_5(unknown) = ^CallSideEffect : ~m? -# 1367| mu1367_6(String) = Store[#temp1367:24] : &:r1367_2, r1367_4 -# 1367| r1367_7(glval) = Convert : r1367_2 -# 1367| r1367_8(String &) = CopyValue : r1367_7 -# 1367| mu1367_9(String &) = Store[rs] : &:r1367_1, r1367_8 -# 1369| r1369_1(glval) = FunctionAddress[acceptRef] : -# 1369| r1369_2(glval) = VariableAddress[s] : -# 1369| r1369_3(glval) = Convert : r1369_2 -# 1369| r1369_4(String &) = CopyValue : r1369_3 -# 1369| v1369_5(void) = Call[acceptRef] : func:r1369_1, 0:r1369_4 -# 1369| mu1369_6(unknown) = ^CallSideEffect : ~m? -# 1369| v1369_7(void) = ^BufferReadSideEffect[0] : &:r1369_4, ~m? -# 1370| r1370_1(glval) = FunctionAddress[acceptRef] : -# 1370| r1370_2(glval) = VariableAddress[#temp1370:23] : -# 1370| mu1370_3(String) = Uninitialized[#temp1370:23] : &:r1370_2 -# 1370| r1370_4(glval) = FunctionAddress[String] : -# 1370| r1370_5(glval) = StringConstant["foo"] : -# 1370| r1370_6(char *) = Convert : r1370_5 -# 1370| v1370_7(void) = Call[String] : func:r1370_4, this:r1370_2, 0:r1370_6 -# 1370| mu1370_8(unknown) = ^CallSideEffect : ~m? -# 1370| v1370_9(void) = ^BufferReadSideEffect[0] : &:r1370_6, ~m? -# 1370| mu1370_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1370_2 -# 1370| r1370_11(String &) = CopyValue : r1370_2 -# 1370| v1370_12(void) = Call[acceptRef] : func:r1370_1, 0:r1370_11 -# 1370| mu1370_13(unknown) = ^CallSideEffect : ~m? -# 1370| v1370_14(void) = ^BufferReadSideEffect[0] : &:r1370_11, ~m? -# 1371| r1371_1(glval) = FunctionAddress[acceptValue] : -# 1371| r1371_2(glval) = VariableAddress[#temp1371:17] : -# 1371| mu1371_3(String) = Uninitialized[#temp1371:17] : &:r1371_2 -# 1371| r1371_4(glval) = FunctionAddress[String] : -# 1371| r1371_5(glval) = VariableAddress[s] : -# 1371| r1371_6(glval) = Convert : r1371_5 -# 1371| r1371_7(String &) = CopyValue : r1371_6 -# 1371| v1371_8(void) = Call[String] : func:r1371_4, this:r1371_2, 0:r1371_7 -# 1371| mu1371_9(unknown) = ^CallSideEffect : ~m? -# 1371| v1371_10(void) = ^BufferReadSideEffect[0] : &:r1371_7, ~m? -# 1371| mu1371_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1371_2 -# 1371| r1371_12(String) = Load[#temp1371:17] : &:r1371_2, ~m? -# 1371| v1371_13(void) = Call[acceptValue] : func:r1371_1, 0:r1371_12 -# 1371| mu1371_14(unknown) = ^CallSideEffect : ~m? -# 1372| r1372_1(glval) = FunctionAddress[acceptValue] : -# 1372| r1372_2(glval) = VariableAddress[#temp1372:25] : -# 1372| mu1372_3(String) = Uninitialized[#temp1372:25] : &:r1372_2 +# 1367| void temporary_string() +# 1367| Block 0 +# 1367| v1367_1(void) = EnterFunction : +# 1367| mu1367_2(unknown) = AliasedDefinition : +# 1367| mu1367_3(unknown) = InitializeNonLocal : +# 1368| r1368_1(glval) = VariableAddress[s] : +# 1368| r1368_2(glval) = FunctionAddress[returnValue] : +# 1368| r1368_3(String) = Call[returnValue] : func:r1368_2 +# 1368| mu1368_4(unknown) = ^CallSideEffect : ~m? +# 1368| mu1368_5(String) = Store[s] : &:r1368_1, r1368_3 +# 1369| r1369_1(glval) = VariableAddress[rs] : +# 1369| r1369_2(glval) = VariableAddress[#temp1369:24] : +# 1369| r1369_3(glval) = FunctionAddress[returnValue] : +# 1369| r1369_4(String) = Call[returnValue] : func:r1369_3 +# 1369| mu1369_5(unknown) = ^CallSideEffect : ~m? +# 1369| mu1369_6(String) = Store[#temp1369:24] : &:r1369_2, r1369_4 +# 1369| r1369_7(glval) = Convert : r1369_2 +# 1369| r1369_8(String &) = CopyValue : r1369_7 +# 1369| mu1369_9(String &) = Store[rs] : &:r1369_1, r1369_8 +# 1371| r1371_1(glval) = FunctionAddress[acceptRef] : +# 1371| r1371_2(glval) = VariableAddress[s] : +# 1371| r1371_3(glval) = Convert : r1371_2 +# 1371| r1371_4(String &) = CopyValue : r1371_3 +# 1371| v1371_5(void) = Call[acceptRef] : func:r1371_1, 0:r1371_4 +# 1371| mu1371_6(unknown) = ^CallSideEffect : ~m? +# 1371| v1371_7(void) = ^BufferReadSideEffect[0] : &:r1371_4, ~m? +# 1372| r1372_1(glval) = FunctionAddress[acceptRef] : +# 1372| r1372_2(glval) = VariableAddress[#temp1372:23] : +# 1372| mu1372_3(String) = Uninitialized[#temp1372:23] : &:r1372_2 # 1372| r1372_4(glval) = FunctionAddress[String] : # 1372| r1372_5(glval) = StringConstant["foo"] : # 1372| r1372_6(char *) = Convert : r1372_5 @@ -7791,985 +7763,993 @@ ir.cpp: # 1372| mu1372_8(unknown) = ^CallSideEffect : ~m? # 1372| v1372_9(void) = ^BufferReadSideEffect[0] : &:r1372_6, ~m? # 1372| mu1372_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1372_2 -# 1372| r1372_11(String) = Load[#temp1372:25] : &:r1372_2, ~m? -# 1372| v1372_12(void) = Call[acceptValue] : func:r1372_1, 0:r1372_11 +# 1372| r1372_11(String &) = CopyValue : r1372_2 +# 1372| v1372_12(void) = Call[acceptRef] : func:r1372_1, 0:r1372_11 # 1372| mu1372_13(unknown) = ^CallSideEffect : ~m? -# 1373| r1373_1(glval) = VariableAddress[#temp1373:5] : -# 1373| mu1373_2(String) = Uninitialized[#temp1373:5] : &:r1373_1 -# 1373| r1373_3(glval) = FunctionAddress[String] : -# 1373| v1373_4(void) = Call[String] : func:r1373_3, this:r1373_1 -# 1373| mu1373_5(unknown) = ^CallSideEffect : ~m? -# 1373| mu1373_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_1 -# 1373| r1373_7(glval) = Convert : r1373_1 -# 1373| r1373_8(glval) = FunctionAddress[c_str] : -# 1373| r1373_9(char *) = Call[c_str] : func:r1373_8, this:r1373_7 -# 1373| mu1373_10(unknown) = ^CallSideEffect : ~m? -# 1373| v1373_11(void) = ^IndirectReadSideEffect[-1] : &:r1373_7, ~m? -# 1374| r1374_1(glval) = VariableAddress[#temp1374:5] : -# 1374| r1374_2(glval) = FunctionAddress[returnValue] : -# 1374| r1374_3(String) = Call[returnValue] : func:r1374_2 -# 1374| mu1374_4(unknown) = ^CallSideEffect : ~m? -# 1374| mu1374_5(String) = Store[#temp1374:5] : &:r1374_1, r1374_3 -# 1374| r1374_6(glval) = Convert : r1374_1 -# 1374| r1374_7(glval) = FunctionAddress[c_str] : -# 1374| r1374_8(char *) = Call[c_str] : func:r1374_7, this:r1374_6 -# 1374| mu1374_9(unknown) = ^CallSideEffect : ~m? -# 1374| v1374_10(void) = ^IndirectReadSideEffect[-1] : &:r1374_6, ~m? +# 1372| v1372_14(void) = ^BufferReadSideEffect[0] : &:r1372_11, ~m? +# 1373| r1373_1(glval) = FunctionAddress[acceptValue] : +# 1373| r1373_2(glval) = VariableAddress[#temp1373:17] : +# 1373| mu1373_3(String) = Uninitialized[#temp1373:17] : &:r1373_2 +# 1373| r1373_4(glval) = FunctionAddress[String] : +# 1373| r1373_5(glval) = VariableAddress[s] : +# 1373| r1373_6(glval) = Convert : r1373_5 +# 1373| r1373_7(String &) = CopyValue : r1373_6 +# 1373| v1373_8(void) = Call[String] : func:r1373_4, this:r1373_2, 0:r1373_7 +# 1373| mu1373_9(unknown) = ^CallSideEffect : ~m? +# 1373| v1373_10(void) = ^BufferReadSideEffect[0] : &:r1373_7, ~m? +# 1373| mu1373_11(String) = ^IndirectMayWriteSideEffect[-1] : &:r1373_2 +# 1373| r1373_12(String) = Load[#temp1373:17] : &:r1373_2, ~m? +# 1373| v1373_13(void) = Call[acceptValue] : func:r1373_1, 0:r1373_12 +# 1373| mu1373_14(unknown) = ^CallSideEffect : ~m? +# 1374| r1374_1(glval) = FunctionAddress[acceptValue] : +# 1374| r1374_2(glval) = VariableAddress[#temp1374:25] : +# 1374| mu1374_3(String) = Uninitialized[#temp1374:25] : &:r1374_2 +# 1374| r1374_4(glval) = FunctionAddress[String] : +# 1374| r1374_5(glval) = StringConstant["foo"] : +# 1374| r1374_6(char *) = Convert : r1374_5 +# 1374| v1374_7(void) = Call[String] : func:r1374_4, this:r1374_2, 0:r1374_6 +# 1374| mu1374_8(unknown) = ^CallSideEffect : ~m? +# 1374| v1374_9(void) = ^BufferReadSideEffect[0] : &:r1374_6, ~m? +# 1374| mu1374_10(String) = ^IndirectMayWriteSideEffect[-1] : &:r1374_2 +# 1374| r1374_11(String) = Load[#temp1374:25] : &:r1374_2, ~m? +# 1374| v1374_12(void) = Call[acceptValue] : func:r1374_1, 0:r1374_11 +# 1374| mu1374_13(unknown) = ^CallSideEffect : ~m? +# 1375| r1375_1(glval) = VariableAddress[#temp1375:5] : +# 1375| mu1375_2(String) = Uninitialized[#temp1375:5] : &:r1375_1 +# 1375| r1375_3(glval) = FunctionAddress[String] : +# 1375| v1375_4(void) = Call[String] : func:r1375_3, this:r1375_1 +# 1375| mu1375_5(unknown) = ^CallSideEffect : ~m? +# 1375| mu1375_6(String) = ^IndirectMayWriteSideEffect[-1] : &:r1375_1 +# 1375| r1375_7(glval) = Convert : r1375_1 +# 1375| r1375_8(glval) = FunctionAddress[c_str] : +# 1375| r1375_9(char *) = Call[c_str] : func:r1375_8, this:r1375_7 +# 1375| mu1375_10(unknown) = ^CallSideEffect : ~m? +# 1375| v1375_11(void) = ^IndirectReadSideEffect[-1] : &:r1375_7, ~m? # 1376| r1376_1(glval) = VariableAddress[#temp1376:5] : -# 1376| r1376_2(glval) = FunctionAddress[defaultConstruct] : -# 1376| r1376_3(String) = Call[defaultConstruct] : func:r1376_2 +# 1376| r1376_2(glval) = FunctionAddress[returnValue] : +# 1376| r1376_3(String) = Call[returnValue] : func:r1376_2 # 1376| mu1376_4(unknown) = ^CallSideEffect : ~m? # 1376| mu1376_5(String) = Store[#temp1376:5] : &:r1376_1, r1376_3 -# 1377| v1377_1(void) = NoOp : -# 1365| v1365_4(void) = ReturnVoid : -# 1365| v1365_5(void) = AliasedUse : ~m? -# 1365| v1365_6(void) = ExitFunction : +# 1376| r1376_6(glval) = Convert : r1376_1 +# 1376| r1376_7(glval) = FunctionAddress[c_str] : +# 1376| r1376_8(char *) = Call[c_str] : func:r1376_7, this:r1376_6 +# 1376| mu1376_9(unknown) = ^CallSideEffect : ~m? +# 1376| v1376_10(void) = ^IndirectReadSideEffect[-1] : &:r1376_6, ~m? +# 1378| r1378_1(glval) = VariableAddress[#temp1378:5] : +# 1378| r1378_2(glval) = FunctionAddress[defaultConstruct] : +# 1378| r1378_3(String) = Call[defaultConstruct] : func:r1378_2 +# 1378| mu1378_4(unknown) = ^CallSideEffect : ~m? +# 1378| mu1378_5(String) = Store[#temp1378:5] : &:r1378_1, r1378_3 +# 1379| v1379_1(void) = NoOp : +# 1367| v1367_4(void) = ReturnVoid : +# 1367| v1367_5(void) = AliasedUse : ~m? +# 1367| v1367_6(void) = ExitFunction : -# 1379| void temporary_destructor_only() -# 1379| Block 0 -# 1379| v1379_1(void) = EnterFunction : -# 1379| mu1379_2(unknown) = AliasedDefinition : -# 1379| mu1379_3(unknown) = InitializeNonLocal : -# 1380| r1380_1(glval) = VariableAddress[d] : -# 1380| r1380_2(glval) = FunctionAddress[returnValue] : -# 1380| r1380_3(destructor_only) = Call[returnValue] : func:r1380_2 -# 1380| mu1380_4(unknown) = ^CallSideEffect : ~m? -# 1380| mu1380_5(destructor_only) = Store[d] : &:r1380_1, r1380_3 -# 1381| r1381_1(glval) = VariableAddress[rd] : -# 1381| r1381_2(glval) = VariableAddress[#temp1381:33] : -# 1381| r1381_3(glval) = FunctionAddress[returnValue] : -# 1381| r1381_4(destructor_only) = Call[returnValue] : func:r1381_3 -# 1381| mu1381_5(unknown) = ^CallSideEffect : ~m? -# 1381| mu1381_6(destructor_only) = Store[#temp1381:33] : &:r1381_2, r1381_4 -# 1381| r1381_7(glval) = Convert : r1381_2 -# 1381| r1381_8(destructor_only &) = CopyValue : r1381_7 -# 1381| mu1381_9(destructor_only &) = Store[rd] : &:r1381_1, r1381_8 -# 1382| r1382_1(glval) = VariableAddress[d2] : -# 1382| mu1382_2(destructor_only) = Uninitialized[d2] : &:r1382_1 -# 1383| r1383_1(glval) = FunctionAddress[acceptRef] : -# 1383| r1383_2(glval) = VariableAddress[d] : -# 1383| r1383_3(glval) = Convert : r1383_2 -# 1383| r1383_4(destructor_only &) = CopyValue : r1383_3 -# 1383| v1383_5(void) = Call[acceptRef] : func:r1383_1, 0:r1383_4 -# 1383| mu1383_6(unknown) = ^CallSideEffect : ~m? -# 1383| v1383_7(void) = ^BufferReadSideEffect[0] : &:r1383_4, ~m? -# 1384| r1384_1(glval) = FunctionAddress[acceptValue] : -# 1384| r1384_2(glval) = VariableAddress[#temp1384:17] : -# 1384| r1384_3(glval) = VariableAddress[d] : -# 1384| r1384_4(destructor_only) = Load[d] : &:r1384_3, ~m? -# 1384| mu1384_5(destructor_only) = Store[#temp1384:17] : &:r1384_2, r1384_4 -# 1384| r1384_6(destructor_only) = Load[#temp1384:17] : &:r1384_2, ~m? -# 1384| v1384_7(void) = Call[acceptValue] : func:r1384_1, 0:r1384_6 -# 1384| mu1384_8(unknown) = ^CallSideEffect : ~m? -# 1385| r1385_1(glval) = VariableAddress[#temp1385:5] : -# 1385| r1385_2(destructor_only) = Constant[0] : -# 1385| mu1385_3(destructor_only) = Store[#temp1385:5] : &:r1385_1, r1385_2 -# 1385| r1385_4(glval) = FunctionAddress[method] : -# 1385| v1385_5(void) = Call[method] : func:r1385_4, this:r1385_1 +# 1381| void temporary_destructor_only() +# 1381| Block 0 +# 1381| v1381_1(void) = EnterFunction : +# 1381| mu1381_2(unknown) = AliasedDefinition : +# 1381| mu1381_3(unknown) = InitializeNonLocal : +# 1382| r1382_1(glval) = VariableAddress[d] : +# 1382| r1382_2(glval) = FunctionAddress[returnValue] : +# 1382| r1382_3(destructor_only) = Call[returnValue] : func:r1382_2 +# 1382| mu1382_4(unknown) = ^CallSideEffect : ~m? +# 1382| mu1382_5(destructor_only) = Store[d] : &:r1382_1, r1382_3 +# 1383| r1383_1(glval) = VariableAddress[rd] : +# 1383| r1383_2(glval) = VariableAddress[#temp1383:33] : +# 1383| r1383_3(glval) = FunctionAddress[returnValue] : +# 1383| r1383_4(destructor_only) = Call[returnValue] : func:r1383_3 +# 1383| mu1383_5(unknown) = ^CallSideEffect : ~m? +# 1383| mu1383_6(destructor_only) = Store[#temp1383:33] : &:r1383_2, r1383_4 +# 1383| r1383_7(glval) = Convert : r1383_2 +# 1383| r1383_8(destructor_only &) = CopyValue : r1383_7 +# 1383| mu1383_9(destructor_only &) = Store[rd] : &:r1383_1, r1383_8 +# 1384| r1384_1(glval) = VariableAddress[d2] : +# 1384| mu1384_2(destructor_only) = Uninitialized[d2] : &:r1384_1 +# 1385| r1385_1(glval) = FunctionAddress[acceptRef] : +# 1385| r1385_2(glval) = VariableAddress[d] : +# 1385| r1385_3(glval) = Convert : r1385_2 +# 1385| r1385_4(destructor_only &) = CopyValue : r1385_3 +# 1385| v1385_5(void) = Call[acceptRef] : func:r1385_1, 0:r1385_4 # 1385| mu1385_6(unknown) = ^CallSideEffect : ~m? -# 1385| v1385_7(void) = ^IndirectReadSideEffect[-1] : &:r1385_1, ~m? -# 1385| mu1385_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1385_1 -# 1386| r1386_1(glval) = VariableAddress[#temp1386:5] : -# 1386| r1386_2(glval) = FunctionAddress[returnValue] : -# 1386| r1386_3(destructor_only) = Call[returnValue] : func:r1386_2 -# 1386| mu1386_4(unknown) = ^CallSideEffect : ~m? -# 1386| mu1386_5(destructor_only) = Store[#temp1386:5] : &:r1386_1, r1386_3 -# 1386| r1386_6(glval) = FunctionAddress[method] : -# 1386| v1386_7(void) = Call[method] : func:r1386_6, this:r1386_1 +# 1385| v1385_7(void) = ^BufferReadSideEffect[0] : &:r1385_4, ~m? +# 1386| r1386_1(glval) = FunctionAddress[acceptValue] : +# 1386| r1386_2(glval) = VariableAddress[#temp1386:17] : +# 1386| r1386_3(glval) = VariableAddress[d] : +# 1386| r1386_4(destructor_only) = Load[d] : &:r1386_3, ~m? +# 1386| mu1386_5(destructor_only) = Store[#temp1386:17] : &:r1386_2, r1386_4 +# 1386| r1386_6(destructor_only) = Load[#temp1386:17] : &:r1386_2, ~m? +# 1386| v1386_7(void) = Call[acceptValue] : func:r1386_1, 0:r1386_6 # 1386| mu1386_8(unknown) = ^CallSideEffect : ~m? -# 1386| v1386_9(void) = ^IndirectReadSideEffect[-1] : &:r1386_1, ~m? -# 1386| mu1386_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1386_1 +# 1387| r1387_1(glval) = VariableAddress[#temp1387:5] : +# 1387| r1387_2(destructor_only) = Constant[0] : +# 1387| mu1387_3(destructor_only) = Store[#temp1387:5] : &:r1387_1, r1387_2 +# 1387| r1387_4(glval) = FunctionAddress[method] : +# 1387| v1387_5(void) = Call[method] : func:r1387_4, this:r1387_1 +# 1387| mu1387_6(unknown) = ^CallSideEffect : ~m? +# 1387| v1387_7(void) = ^IndirectReadSideEffect[-1] : &:r1387_1, ~m? +# 1387| mu1387_8(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1387_1 # 1388| r1388_1(glval) = VariableAddress[#temp1388:5] : -# 1388| r1388_2(glval) = FunctionAddress[defaultConstruct] : -# 1388| r1388_3(destructor_only) = Call[defaultConstruct] : func:r1388_2 +# 1388| r1388_2(glval) = FunctionAddress[returnValue] : +# 1388| r1388_3(destructor_only) = Call[returnValue] : func:r1388_2 # 1388| mu1388_4(unknown) = ^CallSideEffect : ~m? # 1388| mu1388_5(destructor_only) = Store[#temp1388:5] : &:r1388_1, r1388_3 -# 1389| v1389_1(void) = NoOp : -# 1379| v1379_4(void) = ReturnVoid : -# 1379| v1379_5(void) = AliasedUse : ~m? -# 1379| v1379_6(void) = ExitFunction : +# 1388| r1388_6(glval) = FunctionAddress[method] : +# 1388| v1388_7(void) = Call[method] : func:r1388_6, this:r1388_1 +# 1388| mu1388_8(unknown) = ^CallSideEffect : ~m? +# 1388| v1388_9(void) = ^IndirectReadSideEffect[-1] : &:r1388_1, ~m? +# 1388| mu1388_10(destructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1388_1 +# 1390| r1390_1(glval) = VariableAddress[#temp1390:5] : +# 1390| r1390_2(glval) = FunctionAddress[defaultConstruct] : +# 1390| r1390_3(destructor_only) = Call[defaultConstruct] : func:r1390_2 +# 1390| mu1390_4(unknown) = ^CallSideEffect : ~m? +# 1390| mu1390_5(destructor_only) = Store[#temp1390:5] : &:r1390_1, r1390_3 +# 1391| v1391_1(void) = NoOp : +# 1381| v1381_4(void) = ReturnVoid : +# 1381| v1381_5(void) = AliasedUse : ~m? +# 1381| v1381_6(void) = ExitFunction : -# 1391| void temporary_copy_constructor() -# 1391| Block 0 -# 1391| v1391_1(void) = EnterFunction : -# 1391| mu1391_2(unknown) = AliasedDefinition : -# 1391| mu1391_3(unknown) = InitializeNonLocal : -# 1392| r1392_1(glval) = VariableAddress[d] : -# 1392| r1392_2(glval) = FunctionAddress[returnValue] : -# 1392| r1392_3(copy_constructor) = Call[returnValue] : func:r1392_2 -# 1392| mu1392_4(unknown) = ^CallSideEffect : ~m? -# 1392| mu1392_5(copy_constructor) = Store[d] : &:r1392_1, r1392_3 -# 1393| r1393_1(glval) = VariableAddress[rd] : -# 1393| r1393_2(glval) = VariableAddress[#temp1393:34] : -# 1393| r1393_3(glval) = FunctionAddress[returnValue] : -# 1393| r1393_4(copy_constructor) = Call[returnValue] : func:r1393_3 -# 1393| mu1393_5(unknown) = ^CallSideEffect : ~m? -# 1393| mu1393_6(copy_constructor) = Store[#temp1393:34] : &:r1393_2, r1393_4 -# 1393| r1393_7(glval) = Convert : r1393_2 -# 1393| r1393_8(copy_constructor &) = CopyValue : r1393_7 -# 1393| mu1393_9(copy_constructor &) = Store[rd] : &:r1393_1, r1393_8 -# 1394| r1394_1(glval) = VariableAddress[d2] : -# 1394| mu1394_2(copy_constructor) = Uninitialized[d2] : &:r1394_1 -# 1394| r1394_3(glval) = FunctionAddress[copy_constructor] : -# 1394| v1394_4(void) = Call[copy_constructor] : func:r1394_3, this:r1394_1 -# 1394| mu1394_5(unknown) = ^CallSideEffect : ~m? -# 1394| mu1394_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1394_1 -# 1395| r1395_1(glval) = FunctionAddress[acceptRef] : -# 1395| r1395_2(glval) = VariableAddress[d] : -# 1395| r1395_3(glval) = Convert : r1395_2 -# 1395| r1395_4(copy_constructor &) = CopyValue : r1395_3 -# 1395| v1395_5(void) = Call[acceptRef] : func:r1395_1, 0:r1395_4 -# 1395| mu1395_6(unknown) = ^CallSideEffect : ~m? -# 1395| v1395_7(void) = ^BufferReadSideEffect[0] : &:r1395_4, ~m? -# 1396| r1396_1(glval) = FunctionAddress[acceptValue] : -# 1396| r1396_2(glval) = VariableAddress[#temp1396:17] : -# 1396| mu1396_3(copy_constructor) = Uninitialized[#temp1396:17] : &:r1396_2 -# 1396| r1396_4(glval) = FunctionAddress[copy_constructor] : -# 1396| r1396_5(glval) = VariableAddress[d] : -# 1396| r1396_6(glval) = Convert : r1396_5 -# 1396| r1396_7(copy_constructor &) = CopyValue : r1396_6 -# 1396| v1396_8(void) = Call[copy_constructor] : func:r1396_4, this:r1396_2, 0:r1396_7 -# 1396| mu1396_9(unknown) = ^CallSideEffect : ~m? -# 1396| v1396_10(void) = ^BufferReadSideEffect[0] : &:r1396_7, ~m? -# 1396| mu1396_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_2 -# 1396| r1396_12(copy_constructor) = Load[#temp1396:17] : &:r1396_2, ~m? -# 1396| v1396_13(void) = Call[acceptValue] : func:r1396_1, 0:r1396_12 -# 1396| mu1396_14(unknown) = ^CallSideEffect : ~m? -# 1397| r1397_1(glval) = VariableAddress[#temp1397:5] : -# 1397| mu1397_2(copy_constructor) = Uninitialized[#temp1397:5] : &:r1397_1 -# 1397| r1397_3(glval) = FunctionAddress[copy_constructor] : -# 1397| v1397_4(void) = Call[copy_constructor] : func:r1397_3, this:r1397_1 -# 1397| mu1397_5(unknown) = ^CallSideEffect : ~m? -# 1397| mu1397_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1397| r1397_7(glval) = FunctionAddress[method] : -# 1397| v1397_8(void) = Call[method] : func:r1397_7, this:r1397_1 -# 1397| mu1397_9(unknown) = ^CallSideEffect : ~m? -# 1397| v1397_10(void) = ^IndirectReadSideEffect[-1] : &:r1397_1, ~m? -# 1397| mu1397_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1397_1 -# 1398| r1398_1(glval) = VariableAddress[#temp1398:5] : -# 1398| r1398_2(glval) = FunctionAddress[returnValue] : -# 1398| r1398_3(copy_constructor) = Call[returnValue] : func:r1398_2 -# 1398| mu1398_4(unknown) = ^CallSideEffect : ~m? -# 1398| mu1398_5(copy_constructor) = Store[#temp1398:5] : &:r1398_1, r1398_3 -# 1398| r1398_6(glval) = FunctionAddress[method] : -# 1398| v1398_7(void) = Call[method] : func:r1398_6, this:r1398_1 -# 1398| mu1398_8(unknown) = ^CallSideEffect : ~m? -# 1398| v1398_9(void) = ^IndirectReadSideEffect[-1] : &:r1398_1, ~m? -# 1398| mu1398_10(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_1 +# 1393| void temporary_copy_constructor() +# 1393| Block 0 +# 1393| v1393_1(void) = EnterFunction : +# 1393| mu1393_2(unknown) = AliasedDefinition : +# 1393| mu1393_3(unknown) = InitializeNonLocal : +# 1394| r1394_1(glval) = VariableAddress[d] : +# 1394| r1394_2(glval) = FunctionAddress[returnValue] : +# 1394| r1394_3(copy_constructor) = Call[returnValue] : func:r1394_2 +# 1394| mu1394_4(unknown) = ^CallSideEffect : ~m? +# 1394| mu1394_5(copy_constructor) = Store[d] : &:r1394_1, r1394_3 +# 1395| r1395_1(glval) = VariableAddress[rd] : +# 1395| r1395_2(glval) = VariableAddress[#temp1395:34] : +# 1395| r1395_3(glval) = FunctionAddress[returnValue] : +# 1395| r1395_4(copy_constructor) = Call[returnValue] : func:r1395_3 +# 1395| mu1395_5(unknown) = ^CallSideEffect : ~m? +# 1395| mu1395_6(copy_constructor) = Store[#temp1395:34] : &:r1395_2, r1395_4 +# 1395| r1395_7(glval) = Convert : r1395_2 +# 1395| r1395_8(copy_constructor &) = CopyValue : r1395_7 +# 1395| mu1395_9(copy_constructor &) = Store[rd] : &:r1395_1, r1395_8 +# 1396| r1396_1(glval) = VariableAddress[d2] : +# 1396| mu1396_2(copy_constructor) = Uninitialized[d2] : &:r1396_1 +# 1396| r1396_3(glval) = FunctionAddress[copy_constructor] : +# 1396| v1396_4(void) = Call[copy_constructor] : func:r1396_3, this:r1396_1 +# 1396| mu1396_5(unknown) = ^CallSideEffect : ~m? +# 1396| mu1396_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1396_1 +# 1397| r1397_1(glval) = FunctionAddress[acceptRef] : +# 1397| r1397_2(glval) = VariableAddress[d] : +# 1397| r1397_3(glval) = Convert : r1397_2 +# 1397| r1397_4(copy_constructor &) = CopyValue : r1397_3 +# 1397| v1397_5(void) = Call[acceptRef] : func:r1397_1, 0:r1397_4 +# 1397| mu1397_6(unknown) = ^CallSideEffect : ~m? +# 1397| v1397_7(void) = ^BufferReadSideEffect[0] : &:r1397_4, ~m? +# 1398| r1398_1(glval) = FunctionAddress[acceptValue] : +# 1398| r1398_2(glval) = VariableAddress[#temp1398:17] : +# 1398| mu1398_3(copy_constructor) = Uninitialized[#temp1398:17] : &:r1398_2 +# 1398| r1398_4(glval) = FunctionAddress[copy_constructor] : +# 1398| r1398_5(glval) = VariableAddress[d] : +# 1398| r1398_6(glval) = Convert : r1398_5 +# 1398| r1398_7(copy_constructor &) = CopyValue : r1398_6 +# 1398| v1398_8(void) = Call[copy_constructor] : func:r1398_4, this:r1398_2, 0:r1398_7 +# 1398| mu1398_9(unknown) = ^CallSideEffect : ~m? +# 1398| v1398_10(void) = ^BufferReadSideEffect[0] : &:r1398_7, ~m? +# 1398| mu1398_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1398_2 +# 1398| r1398_12(copy_constructor) = Load[#temp1398:17] : &:r1398_2, ~m? +# 1398| v1398_13(void) = Call[acceptValue] : func:r1398_1, 0:r1398_12 +# 1398| mu1398_14(unknown) = ^CallSideEffect : ~m? # 1399| r1399_1(glval) = VariableAddress[#temp1399:5] : -# 1399| r1399_2(glval) = FunctionAddress[defaultConstruct] : -# 1399| r1399_3(copy_constructor) = Call[defaultConstruct] : func:r1399_2 -# 1399| mu1399_4(unknown) = ^CallSideEffect : ~m? -# 1399| mu1399_5(copy_constructor) = Store[#temp1399:5] : &:r1399_1, r1399_3 -# 1401| r1401_1(glval) = VariableAddress[y] : -# 1401| r1401_2(glval) = VariableAddress[#temp1401:13] : -# 1401| r1401_3(glval) = FunctionAddress[returnValue] : -# 1401| r1401_4(copy_constructor) = Call[returnValue] : func:r1401_3 -# 1401| mu1401_5(unknown) = ^CallSideEffect : ~m? -# 1401| mu1401_6(copy_constructor) = Store[#temp1401:13] : &:r1401_2, r1401_4 -# 1401| r1401_7(glval) = FieldAddress[y] : r1401_2 -# 1401| r1401_8(int) = Load[?] : &:r1401_7, ~m? -# 1401| mu1401_9(int) = Store[y] : &:r1401_1, r1401_8 -# 1402| v1402_1(void) = NoOp : -# 1391| v1391_4(void) = ReturnVoid : -# 1391| v1391_5(void) = AliasedUse : ~m? -# 1391| v1391_6(void) = ExitFunction : +# 1399| mu1399_2(copy_constructor) = Uninitialized[#temp1399:5] : &:r1399_1 +# 1399| r1399_3(glval) = FunctionAddress[copy_constructor] : +# 1399| v1399_4(void) = Call[copy_constructor] : func:r1399_3, this:r1399_1 +# 1399| mu1399_5(unknown) = ^CallSideEffect : ~m? +# 1399| mu1399_6(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1399| r1399_7(glval) = FunctionAddress[method] : +# 1399| v1399_8(void) = Call[method] : func:r1399_7, this:r1399_1 +# 1399| mu1399_9(unknown) = ^CallSideEffect : ~m? +# 1399| v1399_10(void) = ^IndirectReadSideEffect[-1] : &:r1399_1, ~m? +# 1399| mu1399_11(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1399_1 +# 1400| r1400_1(glval) = VariableAddress[#temp1400:5] : +# 1400| r1400_2(glval) = FunctionAddress[returnValue] : +# 1400| r1400_3(copy_constructor) = Call[returnValue] : func:r1400_2 +# 1400| mu1400_4(unknown) = ^CallSideEffect : ~m? +# 1400| mu1400_5(copy_constructor) = Store[#temp1400:5] : &:r1400_1, r1400_3 +# 1400| r1400_6(glval) = FunctionAddress[method] : +# 1400| v1400_7(void) = Call[method] : func:r1400_6, this:r1400_1 +# 1400| mu1400_8(unknown) = ^CallSideEffect : ~m? +# 1400| v1400_9(void) = ^IndirectReadSideEffect[-1] : &:r1400_1, ~m? +# 1400| mu1400_10(copy_constructor) = ^IndirectMayWriteSideEffect[-1] : &:r1400_1 +# 1401| r1401_1(glval) = VariableAddress[#temp1401:5] : +# 1401| r1401_2(glval) = FunctionAddress[defaultConstruct] : +# 1401| r1401_3(copy_constructor) = Call[defaultConstruct] : func:r1401_2 +# 1401| mu1401_4(unknown) = ^CallSideEffect : ~m? +# 1401| mu1401_5(copy_constructor) = Store[#temp1401:5] : &:r1401_1, r1401_3 +# 1403| r1403_1(glval) = VariableAddress[y] : +# 1403| r1403_2(glval) = VariableAddress[#temp1403:13] : +# 1403| r1403_3(glval) = FunctionAddress[returnValue] : +# 1403| r1403_4(copy_constructor) = Call[returnValue] : func:r1403_3 +# 1403| mu1403_5(unknown) = ^CallSideEffect : ~m? +# 1403| mu1403_6(copy_constructor) = Store[#temp1403:13] : &:r1403_2, r1403_4 +# 1403| r1403_7(glval) = FieldAddress[y] : r1403_2 +# 1403| r1403_8(int) = Load[?] : &:r1403_7, ~m? +# 1403| mu1403_9(int) = Store[y] : &:r1403_1, r1403_8 +# 1404| v1404_1(void) = NoOp : +# 1393| v1393_4(void) = ReturnVoid : +# 1393| v1393_5(void) = AliasedUse : ~m? +# 1393| v1393_6(void) = ExitFunction : -# 1404| void temporary_point() -# 1404| Block 0 -# 1404| v1404_1(void) = EnterFunction : -# 1404| mu1404_2(unknown) = AliasedDefinition : -# 1404| mu1404_3(unknown) = InitializeNonLocal : -# 1405| r1405_1(glval) = VariableAddress[p] : -# 1405| r1405_2(glval) = FunctionAddress[returnValue] : -# 1405| r1405_3(Point) = Call[returnValue] : func:r1405_2 -# 1405| mu1405_4(unknown) = ^CallSideEffect : ~m? -# 1405| mu1405_5(Point) = Store[p] : &:r1405_1, r1405_3 -# 1406| r1406_1(glval) = VariableAddress[rp] : -# 1406| r1406_2(glval) = VariableAddress[#temp1406:23] : -# 1406| r1406_3(glval) = FunctionAddress[returnValue] : -# 1406| r1406_4(Point) = Call[returnValue] : func:r1406_3 -# 1406| mu1406_5(unknown) = ^CallSideEffect : ~m? -# 1406| mu1406_6(Point) = Store[#temp1406:23] : &:r1406_2, r1406_4 -# 1406| r1406_7(glval) = Convert : r1406_2 -# 1406| r1406_8(Point &) = CopyValue : r1406_7 -# 1406| mu1406_9(Point &) = Store[rp] : &:r1406_1, r1406_8 -# 1408| r1408_1(glval) = FunctionAddress[acceptRef] : -# 1408| r1408_2(glval) = VariableAddress[p] : -# 1408| r1408_3(glval) = Convert : r1408_2 -# 1408| r1408_4(Point &) = CopyValue : r1408_3 -# 1408| v1408_5(void) = Call[acceptRef] : func:r1408_1, 0:r1408_4 -# 1408| mu1408_6(unknown) = ^CallSideEffect : ~m? -# 1408| v1408_7(void) = ^BufferReadSideEffect[0] : &:r1408_4, ~m? -# 1409| r1409_1(glval) = FunctionAddress[acceptValue] : -# 1409| r1409_2(glval) = VariableAddress[p] : -# 1409| r1409_3(Point) = Load[p] : &:r1409_2, ~m? -# 1409| v1409_4(void) = Call[acceptValue] : func:r1409_1, 0:r1409_3 -# 1409| mu1409_5(unknown) = ^CallSideEffect : ~m? -# 1410| r1410_1(int) = Constant[0] : -# 1411| r1411_1(glval) = VariableAddress[y] : -# 1411| r1411_2(glval) = FunctionAddress[returnValue] : -# 1411| r1411_3(Point) = Call[returnValue] : func:r1411_2 -# 1411| mu1411_4(unknown) = ^CallSideEffect : ~m? -# 1411| r1411_5(glval) = VariableAddress[#temp1411:13] : -# 1411| mu1411_6(Point) = Store[#temp1411:13] : &:r1411_5, r1411_3 -# 1411| r1411_7(glval) = FieldAddress[y] : r1411_5 -# 1411| r1411_8(int) = Load[?] : &:r1411_7, ~m? -# 1411| mu1411_9(int) = Store[y] : &:r1411_1, r1411_8 -# 1413| r1413_1(glval) = FunctionAddress[defaultConstruct] : -# 1413| r1413_2(Point) = Call[defaultConstruct] : func:r1413_1 -# 1413| mu1413_3(unknown) = ^CallSideEffect : ~m? -# 1414| v1414_1(void) = NoOp : -# 1404| v1404_4(void) = ReturnVoid : -# 1404| v1404_5(void) = AliasedUse : ~m? -# 1404| v1404_6(void) = ExitFunction : +# 1406| void temporary_point() +# 1406| Block 0 +# 1406| v1406_1(void) = EnterFunction : +# 1406| mu1406_2(unknown) = AliasedDefinition : +# 1406| mu1406_3(unknown) = InitializeNonLocal : +# 1407| r1407_1(glval) = VariableAddress[p] : +# 1407| r1407_2(glval) = FunctionAddress[returnValue] : +# 1407| r1407_3(Point) = Call[returnValue] : func:r1407_2 +# 1407| mu1407_4(unknown) = ^CallSideEffect : ~m? +# 1407| mu1407_5(Point) = Store[p] : &:r1407_1, r1407_3 +# 1408| r1408_1(glval) = VariableAddress[rp] : +# 1408| r1408_2(glval) = VariableAddress[#temp1408:23] : +# 1408| r1408_3(glval) = FunctionAddress[returnValue] : +# 1408| r1408_4(Point) = Call[returnValue] : func:r1408_3 +# 1408| mu1408_5(unknown) = ^CallSideEffect : ~m? +# 1408| mu1408_6(Point) = Store[#temp1408:23] : &:r1408_2, r1408_4 +# 1408| r1408_7(glval) = Convert : r1408_2 +# 1408| r1408_8(Point &) = CopyValue : r1408_7 +# 1408| mu1408_9(Point &) = Store[rp] : &:r1408_1, r1408_8 +# 1410| r1410_1(glval) = FunctionAddress[acceptRef] : +# 1410| r1410_2(glval) = VariableAddress[p] : +# 1410| r1410_3(glval) = Convert : r1410_2 +# 1410| r1410_4(Point &) = CopyValue : r1410_3 +# 1410| v1410_5(void) = Call[acceptRef] : func:r1410_1, 0:r1410_4 +# 1410| mu1410_6(unknown) = ^CallSideEffect : ~m? +# 1410| v1410_7(void) = ^BufferReadSideEffect[0] : &:r1410_4, ~m? +# 1411| r1411_1(glval) = FunctionAddress[acceptValue] : +# 1411| r1411_2(glval) = VariableAddress[p] : +# 1411| r1411_3(Point) = Load[p] : &:r1411_2, ~m? +# 1411| v1411_4(void) = Call[acceptValue] : func:r1411_1, 0:r1411_3 +# 1411| mu1411_5(unknown) = ^CallSideEffect : ~m? +# 1412| r1412_1(int) = Constant[0] : +# 1413| r1413_1(glval) = VariableAddress[y] : +# 1413| r1413_2(glval) = FunctionAddress[returnValue] : +# 1413| r1413_3(Point) = Call[returnValue] : func:r1413_2 +# 1413| mu1413_4(unknown) = ^CallSideEffect : ~m? +# 1413| r1413_5(glval) = VariableAddress[#temp1413:13] : +# 1413| mu1413_6(Point) = Store[#temp1413:13] : &:r1413_5, r1413_3 +# 1413| r1413_7(glval) = FieldAddress[y] : r1413_5 +# 1413| r1413_8(int) = Load[?] : &:r1413_7, ~m? +# 1413| mu1413_9(int) = Store[y] : &:r1413_1, r1413_8 +# 1415| r1415_1(glval) = FunctionAddress[defaultConstruct] : +# 1415| r1415_2(Point) = Call[defaultConstruct] : func:r1415_1 +# 1415| mu1415_3(unknown) = ^CallSideEffect : ~m? +# 1416| v1416_1(void) = NoOp : +# 1406| v1406_4(void) = ReturnVoid : +# 1406| v1406_5(void) = AliasedUse : ~m? +# 1406| v1406_6(void) = ExitFunction : -# 1421| void temporary_unusual_fields() -# 1421| Block 0 -# 1421| v1421_1(void) = EnterFunction : -# 1421| mu1421_2(unknown) = AliasedDefinition : -# 1421| mu1421_3(unknown) = InitializeNonLocal : -# 1422| r1422_1(glval) = VariableAddress[rx] : -# 1422| r1422_2(glval) = FunctionAddress[returnValue] : -# 1422| r1422_3(UnusualFields) = Call[returnValue] : func:r1422_2 -# 1422| mu1422_4(unknown) = ^CallSideEffect : ~m? -# 1422| r1422_5(glval) = VariableAddress[#temp1422:21] : -# 1422| mu1422_6(UnusualFields) = Store[#temp1422:21] : &:r1422_5, r1422_3 -# 1422| r1422_7(glval) = FieldAddress[r] : r1422_5 -# 1422| r1422_8(int &) = Load[?] : &:r1422_7, ~m? -# 1422| r1422_9(glval) = CopyValue : r1422_8 -# 1422| r1422_10(glval) = Convert : r1422_9 -# 1422| r1422_11(int &) = CopyValue : r1422_10 -# 1422| mu1422_12(int &) = Store[rx] : &:r1422_1, r1422_11 -# 1423| r1423_1(glval) = VariableAddress[x] : -# 1423| r1423_2(glval) = FunctionAddress[returnValue] : -# 1423| r1423_3(UnusualFields) = Call[returnValue] : func:r1423_2 -# 1423| mu1423_4(unknown) = ^CallSideEffect : ~m? -# 1423| r1423_5(glval) = VariableAddress[#temp1423:13] : -# 1423| mu1423_6(UnusualFields) = Store[#temp1423:13] : &:r1423_5, r1423_3 -# 1423| r1423_7(glval) = FieldAddress[r] : r1423_5 -# 1423| r1423_8(int &) = Load[?] : &:r1423_7, ~m? -# 1423| r1423_9(int) = Load[?] : &:r1423_8, ~m? -# 1423| mu1423_10(int) = Store[x] : &:r1423_1, r1423_9 -# 1425| r1425_1(glval) = VariableAddress[rf] : +# 1423| void temporary_unusual_fields() +# 1423| Block 0 +# 1423| v1423_1(void) = EnterFunction : +# 1423| mu1423_2(unknown) = AliasedDefinition : +# 1423| mu1423_3(unknown) = InitializeNonLocal : +# 1424| r1424_1(glval) = VariableAddress[rx] : +# 1424| r1424_2(glval) = FunctionAddress[returnValue] : +# 1424| r1424_3(UnusualFields) = Call[returnValue] : func:r1424_2 +# 1424| mu1424_4(unknown) = ^CallSideEffect : ~m? +# 1424| r1424_5(glval) = VariableAddress[#temp1424:21] : +# 1424| mu1424_6(UnusualFields) = Store[#temp1424:21] : &:r1424_5, r1424_3 +# 1424| r1424_7(glval) = FieldAddress[r] : r1424_5 +# 1424| r1424_8(int &) = Load[?] : &:r1424_7, ~m? +# 1424| r1424_9(glval) = CopyValue : r1424_8 +# 1424| r1424_10(glval) = Convert : r1424_9 +# 1424| r1424_11(int &) = CopyValue : r1424_10 +# 1424| mu1424_12(int &) = Store[rx] : &:r1424_1, r1424_11 +# 1425| r1425_1(glval) = VariableAddress[x] : # 1425| r1425_2(glval) = FunctionAddress[returnValue] : # 1425| r1425_3(UnusualFields) = Call[returnValue] : func:r1425_2 # 1425| mu1425_4(unknown) = ^CallSideEffect : ~m? -# 1425| r1425_5(glval) = VariableAddress[#temp1425:23] : -# 1425| mu1425_6(UnusualFields) = Store[#temp1425:23] : &:r1425_5, r1425_3 -# 1425| r1425_7(glval) = FieldAddress[a] : r1425_5 -# 1425| r1425_8(float *) = Convert : r1425_7 -# 1425| r1425_9(int) = Constant[3] : -# 1425| r1425_10(glval) = PointerAdd[4] : r1425_8, r1425_9 -# 1425| r1425_11(glval) = Convert : r1425_10 -# 1425| r1425_12(float &) = CopyValue : r1425_11 -# 1425| mu1425_13(float &) = Store[rf] : &:r1425_1, r1425_12 -# 1426| r1426_1(glval) = VariableAddress[f] : -# 1426| r1426_2(glval) = FunctionAddress[returnValue] : -# 1426| r1426_3(UnusualFields) = Call[returnValue] : func:r1426_2 -# 1426| mu1426_4(unknown) = ^CallSideEffect : ~m? -# 1426| r1426_5(glval) = VariableAddress[#temp1426:15] : -# 1426| mu1426_6(UnusualFields) = Store[#temp1426:15] : &:r1426_5, r1426_3 -# 1426| r1426_7(glval) = FieldAddress[a] : r1426_5 -# 1426| r1426_8(float *) = Convert : r1426_7 -# 1426| r1426_9(int) = Constant[5] : -# 1426| r1426_10(glval) = PointerAdd[4] : r1426_8, r1426_9 -# 1426| r1426_11(float) = Load[?] : &:r1426_10, ~m? -# 1426| mu1426_12(float) = Store[f] : &:r1426_1, r1426_11 -# 1427| v1427_1(void) = NoOp : -# 1421| v1421_4(void) = ReturnVoid : -# 1421| v1421_5(void) = AliasedUse : ~m? -# 1421| v1421_6(void) = ExitFunction : +# 1425| r1425_5(glval) = VariableAddress[#temp1425:13] : +# 1425| mu1425_6(UnusualFields) = Store[#temp1425:13] : &:r1425_5, r1425_3 +# 1425| r1425_7(glval) = FieldAddress[r] : r1425_5 +# 1425| r1425_8(int &) = Load[?] : &:r1425_7, ~m? +# 1425| r1425_9(int) = Load[?] : &:r1425_8, ~m? +# 1425| mu1425_10(int) = Store[x] : &:r1425_1, r1425_9 +# 1427| r1427_1(glval) = VariableAddress[rf] : +# 1427| r1427_2(glval) = FunctionAddress[returnValue] : +# 1427| r1427_3(UnusualFields) = Call[returnValue] : func:r1427_2 +# 1427| mu1427_4(unknown) = ^CallSideEffect : ~m? +# 1427| r1427_5(glval) = VariableAddress[#temp1427:23] : +# 1427| mu1427_6(UnusualFields) = Store[#temp1427:23] : &:r1427_5, r1427_3 +# 1427| r1427_7(glval) = FieldAddress[a] : r1427_5 +# 1427| r1427_8(float *) = Convert : r1427_7 +# 1427| r1427_9(int) = Constant[3] : +# 1427| r1427_10(glval) = PointerAdd[4] : r1427_8, r1427_9 +# 1427| r1427_11(glval) = Convert : r1427_10 +# 1427| r1427_12(float &) = CopyValue : r1427_11 +# 1427| mu1427_13(float &) = Store[rf] : &:r1427_1, r1427_12 +# 1428| r1428_1(glval) = VariableAddress[f] : +# 1428| r1428_2(glval) = FunctionAddress[returnValue] : +# 1428| r1428_3(UnusualFields) = Call[returnValue] : func:r1428_2 +# 1428| mu1428_4(unknown) = ^CallSideEffect : ~m? +# 1428| r1428_5(glval) = VariableAddress[#temp1428:15] : +# 1428| mu1428_6(UnusualFields) = Store[#temp1428:15] : &:r1428_5, r1428_3 +# 1428| r1428_7(glval) = FieldAddress[a] : r1428_5 +# 1428| r1428_8(float *) = Convert : r1428_7 +# 1428| r1428_9(int) = Constant[5] : +# 1428| r1428_10(glval) = PointerAdd[4] : r1428_8, r1428_9 +# 1428| r1428_11(float) = Load[?] : &:r1428_10, ~m? +# 1428| mu1428_12(float) = Store[f] : &:r1428_1, r1428_11 +# 1429| v1429_1(void) = NoOp : +# 1423| v1423_4(void) = ReturnVoid : +# 1423| v1423_5(void) = AliasedUse : ~m? +# 1423| v1423_6(void) = ExitFunction : -# 1443| void temporary_hierarchy() -# 1443| Block 0 -# 1443| v1443_1(void) = EnterFunction : -# 1443| mu1443_2(unknown) = AliasedDefinition : -# 1443| mu1443_3(unknown) = InitializeNonLocal : -# 1444| r1444_1(glval) = VariableAddress[b] : +# 1445| void temporary_hierarchy() +# 1445| Block 0 +# 1445| v1445_1(void) = EnterFunction : +# 1445| mu1445_2(unknown) = AliasedDefinition : +# 1445| mu1445_3(unknown) = InitializeNonLocal : +# 1446| r1446_1(glval) = VariableAddress[b] : #-----| r0_1(glval) = VariableAddress[#temp0:0] : -# 1444| r1444_2(glval) = FunctionAddress[returnValue] : -# 1444| r1444_3(POD_Middle) = Call[returnValue] : func:r1444_2 -# 1444| mu1444_4(unknown) = ^CallSideEffect : ~m? -# 1444| mu1444_5(POD_Middle) = Store[#temp0:0] : &:r0_1, r1444_3 +# 1446| r1446_2(glval) = FunctionAddress[returnValue] : +# 1446| r1446_3(POD_Middle) = Call[returnValue] : func:r1446_2 +# 1446| mu1446_4(unknown) = ^CallSideEffect : ~m? +# 1446| mu1446_5(POD_Middle) = Store[#temp0:0] : &:r0_1, r1446_3 #-----| r0_2(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_1 #-----| r0_3(POD_Base) = Load[?] : &:r0_2, ~m? -#-----| mu0_4(POD_Base) = Store[b] : &:r1444_1, r0_3 -# 1445| r1445_1(glval) = VariableAddress[#temp1445:9] : -# 1445| r1445_2(glval) = FunctionAddress[returnValue] : -# 1445| r1445_3(POD_Derived) = Call[returnValue] : func:r1445_2 -# 1445| mu1445_4(unknown) = ^CallSideEffect : ~m? -# 1445| mu1445_5(POD_Derived) = Store[#temp1445:9] : &:r1445_1, r1445_3 -# 1445| r1445_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1445_1 -# 1445| r1445_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1445_6 -# 1445| r1445_8(POD_Base) = Load[?] : &:r1445_7, ~m? -# 1445| r1445_9(glval) = VariableAddress[b] : -# 1445| mu1445_10(POD_Base) = Store[b] : &:r1445_9, r1445_8 -# 1446| r1446_1(glval) = VariableAddress[x] : -#-----| r0_5(glval) = VariableAddress[#temp0:0] : -# 1446| r1446_2(glval) = FunctionAddress[returnValue] : -# 1446| r1446_3(POD_Derived) = Call[returnValue] : func:r1446_2 -# 1446| mu1446_4(unknown) = ^CallSideEffect : ~m? -# 1446| mu1446_5(POD_Derived) = Store[#temp0:0] : &:r0_5, r1446_3 -#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 -#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 -# 1446| r1446_6(glval) = FieldAddress[x] : r0_7 -# 1446| r1446_7(int) = Load[?] : &:r1446_6, ~m? -# 1446| mu1446_8(int) = Store[x] : &:r1446_1, r1446_7 -# 1447| r1447_1(glval) = VariableAddress[f] : -#-----| r0_8(glval) = VariableAddress[#temp0:0] : +#-----| mu0_4(POD_Base) = Store[b] : &:r1446_1, r0_3 +# 1447| r1447_1(glval) = VariableAddress[#temp1447:9] : # 1447| r1447_2(glval) = FunctionAddress[returnValue] : # 1447| r1447_3(POD_Derived) = Call[returnValue] : func:r1447_2 # 1447| mu1447_4(unknown) = ^CallSideEffect : ~m? -# 1447| mu1447_5(POD_Derived) = Store[#temp0:0] : &:r0_8, r1447_3 +# 1447| mu1447_5(POD_Derived) = Store[#temp1447:9] : &:r1447_1, r1447_3 +# 1447| r1447_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r1447_1 +# 1447| r1447_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r1447_6 +# 1447| r1447_8(POD_Base) = Load[?] : &:r1447_7, ~m? +# 1447| r1447_9(glval) = VariableAddress[b] : +# 1447| mu1447_10(POD_Base) = Store[b] : &:r1447_9, r1447_8 +# 1448| r1448_1(glval) = VariableAddress[x] : +#-----| r0_5(glval) = VariableAddress[#temp0:0] : +# 1448| r1448_2(glval) = FunctionAddress[returnValue] : +# 1448| r1448_3(POD_Derived) = Call[returnValue] : func:r1448_2 +# 1448| mu1448_4(unknown) = ^CallSideEffect : ~m? +# 1448| mu1448_5(POD_Derived) = Store[#temp0:0] : &:r0_5, r1448_3 +#-----| r0_6(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_5 +#-----| r0_7(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_6 +# 1448| r1448_6(glval) = FieldAddress[x] : r0_7 +# 1448| r1448_7(int) = Load[?] : &:r1448_6, ~m? +# 1448| mu1448_8(int) = Store[x] : &:r1448_1, r1448_7 +# 1449| r1449_1(glval) = VariableAddress[f] : +#-----| r0_8(glval) = VariableAddress[#temp0:0] : +# 1449| r1449_2(glval) = FunctionAddress[returnValue] : +# 1449| r1449_3(POD_Derived) = Call[returnValue] : func:r1449_2 +# 1449| mu1449_4(unknown) = ^CallSideEffect : ~m? +# 1449| mu1449_5(POD_Derived) = Store[#temp0:0] : &:r0_8, r1449_3 #-----| r0_9(glval) = ConvertToNonVirtualBase[POD_Derived : POD_Middle] : r0_8 #-----| r0_10(glval) = ConvertToNonVirtualBase[POD_Middle : POD_Base] : r0_9 #-----| r0_11(glval) = Convert : r0_10 -# 1447| r1447_6(glval) = FunctionAddress[f] : -# 1447| r1447_7(float) = Call[f] : func:r1447_6, this:r0_11 -# 1447| mu1447_8(unknown) = ^CallSideEffect : ~m? +# 1449| r1449_6(glval) = FunctionAddress[f] : +# 1449| r1449_7(float) = Call[f] : func:r1449_6, this:r0_11 +# 1449| mu1449_8(unknown) = ^CallSideEffect : ~m? #-----| v0_12(void) = ^IndirectReadSideEffect[-1] : &:r0_11, ~m? -# 1447| mu1447_9(float) = Store[f] : &:r1447_1, r1447_7 -# 1448| v1448_1(void) = NoOp : -# 1443| v1443_4(void) = ReturnVoid : -# 1443| v1443_5(void) = AliasedUse : ~m? -# 1443| v1443_6(void) = ExitFunction : +# 1449| mu1449_9(float) = Store[f] : &:r1449_1, r1449_7 +# 1450| v1450_1(void) = NoOp : +# 1445| v1445_4(void) = ReturnVoid : +# 1445| v1445_5(void) = AliasedUse : ~m? +# 1445| v1445_6(void) = ExitFunction : -# 1451| void Inheritance_Test_B::~Inheritance_Test_B() -# 1451| Block 0 -# 1451| v1451_1(void) = EnterFunction : -# 1451| mu1451_2(unknown) = AliasedDefinition : -# 1451| mu1451_3(unknown) = InitializeNonLocal : -# 1451| r1451_4(glval) = VariableAddress[#this] : -# 1451| mu1451_5(glval) = InitializeParameter[#this] : &:r1451_4 -# 1451| r1451_6(glval) = Load[#this] : &:r1451_4, ~m? -# 1451| mu1451_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1451_6 -# 1451| v1451_8(void) = NoOp : -# 1451| v1451_9(void) = ReturnIndirection[#this] : &:r1451_6, ~m? -# 1451| v1451_10(void) = ReturnVoid : -# 1451| v1451_11(void) = AliasedUse : ~m? -# 1451| v1451_12(void) = ExitFunction : +# 1453| void Inheritance_Test_B::~Inheritance_Test_B() +# 1453| Block 0 +# 1453| v1453_1(void) = EnterFunction : +# 1453| mu1453_2(unknown) = AliasedDefinition : +# 1453| mu1453_3(unknown) = InitializeNonLocal : +# 1453| r1453_4(glval) = VariableAddress[#this] : +# 1453| mu1453_5(glval) = InitializeParameter[#this] : &:r1453_4 +# 1453| r1453_6(glval) = Load[#this] : &:r1453_4, ~m? +# 1453| mu1453_7(Inheritance_Test_B) = InitializeIndirection[#this] : &:r1453_6 +# 1453| v1453_8(void) = NoOp : +# 1453| v1453_9(void) = ReturnIndirection[#this] : &:r1453_6, ~m? +# 1453| v1453_10(void) = ReturnVoid : +# 1453| v1453_11(void) = AliasedUse : ~m? +# 1453| v1453_12(void) = ExitFunction : -# 1457| void Inheritance_Test_A::Inheritance_Test_A() -# 1457| Block 0 -# 1457| v1457_1(void) = EnterFunction : -# 1457| mu1457_2(unknown) = AliasedDefinition : -# 1457| mu1457_3(unknown) = InitializeNonLocal : -# 1457| r1457_4(glval) = VariableAddress[#this] : -# 1457| mu1457_5(glval) = InitializeParameter[#this] : &:r1457_4 -# 1457| r1457_6(glval) = Load[#this] : &:r1457_4, ~m? -# 1457| mu1457_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1457_6 -# 1457| r1457_8(glval) = FieldAddress[x] : mu1457_5 -# 1457| r1457_9(int) = Constant[42] : -# 1457| mu1457_10(int) = Store[?] : &:r1457_8, r1457_9 -# 1458| r1458_1(int) = Constant[3] : -# 1458| r1458_2(glval) = VariableAddress[#this] : -# 1458| r1458_3(Inheritance_Test_A *) = Load[#this] : &:r1458_2, ~m? -# 1458| r1458_4(glval) = FieldAddress[y] : r1458_3 -# 1458| mu1458_5(int) = Store[?] : &:r1458_4, r1458_1 -# 1459| v1459_1(void) = NoOp : -# 1457| v1457_11(void) = ReturnIndirection[#this] : &:r1457_6, ~m? -# 1457| v1457_12(void) = ReturnVoid : -# 1457| v1457_13(void) = AliasedUse : ~m? -# 1457| v1457_14(void) = ExitFunction : +# 1459| void Inheritance_Test_A::Inheritance_Test_A() +# 1459| Block 0 +# 1459| v1459_1(void) = EnterFunction : +# 1459| mu1459_2(unknown) = AliasedDefinition : +# 1459| mu1459_3(unknown) = InitializeNonLocal : +# 1459| r1459_4(glval) = VariableAddress[#this] : +# 1459| mu1459_5(glval) = InitializeParameter[#this] : &:r1459_4 +# 1459| r1459_6(glval) = Load[#this] : &:r1459_4, ~m? +# 1459| mu1459_7(Inheritance_Test_A) = InitializeIndirection[#this] : &:r1459_6 +# 1459| r1459_8(glval) = FieldAddress[x] : mu1459_5 +# 1459| r1459_9(int) = Constant[42] : +# 1459| mu1459_10(int) = Store[?] : &:r1459_8, r1459_9 +# 1460| r1460_1(int) = Constant[3] : +# 1460| r1460_2(glval) = VariableAddress[#this] : +# 1460| r1460_3(Inheritance_Test_A *) = Load[#this] : &:r1460_2, ~m? +# 1460| r1460_4(glval) = FieldAddress[y] : r1460_3 +# 1460| mu1460_5(int) = Store[?] : &:r1460_4, r1460_1 +# 1461| v1461_1(void) = NoOp : +# 1459| v1459_11(void) = ReturnIndirection[#this] : &:r1459_6, ~m? +# 1459| v1459_12(void) = ReturnVoid : +# 1459| v1459_13(void) = AliasedUse : ~m? +# 1459| v1459_14(void) = ExitFunction : -# 1462| void array_structured_binding() -# 1462| Block 0 -# 1462| v1462_1(void) = EnterFunction : -# 1462| mu1462_2(unknown) = AliasedDefinition : -# 1462| mu1462_3(unknown) = InitializeNonLocal : -# 1463| r1463_1(glval) = VariableAddress[xs] : -# 1463| mu1463_2(int[2]) = Uninitialized[xs] : &:r1463_1 -# 1463| r1463_3(int) = Constant[0] : -# 1463| r1463_4(glval) = PointerAdd[4] : r1463_1, r1463_3 -# 1463| r1463_5(int) = Constant[1] : -# 1463| mu1463_6(int) = Store[?] : &:r1463_4, r1463_5 -# 1463| r1463_7(int) = Constant[1] : -# 1463| r1463_8(glval) = PointerAdd[4] : r1463_1, r1463_7 -# 1463| r1463_9(int) = Constant[2] : -# 1463| mu1463_10(int) = Store[?] : &:r1463_8, r1463_9 -# 1466| r1466_1(glval) = VariableAddress[(unnamed local variable)] : -# 1466| r1466_2(glval) = VariableAddress[xs] : -# 1466| r1466_3(int(&)[2]) = CopyValue : r1466_2 -# 1466| mu1466_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1466_1, r1466_3 -# 1466| r1466_5(glval) = VariableAddress[x0] : +# 1464| void array_structured_binding() +# 1464| Block 0 +# 1464| v1464_1(void) = EnterFunction : +# 1464| mu1464_2(unknown) = AliasedDefinition : +# 1464| mu1464_3(unknown) = InitializeNonLocal : +# 1465| r1465_1(glval) = VariableAddress[xs] : +# 1465| mu1465_2(int[2]) = Uninitialized[xs] : &:r1465_1 +# 1465| r1465_3(int) = Constant[0] : +# 1465| r1465_4(glval) = PointerAdd[4] : r1465_1, r1465_3 +# 1465| r1465_5(int) = Constant[1] : +# 1465| mu1465_6(int) = Store[?] : &:r1465_4, r1465_5 +# 1465| r1465_7(int) = Constant[1] : +# 1465| r1465_8(glval) = PointerAdd[4] : r1465_1, r1465_7 +# 1465| r1465_9(int) = Constant[2] : +# 1465| mu1465_10(int) = Store[?] : &:r1465_8, r1465_9 +# 1468| r1468_1(glval) = VariableAddress[(unnamed local variable)] : +# 1468| r1468_2(glval) = VariableAddress[xs] : +# 1468| r1468_3(int(&)[2]) = CopyValue : r1468_2 +# 1468| mu1468_4(int(&)[2]) = Store[(unnamed local variable)] : &:r1468_1, r1468_3 +# 1468| r1468_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int(&)[2]) = Load[(unnamed local variable)] : &:r0_1, ~m? #-----| r0_3(glval) = CopyValue : r0_2 #-----| r0_4(int *) = Convert : r0_3 #-----| r0_5(unsigned long) = Constant[0] : #-----| r0_6(glval) = PointerAdd[4] : r0_4, r0_5 -#-----| mu0_7(int &) = Store[x0] : &:r1466_5, r0_6 -# 1466| r1466_6(glval) = VariableAddress[x1] : +#-----| mu0_7(int &) = Store[x0] : &:r1468_5, r0_6 +# 1468| r1468_6(glval) = VariableAddress[x1] : #-----| r0_8(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_9(int(&)[2]) = Load[(unnamed local variable)] : &:r0_8, ~m? #-----| r0_10(glval) = CopyValue : r0_9 #-----| r0_11(int *) = Convert : r0_10 #-----| r0_12(unsigned long) = Constant[1] : #-----| r0_13(glval) = PointerAdd[4] : r0_11, r0_12 -#-----| mu0_14(int &) = Store[x1] : &:r1466_6, r0_13 -# 1467| r1467_1(int) = Constant[3] : -# 1467| r1467_2(glval) = VariableAddress[x1] : -# 1467| r1467_3(int &) = Load[x1] : &:r1467_2, ~m? -# 1467| mu1467_4(int) = Store[?] : &:r1467_3, r1467_1 -# 1468| r1468_1(glval) = VariableAddress[rx1] : -# 1468| r1468_2(glval) = VariableAddress[x1] : -# 1468| r1468_3(int &) = Load[x1] : &:r1468_2, ~m? -# 1468| r1468_4(int &) = CopyValue : r1468_3 -# 1468| mu1468_5(int &) = Store[rx1] : &:r1468_1, r1468_4 -# 1469| r1469_1(glval) = VariableAddress[x] : +#-----| mu0_14(int &) = Store[x1] : &:r1468_6, r0_13 +# 1469| r1469_1(int) = Constant[3] : # 1469| r1469_2(glval) = VariableAddress[x1] : # 1469| r1469_3(int &) = Load[x1] : &:r1469_2, ~m? -# 1469| r1469_4(int) = Load[?] : &:r1469_3, ~m? -# 1469| mu1469_5(int) = Store[x] : &:r1469_1, r1469_4 -# 1473| r1473_1(glval) = VariableAddress[unnamed_local_variable] : -# 1473| r1473_2(glval) = VariableAddress[xs] : -# 1473| r1473_3(int(&)[2]) = CopyValue : r1473_2 -# 1473| mu1473_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1473_1, r1473_3 -# 1474| r1474_1(glval) = VariableAddress[x0] : -# 1474| r1474_2(glval) = VariableAddress[unnamed_local_variable] : -# 1474| r1474_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1474_2, ~m? -# 1474| r1474_4(glval) = CopyValue : r1474_3 -# 1474| r1474_5(int *) = Convert : r1474_4 -# 1474| r1474_6(int) = Constant[0] : -# 1474| r1474_7(glval) = PointerAdd[4] : r1474_5, r1474_6 -# 1474| r1474_8(int &) = CopyValue : r1474_7 -# 1474| mu1474_9(int &) = Store[x0] : &:r1474_1, r1474_8 -# 1475| r1475_1(glval) = VariableAddress[x1] : -# 1475| r1475_2(glval) = VariableAddress[unnamed_local_variable] : -# 1475| r1475_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1475_2, ~m? -# 1475| r1475_4(glval) = CopyValue : r1475_3 -# 1475| r1475_5(int *) = Convert : r1475_4 -# 1475| r1475_6(int) = Constant[1] : -# 1475| r1475_7(glval) = PointerAdd[4] : r1475_5, r1475_6 -# 1475| r1475_8(int &) = CopyValue : r1475_7 -# 1475| mu1475_9(int &) = Store[x1] : &:r1475_1, r1475_8 -# 1476| r1476_1(int) = Constant[3] : -# 1476| r1476_2(glval) = VariableAddress[x1] : -# 1476| r1476_3(int &) = Load[x1] : &:r1476_2, ~m? -# 1476| r1476_4(glval) = CopyValue : r1476_3 -# 1476| mu1476_5(int) = Store[?] : &:r1476_4, r1476_1 -# 1477| r1477_1(glval) = VariableAddress[rx1] : -# 1477| r1477_2(glval) = VariableAddress[x1] : -# 1477| r1477_3(int &) = Load[x1] : &:r1477_2, ~m? -# 1477| r1477_4(glval) = CopyValue : r1477_3 -# 1477| r1477_5(int &) = CopyValue : r1477_4 -# 1477| mu1477_6(int &) = Store[rx1] : &:r1477_1, r1477_5 -# 1478| r1478_1(glval) = VariableAddress[x] : +# 1469| mu1469_4(int) = Store[?] : &:r1469_3, r1469_1 +# 1470| r1470_1(glval) = VariableAddress[rx1] : +# 1470| r1470_2(glval) = VariableAddress[x1] : +# 1470| r1470_3(int &) = Load[x1] : &:r1470_2, ~m? +# 1470| r1470_4(int &) = CopyValue : r1470_3 +# 1470| mu1470_5(int &) = Store[rx1] : &:r1470_1, r1470_4 +# 1471| r1471_1(glval) = VariableAddress[x] : +# 1471| r1471_2(glval) = VariableAddress[x1] : +# 1471| r1471_3(int &) = Load[x1] : &:r1471_2, ~m? +# 1471| r1471_4(int) = Load[?] : &:r1471_3, ~m? +# 1471| mu1471_5(int) = Store[x] : &:r1471_1, r1471_4 +# 1475| r1475_1(glval) = VariableAddress[unnamed_local_variable] : +# 1475| r1475_2(glval) = VariableAddress[xs] : +# 1475| r1475_3(int(&)[2]) = CopyValue : r1475_2 +# 1475| mu1475_4(int(&)[2]) = Store[unnamed_local_variable] : &:r1475_1, r1475_3 +# 1476| r1476_1(glval) = VariableAddress[x0] : +# 1476| r1476_2(glval) = VariableAddress[unnamed_local_variable] : +# 1476| r1476_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1476_2, ~m? +# 1476| r1476_4(glval) = CopyValue : r1476_3 +# 1476| r1476_5(int *) = Convert : r1476_4 +# 1476| r1476_6(int) = Constant[0] : +# 1476| r1476_7(glval) = PointerAdd[4] : r1476_5, r1476_6 +# 1476| r1476_8(int &) = CopyValue : r1476_7 +# 1476| mu1476_9(int &) = Store[x0] : &:r1476_1, r1476_8 +# 1477| r1477_1(glval) = VariableAddress[x1] : +# 1477| r1477_2(glval) = VariableAddress[unnamed_local_variable] : +# 1477| r1477_3(int(&)[2]) = Load[unnamed_local_variable] : &:r1477_2, ~m? +# 1477| r1477_4(glval) = CopyValue : r1477_3 +# 1477| r1477_5(int *) = Convert : r1477_4 +# 1477| r1477_6(int) = Constant[1] : +# 1477| r1477_7(glval) = PointerAdd[4] : r1477_5, r1477_6 +# 1477| r1477_8(int &) = CopyValue : r1477_7 +# 1477| mu1477_9(int &) = Store[x1] : &:r1477_1, r1477_8 +# 1478| r1478_1(int) = Constant[3] : # 1478| r1478_2(glval) = VariableAddress[x1] : # 1478| r1478_3(int &) = Load[x1] : &:r1478_2, ~m? -# 1478| r1478_4(int) = Load[?] : &:r1478_3, ~m? -# 1478| mu1478_5(int) = Store[x] : &:r1478_1, r1478_4 -# 1480| v1480_1(void) = NoOp : -# 1462| v1462_4(void) = ReturnVoid : -# 1462| v1462_5(void) = AliasedUse : ~m? -# 1462| v1462_6(void) = ExitFunction : +# 1478| r1478_4(glval) = CopyValue : r1478_3 +# 1478| mu1478_5(int) = Store[?] : &:r1478_4, r1478_1 +# 1479| r1479_1(glval) = VariableAddress[rx1] : +# 1479| r1479_2(glval) = VariableAddress[x1] : +# 1479| r1479_3(int &) = Load[x1] : &:r1479_2, ~m? +# 1479| r1479_4(glval) = CopyValue : r1479_3 +# 1479| r1479_5(int &) = CopyValue : r1479_4 +# 1479| mu1479_6(int &) = Store[rx1] : &:r1479_1, r1479_5 +# 1480| r1480_1(glval) = VariableAddress[x] : +# 1480| r1480_2(glval) = VariableAddress[x1] : +# 1480| r1480_3(int &) = Load[x1] : &:r1480_2, ~m? +# 1480| r1480_4(int) = Load[?] : &:r1480_3, ~m? +# 1480| mu1480_5(int) = Store[x] : &:r1480_1, r1480_4 +# 1482| v1482_1(void) = NoOp : +# 1464| v1464_4(void) = ReturnVoid : +# 1464| v1464_5(void) = AliasedUse : ~m? +# 1464| v1464_6(void) = ExitFunction : -# 1482| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() -# 1482| Block 0 -# 1482| v1482_1(void) = EnterFunction : -# 1482| mu1482_2(unknown) = AliasedDefinition : -# 1482| mu1482_3(unknown) = InitializeNonLocal : -# 1482| r1482_4(glval) = VariableAddress[#this] : -# 1482| mu1482_5(glval) = InitializeParameter[#this] : &:r1482_4 -# 1482| r1482_6(glval) = Load[#this] : &:r1482_4, ~m? -# 1482| mu1482_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1482_6 -# 1482| v1482_8(void) = NoOp : -# 1482| v1482_9(void) = ReturnIndirection[#this] : &:r1482_6, ~m? -# 1482| v1482_10(void) = ReturnVoid : -# 1482| v1482_11(void) = AliasedUse : ~m? -# 1482| v1482_12(void) = ExitFunction : +# 1484| void StructuredBindingDataMemberMemberStruct::StructuredBindingDataMemberMemberStruct() +# 1484| Block 0 +# 1484| v1484_1(void) = EnterFunction : +# 1484| mu1484_2(unknown) = AliasedDefinition : +# 1484| mu1484_3(unknown) = InitializeNonLocal : +# 1484| r1484_4(glval) = VariableAddress[#this] : +# 1484| mu1484_5(glval) = InitializeParameter[#this] : &:r1484_4 +# 1484| r1484_6(glval) = Load[#this] : &:r1484_4, ~m? +# 1484| mu1484_7(StructuredBindingDataMemberMemberStruct) = InitializeIndirection[#this] : &:r1484_6 +# 1484| v1484_8(void) = NoOp : +# 1484| v1484_9(void) = ReturnIndirection[#this] : &:r1484_6, ~m? +# 1484| v1484_10(void) = ReturnVoid : +# 1484| v1484_11(void) = AliasedUse : ~m? +# 1484| v1484_12(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| mu1486_2(unknown) = AliasedDefinition : -# 1486| mu1486_3(unknown) = InitializeNonLocal : -# 1486| r1486_4(glval) = VariableAddress[#this] : -# 1486| mu1486_5(glval) = InitializeParameter[#this] : &:r1486_4 -# 1486| r1486_6(glval) = Load[#this] : &:r1486_4, ~m? -# 1486| mu1486_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_6 +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct() +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| mu1488_2(unknown) = AliasedDefinition : +# 1488| mu1488_3(unknown) = InitializeNonLocal : +# 1488| r1488_4(glval) = VariableAddress[#this] : +# 1488| mu1488_5(glval) = InitializeParameter[#this] : &:r1488_4 +# 1488| r1488_6(glval) = Load[#this] : &:r1488_4, ~m? +# 1488| mu1488_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_6 #-----| Goto -> Block 2 -# 1486| Block 1 -# 1486| r1486_8(glval) = FieldAddress[m] : mu1486_5 -# 1486| r1486_9(glval) = FunctionAddress[StructuredBindingDataMemberMemberStruct] : -# 1486| v1486_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1486_9, this:r1486_8 -# 1486| mu1486_11(unknown) = ^CallSideEffect : ~m? -# 1486| mu1486_12(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1486_8 +# 1488| Block 1 +# 1488| r1488_8(glval) = FieldAddress[m] : mu1488_5 +# 1488| r1488_9(glval) = FunctionAddress[StructuredBindingDataMemberMemberStruct] : +# 1488| v1488_10(void) = Call[StructuredBindingDataMemberMemberStruct] : func:r1488_9, this:r1488_8 +# 1488| mu1488_11(unknown) = ^CallSideEffect : ~m? +# 1488| mu1488_12(StructuredBindingDataMemberMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1488_8 #-----| Goto -> Block 2 -# 1486| Block 2 -# 1486| v1486_13(void) = NoOp : -# 1486| v1486_14(void) = ReturnIndirection[#this] : &:r1486_6, ~m? -# 1486| v1486_15(void) = ReturnVoid : -# 1486| v1486_16(void) = AliasedUse : ~m? -# 1486| v1486_17(void) = ExitFunction : +# 1488| Block 2 +# 1488| v1488_13(void) = NoOp : +# 1488| v1488_14(void) = ReturnIndirection[#this] : &:r1488_6, ~m? +# 1488| v1488_15(void) = ReturnVoid : +# 1488| v1488_16(void) = AliasedUse : ~m? +# 1488| v1488_17(void) = ExitFunction : -# 1486| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) -# 1486| Block 0 -# 1486| v1486_1(void) = EnterFunction : -# 1486| mu1486_2(unknown) = AliasedDefinition : -# 1486| mu1486_3(unknown) = InitializeNonLocal : -# 1486| r1486_4(glval) = VariableAddress[#this] : -# 1486| mu1486_5(glval) = InitializeParameter[#this] : &:r1486_4 -# 1486| r1486_6(glval) = Load[#this] : &:r1486_4, ~m? -# 1486| mu1486_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1486_6 +# 1488| void StructuredBindingDataMemberStruct::StructuredBindingDataMemberStruct(StructuredBindingDataMemberStruct const&) +# 1488| Block 0 +# 1488| v1488_1(void) = EnterFunction : +# 1488| mu1488_2(unknown) = AliasedDefinition : +# 1488| mu1488_3(unknown) = InitializeNonLocal : +# 1488| r1488_4(glval) = VariableAddress[#this] : +# 1488| mu1488_5(glval) = InitializeParameter[#this] : &:r1488_4 +# 1488| r1488_6(glval) = Load[#this] : &:r1488_4, ~m? +# 1488| mu1488_7(StructuredBindingDataMemberStruct) = InitializeIndirection[#this] : &:r1488_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(StructuredBindingDataMemberStruct &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1486| r1486_8(glval) = FieldAddress[i] : mu1486_5 -# 1486| r1486_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_9, ~m? -# 1486| r1486_11(glval) = CopyValue : r1486_10 -# 1486| r1486_12(glval) = FieldAddress[i] : r1486_11 -# 1486| r1486_13(int) = Load[?] : &:r1486_12, ~m? -# 1486| mu1486_14(int) = Store[?] : &:r1486_8, r1486_13 -# 1486| r1486_15(glval) = FieldAddress[d] : mu1486_5 -# 1486| r1486_16(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_16, ~m? -# 1486| r1486_18(glval) = CopyValue : r1486_17 -# 1486| r1486_19(glval) = FieldAddress[d] : r1486_18 -# 1486| r1486_20(double) = Load[?] : &:r1486_19, ~m? -# 1486| mu1486_21(double) = Store[?] : &:r1486_15, r1486_20 -# 1486| r1486_22(glval) = FieldAddress[b] : mu1486_5 -# 1486| r1486_23(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_23, ~m? -# 1486| r1486_25(glval) = CopyValue : r1486_24 -# 1486| r1486_26(glval) = FieldAddress[b] : r1486_25 -# 1486| r1486_27(unsigned int) = Load[?] : &:r1486_26, ~m? -# 1486| mu1486_28(unsigned int) = Store[?] : &:r1486_22, r1486_27 -# 1486| r1486_29(glval) = FieldAddress[r] : mu1486_5 -# 1486| r1486_30(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_30, ~m? -# 1486| r1486_32(glval) = CopyValue : r1486_31 -# 1486| r1486_33(glval) = FieldAddress[r] : r1486_32 -# 1486| r1486_34(int &) = Load[?] : &:r1486_33, ~m? -# 1486| mu1486_35(int &) = Store[?] : &:r1486_29, r1486_34 -# 1486| r1486_36(glval) = FieldAddress[p] : mu1486_5 -# 1486| r1486_37(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_37, ~m? -# 1486| r1486_39(glval) = CopyValue : r1486_38 -# 1486| r1486_40(glval) = FieldAddress[p] : r1486_39 -# 1486| r1486_41(int *) = Load[?] : &:r1486_40, ~m? -# 1486| mu1486_42(int *) = Store[?] : &:r1486_36, r1486_41 -# 1486| r1486_43(glval) = FieldAddress[xs] : mu1486_5 -# 1486| r1486_44(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_44, ~m? -# 1486| r1486_46(glval) = CopyValue : r1486_45 -# 1486| r1486_47(glval) = FieldAddress[xs] : r1486_46 -# 1486| r1486_48(int[2]) = Load[?] : &:r1486_47, ~m? -# 1486| mu1486_49(int[2]) = Store[?] : &:r1486_43, r1486_48 -# 1486| r1486_50(glval) = FieldAddress[r_alt] : mu1486_5 -# 1486| r1486_51(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_51, ~m? -# 1486| r1486_53(glval) = CopyValue : r1486_52 -# 1486| r1486_54(glval) = FieldAddress[r_alt] : r1486_53 -# 1486| r1486_55(int &) = Load[?] : &:r1486_54, ~m? -# 1486| mu1486_56(int &) = Store[?] : &:r1486_50, r1486_55 -# 1486| r1486_57(glval) = FieldAddress[m] : mu1486_5 -# 1486| r1486_58(glval) = VariableAddress[(unnamed parameter 0)] : -# 1486| r1486_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1486_58, ~m? -# 1486| r1486_60(glval) = CopyValue : r1486_59 -# 1486| r1486_61(glval) = FieldAddress[m] : r1486_60 -# 1486| r1486_62(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1486_61, ~m? -# 1486| mu1486_63(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1486_57, r1486_62 -# 1486| v1486_64(void) = NoOp : -# 1486| v1486_65(void) = ReturnIndirection[#this] : &:r1486_6, ~m? +# 1488| r1488_8(glval) = FieldAddress[i] : mu1488_5 +# 1488| r1488_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_10(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_9, ~m? +# 1488| r1488_11(glval) = CopyValue : r1488_10 +# 1488| r1488_12(glval) = FieldAddress[i] : r1488_11 +# 1488| r1488_13(int) = Load[?] : &:r1488_12, ~m? +# 1488| mu1488_14(int) = Store[?] : &:r1488_8, r1488_13 +# 1488| r1488_15(glval) = FieldAddress[d] : mu1488_5 +# 1488| r1488_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_17(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_16, ~m? +# 1488| r1488_18(glval) = CopyValue : r1488_17 +# 1488| r1488_19(glval) = FieldAddress[d] : r1488_18 +# 1488| r1488_20(double) = Load[?] : &:r1488_19, ~m? +# 1488| mu1488_21(double) = Store[?] : &:r1488_15, r1488_20 +# 1488| r1488_22(glval) = FieldAddress[b] : mu1488_5 +# 1488| r1488_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_24(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_23, ~m? +# 1488| r1488_25(glval) = CopyValue : r1488_24 +# 1488| r1488_26(glval) = FieldAddress[b] : r1488_25 +# 1488| r1488_27(unsigned int) = Load[?] : &:r1488_26, ~m? +# 1488| mu1488_28(unsigned int) = Store[?] : &:r1488_22, r1488_27 +# 1488| r1488_29(glval) = FieldAddress[r] : mu1488_5 +# 1488| r1488_30(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_31(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_30, ~m? +# 1488| r1488_32(glval) = CopyValue : r1488_31 +# 1488| r1488_33(glval) = FieldAddress[r] : r1488_32 +# 1488| r1488_34(int &) = Load[?] : &:r1488_33, ~m? +# 1488| mu1488_35(int &) = Store[?] : &:r1488_29, r1488_34 +# 1488| r1488_36(glval) = FieldAddress[p] : mu1488_5 +# 1488| r1488_37(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_38(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_37, ~m? +# 1488| r1488_39(glval) = CopyValue : r1488_38 +# 1488| r1488_40(glval) = FieldAddress[p] : r1488_39 +# 1488| r1488_41(int *) = Load[?] : &:r1488_40, ~m? +# 1488| mu1488_42(int *) = Store[?] : &:r1488_36, r1488_41 +# 1488| r1488_43(glval) = FieldAddress[xs] : mu1488_5 +# 1488| r1488_44(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_45(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_44, ~m? +# 1488| r1488_46(glval) = CopyValue : r1488_45 +# 1488| r1488_47(glval) = FieldAddress[xs] : r1488_46 +# 1488| r1488_48(int[2]) = Load[?] : &:r1488_47, ~m? +# 1488| mu1488_49(int[2]) = Store[?] : &:r1488_43, r1488_48 +# 1488| r1488_50(glval) = FieldAddress[r_alt] : mu1488_5 +# 1488| r1488_51(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_52(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_51, ~m? +# 1488| r1488_53(glval) = CopyValue : r1488_52 +# 1488| r1488_54(glval) = FieldAddress[r_alt] : r1488_53 +# 1488| r1488_55(int &) = Load[?] : &:r1488_54, ~m? +# 1488| mu1488_56(int &) = Store[?] : &:r1488_50, r1488_55 +# 1488| r1488_57(glval) = FieldAddress[m] : mu1488_5 +# 1488| r1488_58(glval) = VariableAddress[(unnamed parameter 0)] : +# 1488| r1488_59(StructuredBindingDataMemberStruct &) = Load[(unnamed parameter 0)] : &:r1488_58, ~m? +# 1488| r1488_60(glval) = CopyValue : r1488_59 +# 1488| r1488_61(glval) = FieldAddress[m] : r1488_60 +# 1488| r1488_62(StructuredBindingDataMemberMemberStruct) = Load[?] : &:r1488_61, ~m? +# 1488| mu1488_63(StructuredBindingDataMemberMemberStruct) = Store[?] : &:r1488_57, r1488_62 +# 1488| v1488_64(void) = NoOp : +# 1488| v1488_65(void) = ReturnIndirection[#this] : &:r1488_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1486| v1486_66(void) = ReturnVoid : -# 1486| v1486_67(void) = AliasedUse : ~m? -# 1486| v1486_68(void) = ExitFunction : +# 1488| v1488_66(void) = ReturnVoid : +# 1488| v1488_67(void) = AliasedUse : ~m? +# 1488| v1488_68(void) = ExitFunction : -# 1499| void data_member_structured_binding() -# 1499| Block 0 -# 1499| v1499_1(void) = EnterFunction : -# 1499| mu1499_2(unknown) = AliasedDefinition : -# 1499| mu1499_3(unknown) = InitializeNonLocal : -# 1500| r1500_1(glval) = VariableAddress[s] : -# 1500| mu1500_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1500_1 -# 1500| r1500_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : -# 1500| v1500_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1500_3, this:r1500_1 -# 1500| mu1500_5(unknown) = ^CallSideEffect : ~m? -# 1500| mu1500_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1500_1 -# 1503| r1503_1(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_2(glval) = VariableAddress[s] : -# 1503| r1503_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1503_2, ~m? -# 1503| mu1503_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1503_1, r1503_3 -# 1503| r1503_5(glval) = VariableAddress[i] : -# 1503| r1503_6(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_7(glval) = FieldAddress[i] : r1503_6 -# 1503| mu1503_8(int &) = Store[i] : &:r1503_5, r1503_7 -# 1503| r1503_9(glval) = VariableAddress[d] : -# 1503| r1503_10(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_11(glval) = FieldAddress[d] : r1503_10 -# 1503| mu1503_12(double &) = Store[d] : &:r1503_9, r1503_11 -# 1503| r1503_13(glval) = VariableAddress[b] : -# 1503| r1503_14(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_15(glval) = FieldAddress[b] : r1503_14 -# 1503| mu1503_16(unsigned int &) = Store[b] : &:r1503_13, r1503_15 -# 1503| r1503_17(glval) = VariableAddress[r] : -# 1503| r1503_18(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_19(glval) = FieldAddress[r] : r1503_18 -# 1503| r1503_20(int &) = Load[?] : &:r1503_19, ~m? -# 1503| r1503_21(glval) = CopyValue : r1503_20 -# 1503| mu1503_22(int &) = Store[r] : &:r1503_17, r1503_21 -# 1503| r1503_23(glval) = VariableAddress[p] : -# 1503| r1503_24(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_25(glval) = FieldAddress[p] : r1503_24 -# 1503| mu1503_26(int *&) = Store[p] : &:r1503_23, r1503_25 -# 1503| r1503_27(glval) = VariableAddress[xs] : -# 1503| r1503_28(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_29(glval) = FieldAddress[xs] : r1503_28 -# 1503| mu1503_30(int(&)[2]) = Store[xs] : &:r1503_27, r1503_29 -# 1503| r1503_31(glval) = VariableAddress[r_alt] : -# 1503| r1503_32(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_33(glval) = FieldAddress[r_alt] : r1503_32 -# 1503| r1503_34(int &) = Load[?] : &:r1503_33, ~m? -# 1503| r1503_35(glval) = CopyValue : r1503_34 -# 1503| mu1503_36(int &) = Store[r_alt] : &:r1503_31, r1503_35 -# 1503| r1503_37(glval) = VariableAddress[m] : -# 1503| r1503_38(glval) = VariableAddress[(unnamed local variable)] : -# 1503| r1503_39(glval) = FieldAddress[m] : r1503_38 -# 1503| mu1503_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1503_37, r1503_39 -# 1504| r1504_1(double) = Constant[4.0] : -# 1504| r1504_2(glval) = VariableAddress[d] : -# 1504| r1504_3(double &) = Load[d] : &:r1504_2, ~m? -# 1504| mu1504_4(double) = Store[?] : &:r1504_3, r1504_1 -# 1505| r1505_1(glval) = VariableAddress[rd] : -# 1505| r1505_2(glval) = VariableAddress[d] : -# 1505| r1505_3(double &) = Load[d] : &:r1505_2, ~m? -# 1505| r1505_4(double &) = CopyValue : r1505_3 -# 1505| mu1505_5(double &) = Store[rd] : &:r1505_1, r1505_4 -# 1506| r1506_1(glval) = VariableAddress[v] : -# 1506| r1506_2(glval) = VariableAddress[i] : -# 1506| r1506_3(int &) = Load[i] : &:r1506_2, ~m? -# 1506| r1506_4(int) = Load[?] : &:r1506_3, ~m? -# 1506| mu1506_5(int) = Store[v] : &:r1506_1, r1506_4 -# 1507| r1507_1(int) = Constant[5] : -# 1507| r1507_2(glval) = VariableAddress[r] : -# 1507| r1507_3(int &) = Load[r] : &:r1507_2, ~m? -# 1507| mu1507_4(int) = Store[?] : &:r1507_3, r1507_1 -# 1508| r1508_1(int) = Constant[6] : -# 1508| r1508_2(glval) = VariableAddress[p] : -# 1508| r1508_3(int *&) = Load[p] : &:r1508_2, ~m? -# 1508| r1508_4(int *) = Load[?] : &:r1508_3, ~m? -# 1508| r1508_5(glval) = CopyValue : r1508_4 -# 1508| mu1508_6(int) = Store[?] : &:r1508_5, r1508_1 -# 1509| r1509_1(glval) = VariableAddress[rr] : +# 1501| void data_member_structured_binding() +# 1501| Block 0 +# 1501| v1501_1(void) = EnterFunction : +# 1501| mu1501_2(unknown) = AliasedDefinition : +# 1501| mu1501_3(unknown) = InitializeNonLocal : +# 1502| r1502_1(glval) = VariableAddress[s] : +# 1502| mu1502_2(StructuredBindingDataMemberStruct) = Uninitialized[s] : &:r1502_1 +# 1502| r1502_3(glval) = FunctionAddress[StructuredBindingDataMemberStruct] : +# 1502| v1502_4(void) = Call[StructuredBindingDataMemberStruct] : func:r1502_3, this:r1502_1 +# 1502| mu1502_5(unknown) = ^CallSideEffect : ~m? +# 1502| mu1502_6(StructuredBindingDataMemberStruct) = ^IndirectMayWriteSideEffect[-1] : &:r1502_1 +# 1505| r1505_1(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_2(glval) = VariableAddress[s] : +# 1505| r1505_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1505_2, ~m? +# 1505| mu1505_4(StructuredBindingDataMemberStruct) = Store[(unnamed local variable)] : &:r1505_1, r1505_3 +# 1505| r1505_5(glval) = VariableAddress[i] : +# 1505| r1505_6(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_7(glval) = FieldAddress[i] : r1505_6 +# 1505| mu1505_8(int &) = Store[i] : &:r1505_5, r1505_7 +# 1505| r1505_9(glval) = VariableAddress[d] : +# 1505| r1505_10(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_11(glval) = FieldAddress[d] : r1505_10 +# 1505| mu1505_12(double &) = Store[d] : &:r1505_9, r1505_11 +# 1505| r1505_13(glval) = VariableAddress[b] : +# 1505| r1505_14(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_15(glval) = FieldAddress[b] : r1505_14 +# 1505| mu1505_16(unsigned int &) = Store[b] : &:r1505_13, r1505_15 +# 1505| r1505_17(glval) = VariableAddress[r] : +# 1505| r1505_18(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_19(glval) = FieldAddress[r] : r1505_18 +# 1505| r1505_20(int &) = Load[?] : &:r1505_19, ~m? +# 1505| r1505_21(glval) = CopyValue : r1505_20 +# 1505| mu1505_22(int &) = Store[r] : &:r1505_17, r1505_21 +# 1505| r1505_23(glval) = VariableAddress[p] : +# 1505| r1505_24(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_25(glval) = FieldAddress[p] : r1505_24 +# 1505| mu1505_26(int *&) = Store[p] : &:r1505_23, r1505_25 +# 1505| r1505_27(glval) = VariableAddress[xs] : +# 1505| r1505_28(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_29(glval) = FieldAddress[xs] : r1505_28 +# 1505| mu1505_30(int(&)[2]) = Store[xs] : &:r1505_27, r1505_29 +# 1505| r1505_31(glval) = VariableAddress[r_alt] : +# 1505| r1505_32(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_33(glval) = FieldAddress[r_alt] : r1505_32 +# 1505| r1505_34(int &) = Load[?] : &:r1505_33, ~m? +# 1505| r1505_35(glval) = CopyValue : r1505_34 +# 1505| mu1505_36(int &) = Store[r_alt] : &:r1505_31, r1505_35 +# 1505| r1505_37(glval) = VariableAddress[m] : +# 1505| r1505_38(glval) = VariableAddress[(unnamed local variable)] : +# 1505| r1505_39(glval) = FieldAddress[m] : r1505_38 +# 1505| mu1505_40(StructuredBindingDataMemberMemberStruct &) = Store[m] : &:r1505_37, r1505_39 +# 1506| r1506_1(double) = Constant[4.0] : +# 1506| r1506_2(glval) = VariableAddress[d] : +# 1506| r1506_3(double &) = Load[d] : &:r1506_2, ~m? +# 1506| mu1506_4(double) = Store[?] : &:r1506_3, r1506_1 +# 1507| r1507_1(glval) = VariableAddress[rd] : +# 1507| r1507_2(glval) = VariableAddress[d] : +# 1507| r1507_3(double &) = Load[d] : &:r1507_2, ~m? +# 1507| r1507_4(double &) = CopyValue : r1507_3 +# 1507| mu1507_5(double &) = Store[rd] : &:r1507_1, r1507_4 +# 1508| r1508_1(glval) = VariableAddress[v] : +# 1508| r1508_2(glval) = VariableAddress[i] : +# 1508| r1508_3(int &) = Load[i] : &:r1508_2, ~m? +# 1508| r1508_4(int) = Load[?] : &:r1508_3, ~m? +# 1508| mu1508_5(int) = Store[v] : &:r1508_1, r1508_4 +# 1509| r1509_1(int) = Constant[5] : # 1509| r1509_2(glval) = VariableAddress[r] : # 1509| r1509_3(int &) = Load[r] : &:r1509_2, ~m? -# 1509| r1509_4(int &) = CopyValue : r1509_3 -# 1509| mu1509_5(int &) = Store[rr] : &:r1509_1, r1509_4 -# 1510| r1510_1(glval) = VariableAddress[pr] : -# 1510| r1510_2(glval) = VariableAddress[r] : -# 1510| r1510_3(int &) = Load[r] : &:r1510_2, ~m? -# 1510| r1510_4(int *) = CopyValue : r1510_3 -# 1510| mu1510_5(int *) = Store[pr] : &:r1510_1, r1510_4 -# 1511| r1511_1(glval) = VariableAddress[w] : +# 1509| mu1509_4(int) = Store[?] : &:r1509_3, r1509_1 +# 1510| r1510_1(int) = Constant[6] : +# 1510| r1510_2(glval) = VariableAddress[p] : +# 1510| r1510_3(int *&) = Load[p] : &:r1510_2, ~m? +# 1510| r1510_4(int *) = Load[?] : &:r1510_3, ~m? +# 1510| r1510_5(glval) = CopyValue : r1510_4 +# 1510| mu1510_6(int) = Store[?] : &:r1510_5, r1510_1 +# 1511| r1511_1(glval) = VariableAddress[rr] : # 1511| r1511_2(glval) = VariableAddress[r] : # 1511| r1511_3(int &) = Load[r] : &:r1511_2, ~m? -# 1511| r1511_4(int) = Load[?] : &:r1511_3, ~m? -# 1511| mu1511_5(int) = Store[w] : &:r1511_1, r1511_4 -# 1515| r1515_1(glval) = VariableAddress[unnamed_local_variable] : -# 1515| r1515_2(glval) = VariableAddress[s] : -# 1515| r1515_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1515_2, ~m? -# 1515| mu1515_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1515_1, r1515_3 -# 1516| r1516_1(glval) = VariableAddress[i] : -# 1516| r1516_2(glval) = VariableAddress[unnamed_local_variable] : -# 1516| r1516_3(glval) = FieldAddress[i] : r1516_2 -# 1516| r1516_4(int &) = CopyValue : r1516_3 -# 1516| mu1516_5(int &) = Store[i] : &:r1516_1, r1516_4 -# 1517| r1517_1(glval) = VariableAddress[d] : -# 1517| r1517_2(glval) = VariableAddress[unnamed_local_variable] : -# 1517| r1517_3(glval) = FieldAddress[d] : r1517_2 -# 1517| r1517_4(double &) = CopyValue : r1517_3 -# 1517| mu1517_5(double &) = Store[d] : &:r1517_1, r1517_4 -# 1519| r1519_1(glval) = VariableAddress[r] : +# 1511| r1511_4(int &) = CopyValue : r1511_3 +# 1511| mu1511_5(int &) = Store[rr] : &:r1511_1, r1511_4 +# 1512| r1512_1(glval) = VariableAddress[pr] : +# 1512| r1512_2(glval) = VariableAddress[r] : +# 1512| r1512_3(int &) = Load[r] : &:r1512_2, ~m? +# 1512| r1512_4(int *) = CopyValue : r1512_3 +# 1512| mu1512_5(int *) = Store[pr] : &:r1512_1, r1512_4 +# 1513| r1513_1(glval) = VariableAddress[w] : +# 1513| r1513_2(glval) = VariableAddress[r] : +# 1513| r1513_3(int &) = Load[r] : &:r1513_2, ~m? +# 1513| r1513_4(int) = Load[?] : &:r1513_3, ~m? +# 1513| mu1513_5(int) = Store[w] : &:r1513_1, r1513_4 +# 1517| r1517_1(glval) = VariableAddress[unnamed_local_variable] : +# 1517| r1517_2(glval) = VariableAddress[s] : +# 1517| r1517_3(StructuredBindingDataMemberStruct) = Load[s] : &:r1517_2, ~m? +# 1517| mu1517_4(StructuredBindingDataMemberStruct) = Store[unnamed_local_variable] : &:r1517_1, r1517_3 +# 1518| r1518_1(glval) = VariableAddress[i] : +# 1518| r1518_2(glval) = VariableAddress[unnamed_local_variable] : +# 1518| r1518_3(glval) = FieldAddress[i] : r1518_2 +# 1518| r1518_4(int &) = CopyValue : r1518_3 +# 1518| mu1518_5(int &) = Store[i] : &:r1518_1, r1518_4 +# 1519| r1519_1(glval) = VariableAddress[d] : # 1519| r1519_2(glval) = VariableAddress[unnamed_local_variable] : -# 1519| r1519_3(glval) = FieldAddress[r] : r1519_2 -# 1519| r1519_4(int &) = Load[?] : &:r1519_3, ~m? -# 1519| r1519_5(glval) = CopyValue : r1519_4 -# 1519| r1519_6(int &) = CopyValue : r1519_5 -# 1519| mu1519_7(int &) = Store[r] : &:r1519_1, r1519_6 -# 1520| r1520_1(glval) = VariableAddress[p] : -# 1520| r1520_2(glval) = VariableAddress[unnamed_local_variable] : -# 1520| r1520_3(glval) = FieldAddress[p] : r1520_2 -# 1520| r1520_4(int *&) = CopyValue : r1520_3 -# 1520| mu1520_5(int *&) = Store[p] : &:r1520_1, r1520_4 -# 1521| r1521_1(double) = Constant[4.0] : -# 1521| r1521_2(glval) = VariableAddress[d] : -# 1521| r1521_3(double &) = Load[d] : &:r1521_2, ~m? -# 1521| r1521_4(glval) = CopyValue : r1521_3 -# 1521| mu1521_5(double) = Store[?] : &:r1521_4, r1521_1 -# 1522| r1522_1(glval) = VariableAddress[rd] : -# 1522| r1522_2(glval) = VariableAddress[d] : -# 1522| r1522_3(double &) = Load[d] : &:r1522_2, ~m? -# 1522| r1522_4(glval) = CopyValue : r1522_3 -# 1522| r1522_5(double &) = CopyValue : r1522_4 -# 1522| mu1522_6(double &) = Store[rd] : &:r1522_1, r1522_5 -# 1523| r1523_1(glval) = VariableAddress[v] : -# 1523| r1523_2(glval) = VariableAddress[i] : -# 1523| r1523_3(int &) = Load[i] : &:r1523_2, ~m? -# 1523| r1523_4(int) = Load[?] : &:r1523_3, ~m? -# 1523| mu1523_5(int) = Store[v] : &:r1523_1, r1523_4 -# 1524| r1524_1(int) = Constant[5] : -# 1524| r1524_2(glval) = VariableAddress[r] : -# 1524| r1524_3(int &) = Load[r] : &:r1524_2, ~m? -# 1524| r1524_4(glval) = CopyValue : r1524_3 -# 1524| mu1524_5(int) = Store[?] : &:r1524_4, r1524_1 -# 1525| r1525_1(int) = Constant[6] : -# 1525| r1525_2(glval) = VariableAddress[p] : -# 1525| r1525_3(int *&) = Load[p] : &:r1525_2, ~m? -# 1525| r1525_4(int *) = Load[?] : &:r1525_3, ~m? -# 1525| r1525_5(glval) = CopyValue : r1525_4 -# 1525| mu1525_6(int) = Store[?] : &:r1525_5, r1525_1 -# 1526| r1526_1(glval) = VariableAddress[rr] : +# 1519| r1519_3(glval) = FieldAddress[d] : r1519_2 +# 1519| r1519_4(double &) = CopyValue : r1519_3 +# 1519| mu1519_5(double &) = Store[d] : &:r1519_1, r1519_4 +# 1521| r1521_1(glval) = VariableAddress[r] : +# 1521| r1521_2(glval) = VariableAddress[unnamed_local_variable] : +# 1521| r1521_3(glval) = FieldAddress[r] : r1521_2 +# 1521| r1521_4(int &) = Load[?] : &:r1521_3, ~m? +# 1521| r1521_5(glval) = CopyValue : r1521_4 +# 1521| r1521_6(int &) = CopyValue : r1521_5 +# 1521| mu1521_7(int &) = Store[r] : &:r1521_1, r1521_6 +# 1522| r1522_1(glval) = VariableAddress[p] : +# 1522| r1522_2(glval) = VariableAddress[unnamed_local_variable] : +# 1522| r1522_3(glval) = FieldAddress[p] : r1522_2 +# 1522| r1522_4(int *&) = CopyValue : r1522_3 +# 1522| mu1522_5(int *&) = Store[p] : &:r1522_1, r1522_4 +# 1523| r1523_1(double) = Constant[4.0] : +# 1523| r1523_2(glval) = VariableAddress[d] : +# 1523| r1523_3(double &) = Load[d] : &:r1523_2, ~m? +# 1523| r1523_4(glval) = CopyValue : r1523_3 +# 1523| mu1523_5(double) = Store[?] : &:r1523_4, r1523_1 +# 1524| r1524_1(glval) = VariableAddress[rd] : +# 1524| r1524_2(glval) = VariableAddress[d] : +# 1524| r1524_3(double &) = Load[d] : &:r1524_2, ~m? +# 1524| r1524_4(glval) = CopyValue : r1524_3 +# 1524| r1524_5(double &) = CopyValue : r1524_4 +# 1524| mu1524_6(double &) = Store[rd] : &:r1524_1, r1524_5 +# 1525| r1525_1(glval) = VariableAddress[v] : +# 1525| r1525_2(glval) = VariableAddress[i] : +# 1525| r1525_3(int &) = Load[i] : &:r1525_2, ~m? +# 1525| r1525_4(int) = Load[?] : &:r1525_3, ~m? +# 1525| mu1525_5(int) = Store[v] : &:r1525_1, r1525_4 +# 1526| r1526_1(int) = Constant[5] : # 1526| r1526_2(glval) = VariableAddress[r] : # 1526| r1526_3(int &) = Load[r] : &:r1526_2, ~m? # 1526| r1526_4(glval) = CopyValue : r1526_3 -# 1526| r1526_5(int &) = CopyValue : r1526_4 -# 1526| mu1526_6(int &) = Store[rr] : &:r1526_1, r1526_5 -# 1527| r1527_1(glval) = VariableAddress[pr] : -# 1527| r1527_2(glval) = VariableAddress[r] : -# 1527| r1527_3(int &) = Load[r] : &:r1527_2, ~m? -# 1527| r1527_4(glval) = CopyValue : r1527_3 -# 1527| r1527_5(int *) = CopyValue : r1527_4 -# 1527| mu1527_6(int *) = Store[pr] : &:r1527_1, r1527_5 -# 1528| r1528_1(glval) = VariableAddress[w] : +# 1526| mu1526_5(int) = Store[?] : &:r1526_4, r1526_1 +# 1527| r1527_1(int) = Constant[6] : +# 1527| r1527_2(glval) = VariableAddress[p] : +# 1527| r1527_3(int *&) = Load[p] : &:r1527_2, ~m? +# 1527| r1527_4(int *) = Load[?] : &:r1527_3, ~m? +# 1527| r1527_5(glval) = CopyValue : r1527_4 +# 1527| mu1527_6(int) = Store[?] : &:r1527_5, r1527_1 +# 1528| r1528_1(glval) = VariableAddress[rr] : # 1528| r1528_2(glval) = VariableAddress[r] : # 1528| r1528_3(int &) = Load[r] : &:r1528_2, ~m? -# 1528| r1528_4(int) = Load[?] : &:r1528_3, ~m? -# 1528| mu1528_5(int) = Store[w] : &:r1528_1, r1528_4 -# 1530| v1530_1(void) = NoOp : -# 1499| v1499_4(void) = ReturnVoid : -# 1499| v1499_5(void) = AliasedUse : ~m? -# 1499| v1499_6(void) = ExitFunction : +# 1528| r1528_4(glval) = CopyValue : r1528_3 +# 1528| r1528_5(int &) = CopyValue : r1528_4 +# 1528| mu1528_6(int &) = Store[rr] : &:r1528_1, r1528_5 +# 1529| r1529_1(glval) = VariableAddress[pr] : +# 1529| r1529_2(glval) = VariableAddress[r] : +# 1529| r1529_3(int &) = Load[r] : &:r1529_2, ~m? +# 1529| r1529_4(glval) = CopyValue : r1529_3 +# 1529| r1529_5(int *) = CopyValue : r1529_4 +# 1529| mu1529_6(int *) = Store[pr] : &:r1529_1, r1529_5 +# 1530| r1530_1(glval) = VariableAddress[w] : +# 1530| r1530_2(glval) = VariableAddress[r] : +# 1530| r1530_3(int &) = Load[r] : &:r1530_2, ~m? +# 1530| r1530_4(int) = Load[?] : &:r1530_3, ~m? +# 1530| mu1530_5(int) = Store[w] : &:r1530_1, r1530_4 +# 1532| v1532_1(void) = NoOp : +# 1501| v1501_4(void) = ReturnVoid : +# 1501| v1501_5(void) = AliasedUse : ~m? +# 1501| v1501_6(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| mu1539_2(unknown) = AliasedDefinition : -# 1539| mu1539_3(unknown) = InitializeNonLocal : -# 1539| r1539_4(glval) = VariableAddress[#this] : -# 1539| mu1539_5(glval) = InitializeParameter[#this] : &:r1539_4 -# 1539| r1539_6(glval) = Load[#this] : &:r1539_4, ~m? -# 1539| mu1539_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_6 -# 1539| v1539_8(void) = NoOp : -# 1539| v1539_9(void) = ReturnIndirection[#this] : &:r1539_6, ~m? -# 1539| v1539_10(void) = ReturnVoid : -# 1539| v1539_11(void) = AliasedUse : ~m? -# 1539| v1539_12(void) = ExitFunction : +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet() +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| mu1541_2(unknown) = AliasedDefinition : +# 1541| mu1541_3(unknown) = InitializeNonLocal : +# 1541| r1541_4(glval) = VariableAddress[#this] : +# 1541| mu1541_5(glval) = InitializeParameter[#this] : &:r1541_4 +# 1541| r1541_6(glval) = Load[#this] : &:r1541_4, ~m? +# 1541| mu1541_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_6 +# 1541| v1541_8(void) = NoOp : +# 1541| v1541_9(void) = ReturnIndirection[#this] : &:r1541_6, ~m? +# 1541| v1541_10(void) = ReturnVoid : +# 1541| v1541_11(void) = AliasedUse : ~m? +# 1541| v1541_12(void) = ExitFunction : -# 1539| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) -# 1539| Block 0 -# 1539| v1539_1(void) = EnterFunction : -# 1539| mu1539_2(unknown) = AliasedDefinition : -# 1539| mu1539_3(unknown) = InitializeNonLocal : -# 1539| r1539_4(glval) = VariableAddress[#this] : -# 1539| mu1539_5(glval) = InitializeParameter[#this] : &:r1539_4 -# 1539| r1539_6(glval) = Load[#this] : &:r1539_4, ~m? -# 1539| mu1539_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1539_6 +# 1541| void StructuredBindingTupleRefGet::StructuredBindingTupleRefGet(StructuredBindingTupleRefGet const&) +# 1541| Block 0 +# 1541| v1541_1(void) = EnterFunction : +# 1541| mu1541_2(unknown) = AliasedDefinition : +# 1541| mu1541_3(unknown) = InitializeNonLocal : +# 1541| r1541_4(glval) = VariableAddress[#this] : +# 1541| mu1541_5(glval) = InitializeParameter[#this] : &:r1541_4 +# 1541| r1541_6(glval) = Load[#this] : &:r1541_4, ~m? +# 1541| mu1541_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1541_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(StructuredBindingTupleRefGet &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1539| r1539_8(glval) = FieldAddress[i] : mu1539_5 -# 1539| r1539_9(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_9, ~m? -# 1539| r1539_11(glval) = CopyValue : r1539_10 -# 1539| r1539_12(glval) = FieldAddress[i] : r1539_11 -# 1539| r1539_13(int) = Load[?] : &:r1539_12, ~m? -# 1539| mu1539_14(int) = Store[?] : &:r1539_8, r1539_13 -# 1539| r1539_15(glval) = FieldAddress[d] : mu1539_5 -# 1539| r1539_16(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_16, ~m? -# 1539| r1539_18(glval) = CopyValue : r1539_17 -# 1539| r1539_19(glval) = FieldAddress[d] : r1539_18 -# 1539| r1539_20(double) = Load[?] : &:r1539_19, ~m? -# 1539| mu1539_21(double) = Store[?] : &:r1539_15, r1539_20 -# 1539| r1539_22(glval) = FieldAddress[r] : mu1539_5 -# 1539| r1539_23(glval) = VariableAddress[(unnamed parameter 0)] : -# 1539| r1539_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1539_23, ~m? -# 1539| r1539_25(glval) = CopyValue : r1539_24 -# 1539| r1539_26(glval) = FieldAddress[r] : r1539_25 -# 1539| r1539_27(int &) = Load[?] : &:r1539_26, ~m? -# 1539| mu1539_28(int &) = Store[?] : &:r1539_22, r1539_27 -# 1539| v1539_29(void) = NoOp : -# 1539| v1539_30(void) = ReturnIndirection[#this] : &:r1539_6, ~m? +# 1541| r1541_8(glval) = FieldAddress[i] : mu1541_5 +# 1541| r1541_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_10(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_9, ~m? +# 1541| r1541_11(glval) = CopyValue : r1541_10 +# 1541| r1541_12(glval) = FieldAddress[i] : r1541_11 +# 1541| r1541_13(int) = Load[?] : &:r1541_12, ~m? +# 1541| mu1541_14(int) = Store[?] : &:r1541_8, r1541_13 +# 1541| r1541_15(glval) = FieldAddress[d] : mu1541_5 +# 1541| r1541_16(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_17(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_16, ~m? +# 1541| r1541_18(glval) = CopyValue : r1541_17 +# 1541| r1541_19(glval) = FieldAddress[d] : r1541_18 +# 1541| r1541_20(double) = Load[?] : &:r1541_19, ~m? +# 1541| mu1541_21(double) = Store[?] : &:r1541_15, r1541_20 +# 1541| r1541_22(glval) = FieldAddress[r] : mu1541_5 +# 1541| r1541_23(glval) = VariableAddress[(unnamed parameter 0)] : +# 1541| r1541_24(StructuredBindingTupleRefGet &) = Load[(unnamed parameter 0)] : &:r1541_23, ~m? +# 1541| r1541_25(glval) = CopyValue : r1541_24 +# 1541| r1541_26(glval) = FieldAddress[r] : r1541_25 +# 1541| r1541_27(int &) = Load[?] : &:r1541_26, ~m? +# 1541| mu1541_28(int &) = Store[?] : &:r1541_22, r1541_27 +# 1541| v1541_29(void) = NoOp : +# 1541| v1541_30(void) = ReturnIndirection[#this] : &:r1541_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1539| v1539_31(void) = ReturnVoid : -# 1539| v1539_32(void) = AliasedUse : ~m? -# 1539| v1539_33(void) = ExitFunction : +# 1541| v1541_31(void) = ReturnVoid : +# 1541| v1541_32(void) = AliasedUse : ~m? +# 1541| v1541_33(void) = ExitFunction : -# 1567| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1567| Block 0 -# 1567| v1567_1(void) = EnterFunction : -# 1567| mu1567_2(unknown) = AliasedDefinition : -# 1567| mu1567_3(unknown) = InitializeNonLocal : -# 1567| r1567_4(glval) = VariableAddress[#this] : -# 1567| mu1567_5(glval) = InitializeParameter[#this] : &:r1567_4 -# 1567| r1567_6(glval) = Load[#this] : &:r1567_4, ~m? -# 1567| mu1567_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1567_6 -# 1568| r1568_1(glval) = VariableAddress[#return] : -# 1568| r1568_2(glval) = VariableAddress[#this] : -# 1568| r1568_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1568_2, ~m? -# 1568| r1568_4(glval) = FieldAddress[i] : r1568_3 -#-----| r0_1(int &) = CopyValue : r1568_4 -#-----| mu0_2(int &) = Store[#return] : &:r1568_1, r0_1 -# 1567| v1567_8(void) = ReturnIndirection[#this] : &:r1567_6, ~m? -# 1567| r1567_9(glval) = VariableAddress[#return] : -# 1567| v1567_10(void) = ReturnValue : &:r1567_9, ~m? -# 1567| v1567_11(void) = AliasedUse : ~m? -# 1567| v1567_12(void) = ExitFunction : +# 1569| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1569| Block 0 +# 1569| v1569_1(void) = EnterFunction : +# 1569| mu1569_2(unknown) = AliasedDefinition : +# 1569| mu1569_3(unknown) = InitializeNonLocal : +# 1569| r1569_4(glval) = VariableAddress[#this] : +# 1569| mu1569_5(glval) = InitializeParameter[#this] : &:r1569_4 +# 1569| r1569_6(glval) = Load[#this] : &:r1569_4, ~m? +# 1569| mu1569_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1569_6 +# 1570| r1570_1(glval) = VariableAddress[#return] : +# 1570| r1570_2(glval) = VariableAddress[#this] : +# 1570| r1570_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1570_2, ~m? +# 1570| r1570_4(glval) = FieldAddress[i] : r1570_3 +#-----| r0_1(int &) = CopyValue : r1570_4 +#-----| mu0_2(int &) = Store[#return] : &:r1570_1, r0_1 +# 1569| v1569_8(void) = ReturnIndirection[#this] : &:r1569_6, ~m? +# 1569| r1569_9(glval) = VariableAddress[#return] : +# 1569| v1569_10(void) = ReturnValue : &:r1569_9, ~m? +# 1569| v1569_11(void) = AliasedUse : ~m? +# 1569| v1569_12(void) = ExitFunction : -# 1571| std::tuple_element::type& StructuredBindingTupleRefGet::get() -# 1571| Block 0 -# 1571| v1571_1(void) = EnterFunction : -# 1571| mu1571_2(unknown) = AliasedDefinition : -# 1571| mu1571_3(unknown) = InitializeNonLocal : -# 1571| r1571_4(glval) = VariableAddress[#this] : -# 1571| mu1571_5(glval) = InitializeParameter[#this] : &:r1571_4 -# 1571| r1571_6(glval) = Load[#this] : &:r1571_4, ~m? -# 1571| mu1571_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1571_6 -# 1572| r1572_1(glval) = VariableAddress[#return] : -# 1572| r1572_2(glval) = VariableAddress[#this] : -# 1572| r1572_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1572_2, ~m? -# 1572| r1572_4(glval) = FieldAddress[d] : r1572_3 -#-----| r0_1(double &) = CopyValue : r1572_4 -#-----| mu0_2(double &) = Store[#return] : &:r1572_1, r0_1 -# 1571| v1571_8(void) = ReturnIndirection[#this] : &:r1571_6, ~m? -# 1571| r1571_9(glval) = VariableAddress[#return] : -# 1571| v1571_10(void) = ReturnValue : &:r1571_9, ~m? -# 1571| v1571_11(void) = AliasedUse : ~m? -# 1571| v1571_12(void) = ExitFunction : +# 1573| std::tuple_element::type& StructuredBindingTupleRefGet::get() +# 1573| Block 0 +# 1573| v1573_1(void) = EnterFunction : +# 1573| mu1573_2(unknown) = AliasedDefinition : +# 1573| mu1573_3(unknown) = InitializeNonLocal : +# 1573| r1573_4(glval) = VariableAddress[#this] : +# 1573| mu1573_5(glval) = InitializeParameter[#this] : &:r1573_4 +# 1573| r1573_6(glval) = Load[#this] : &:r1573_4, ~m? +# 1573| mu1573_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1573_6 +# 1574| r1574_1(glval) = VariableAddress[#return] : +# 1574| r1574_2(glval) = VariableAddress[#this] : +# 1574| r1574_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1574_2, ~m? +# 1574| r1574_4(glval) = FieldAddress[d] : r1574_3 +#-----| r0_1(double &) = CopyValue : r1574_4 +#-----| mu0_2(double &) = Store[#return] : &:r1574_1, r0_1 +# 1573| v1573_8(void) = ReturnIndirection[#this] : &:r1573_6, ~m? +# 1573| r1573_9(glval) = VariableAddress[#return] : +# 1573| v1573_10(void) = ReturnValue : &:r1573_9, ~m? +# 1573| v1573_11(void) = AliasedUse : ~m? +# 1573| v1573_12(void) = ExitFunction : -# 1575| std::tuple_element::type StructuredBindingTupleRefGet::get() -# 1575| Block 0 -# 1575| v1575_1(void) = EnterFunction : -# 1575| mu1575_2(unknown) = AliasedDefinition : -# 1575| mu1575_3(unknown) = InitializeNonLocal : -# 1575| r1575_4(glval) = VariableAddress[#this] : -# 1575| mu1575_5(glval) = InitializeParameter[#this] : &:r1575_4 -# 1575| r1575_6(glval) = Load[#this] : &:r1575_4, ~m? -# 1575| mu1575_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1575_6 -# 1576| r1576_1(glval) = VariableAddress[#return] : -# 1576| r1576_2(glval) = VariableAddress[#this] : -# 1576| r1576_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1576_2, ~m? -# 1576| r1576_4(glval) = FieldAddress[r] : r1576_3 -# 1576| r1576_5(int &) = Load[?] : &:r1576_4, ~m? -# 1576| r1576_6(glval) = CopyValue : r1576_5 -# 1576| r1576_7(int &) = CopyValue : r1576_6 -# 1576| mu1576_8(int &) = Store[#return] : &:r1576_1, r1576_7 -# 1575| v1575_8(void) = ReturnIndirection[#this] : &:r1575_6, ~m? -# 1575| r1575_9(glval) = VariableAddress[#return] : -# 1575| v1575_10(void) = ReturnValue : &:r1575_9, ~m? -# 1575| v1575_11(void) = AliasedUse : ~m? -# 1575| v1575_12(void) = ExitFunction : +# 1577| std::tuple_element::type StructuredBindingTupleRefGet::get() +# 1577| Block 0 +# 1577| v1577_1(void) = EnterFunction : +# 1577| mu1577_2(unknown) = AliasedDefinition : +# 1577| mu1577_3(unknown) = InitializeNonLocal : +# 1577| r1577_4(glval) = VariableAddress[#this] : +# 1577| mu1577_5(glval) = InitializeParameter[#this] : &:r1577_4 +# 1577| r1577_6(glval) = Load[#this] : &:r1577_4, ~m? +# 1577| mu1577_7(StructuredBindingTupleRefGet) = InitializeIndirection[#this] : &:r1577_6 +# 1578| r1578_1(glval) = VariableAddress[#return] : +# 1578| r1578_2(glval) = VariableAddress[#this] : +# 1578| r1578_3(StructuredBindingTupleRefGet *) = Load[#this] : &:r1578_2, ~m? +# 1578| r1578_4(glval) = FieldAddress[r] : r1578_3 +# 1578| r1578_5(int &) = Load[?] : &:r1578_4, ~m? +# 1578| r1578_6(glval) = CopyValue : r1578_5 +# 1578| r1578_7(int &) = CopyValue : r1578_6 +# 1578| mu1578_8(int &) = Store[#return] : &:r1578_1, r1578_7 +# 1577| v1577_8(void) = ReturnIndirection[#this] : &:r1577_6, ~m? +# 1577| r1577_9(glval) = VariableAddress[#return] : +# 1577| v1577_10(void) = ReturnValue : &:r1577_9, ~m? +# 1577| v1577_11(void) = AliasedUse : ~m? +# 1577| v1577_12(void) = ExitFunction : -# 1579| void tuple_structured_binding_ref_get() -# 1579| Block 0 -# 1579| v1579_1(void) = EnterFunction : -# 1579| mu1579_2(unknown) = AliasedDefinition : -# 1579| mu1579_3(unknown) = InitializeNonLocal : -# 1580| r1580_1(glval) = VariableAddress[t] : -# 1580| mu1580_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1580_1 -# 1580| r1580_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : -# 1580| v1580_4(void) = Call[StructuredBindingTupleRefGet] : func:r1580_3, this:r1580_1 -# 1580| mu1580_5(unknown) = ^CallSideEffect : ~m? -# 1580| mu1580_6(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1580_1 -# 1583| r1583_1(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_2(glval) = VariableAddress[t] : -# 1583| r1583_3(StructuredBindingTupleRefGet) = Load[t] : &:r1583_2, ~m? -# 1583| mu1583_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1583_1, r1583_3 -# 1583| r1583_5(glval) = VariableAddress[i] : -# 1583| r1583_6(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_7(glval) = FunctionAddress[get] : -# 1583| r1583_8(int &) = Call[get] : func:r1583_7, this:r1583_6 -# 1583| mu1583_9(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_10(void) = ^IndirectReadSideEffect[-1] : &:r1583_6, ~m? -# 1583| mu1583_11(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_6 -# 1583| r1583_12(glval) = CopyValue : r1583_8 -# 1583| r1583_13(int &) = CopyValue : r1583_12 -# 1583| mu1583_14(int &) = Store[i] : &:r1583_5, r1583_13 -# 1583| r1583_15(glval) = VariableAddress[d] : -# 1583| r1583_16(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_17(glval) = FunctionAddress[get] : -# 1583| r1583_18(double &) = Call[get] : func:r1583_17, this:r1583_16 -# 1583| mu1583_19(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_20(void) = ^IndirectReadSideEffect[-1] : &:r1583_16, ~m? -# 1583| mu1583_21(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_16 -# 1583| r1583_22(glval) = CopyValue : r1583_18 -# 1583| r1583_23(double &) = CopyValue : r1583_22 -# 1583| mu1583_24(double &) = Store[d] : &:r1583_15, r1583_23 -# 1583| r1583_25(glval) = VariableAddress[r] : -# 1583| r1583_26(glval) = VariableAddress[(unnamed local variable)] : -# 1583| r1583_27(glval) = FunctionAddress[get] : -# 1583| r1583_28(int &) = Call[get] : func:r1583_27, this:r1583_26 -# 1583| mu1583_29(unknown) = ^CallSideEffect : ~m? -# 1583| v1583_30(void) = ^IndirectReadSideEffect[-1] : &:r1583_26, ~m? -# 1583| mu1583_31(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1583_26 -# 1583| r1583_32(glval) = CopyValue : r1583_28 -# 1583| r1583_33(int &) = CopyValue : r1583_32 -# 1583| mu1583_34(int &) = Store[r] : &:r1583_25, r1583_33 -# 1584| r1584_1(double) = Constant[4.0] : -# 1584| r1584_2(glval) = VariableAddress[d] : -# 1584| r1584_3(double &) = Load[d] : &:r1584_2, ~m? -# 1584| r1584_4(glval) = CopyValue : r1584_3 -# 1584| mu1584_5(double) = Store[?] : &:r1584_4, r1584_1 -# 1585| r1585_1(glval) = VariableAddress[rd] : -# 1585| r1585_2(glval) = VariableAddress[d] : -# 1585| r1585_3(double &) = Load[d] : &:r1585_2, ~m? -# 1585| r1585_4(glval) = CopyValue : r1585_3 -# 1585| r1585_5(double &) = CopyValue : r1585_4 -# 1585| mu1585_6(double &) = Store[rd] : &:r1585_1, r1585_5 -# 1586| r1586_1(glval) = VariableAddress[v] : -# 1586| r1586_2(glval) = VariableAddress[i] : -# 1586| r1586_3(int &) = Load[i] : &:r1586_2, ~m? -# 1586| r1586_4(int) = Load[?] : &:r1586_3, ~m? -# 1586| mu1586_5(int) = Store[v] : &:r1586_1, r1586_4 -# 1587| r1587_1(int) = Constant[5] : -# 1587| r1587_2(glval) = VariableAddress[r] : -# 1587| r1587_3(int &) = Load[r] : &:r1587_2, ~m? -# 1587| r1587_4(glval) = CopyValue : r1587_3 -# 1587| mu1587_5(int) = Store[?] : &:r1587_4, r1587_1 -# 1588| r1588_1(glval) = VariableAddress[rr] : -# 1588| r1588_2(glval) = VariableAddress[r] : -# 1588| r1588_3(int &) = Load[r] : &:r1588_2, ~m? -# 1588| r1588_4(glval) = CopyValue : r1588_3 -# 1588| r1588_5(int &) = CopyValue : r1588_4 -# 1588| mu1588_6(int &) = Store[rr] : &:r1588_1, r1588_5 -# 1589| r1589_1(glval) = VariableAddress[w] : +# 1581| void tuple_structured_binding_ref_get() +# 1581| Block 0 +# 1581| v1581_1(void) = EnterFunction : +# 1581| mu1581_2(unknown) = AliasedDefinition : +# 1581| mu1581_3(unknown) = InitializeNonLocal : +# 1582| r1582_1(glval) = VariableAddress[t] : +# 1582| mu1582_2(StructuredBindingTupleRefGet) = Uninitialized[t] : &:r1582_1 +# 1582| r1582_3(glval) = FunctionAddress[StructuredBindingTupleRefGet] : +# 1582| v1582_4(void) = Call[StructuredBindingTupleRefGet] : func:r1582_3, this:r1582_1 +# 1582| mu1582_5(unknown) = ^CallSideEffect : ~m? +# 1582| mu1582_6(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1582_1 +# 1585| r1585_1(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_2(glval) = VariableAddress[t] : +# 1585| r1585_3(StructuredBindingTupleRefGet) = Load[t] : &:r1585_2, ~m? +# 1585| mu1585_4(StructuredBindingTupleRefGet) = Store[(unnamed local variable)] : &:r1585_1, r1585_3 +# 1585| r1585_5(glval) = VariableAddress[i] : +# 1585| r1585_6(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_7(glval) = FunctionAddress[get] : +# 1585| r1585_8(int &) = Call[get] : func:r1585_7, this:r1585_6 +# 1585| mu1585_9(unknown) = ^CallSideEffect : ~m? +# 1585| v1585_10(void) = ^IndirectReadSideEffect[-1] : &:r1585_6, ~m? +# 1585| mu1585_11(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_6 +# 1585| r1585_12(glval) = CopyValue : r1585_8 +# 1585| r1585_13(int &) = CopyValue : r1585_12 +# 1585| mu1585_14(int &) = Store[i] : &:r1585_5, r1585_13 +# 1585| r1585_15(glval) = VariableAddress[d] : +# 1585| r1585_16(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_17(glval) = FunctionAddress[get] : +# 1585| r1585_18(double &) = Call[get] : func:r1585_17, this:r1585_16 +# 1585| mu1585_19(unknown) = ^CallSideEffect : ~m? +# 1585| v1585_20(void) = ^IndirectReadSideEffect[-1] : &:r1585_16, ~m? +# 1585| mu1585_21(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_16 +# 1585| r1585_22(glval) = CopyValue : r1585_18 +# 1585| r1585_23(double &) = CopyValue : r1585_22 +# 1585| mu1585_24(double &) = Store[d] : &:r1585_15, r1585_23 +# 1585| r1585_25(glval) = VariableAddress[r] : +# 1585| r1585_26(glval) = VariableAddress[(unnamed local variable)] : +# 1585| r1585_27(glval) = FunctionAddress[get] : +# 1585| r1585_28(int &) = Call[get] : func:r1585_27, this:r1585_26 +# 1585| mu1585_29(unknown) = ^CallSideEffect : ~m? +# 1585| v1585_30(void) = ^IndirectReadSideEffect[-1] : &:r1585_26, ~m? +# 1585| mu1585_31(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1585_26 +# 1585| r1585_32(glval) = CopyValue : r1585_28 +# 1585| r1585_33(int &) = CopyValue : r1585_32 +# 1585| mu1585_34(int &) = Store[r] : &:r1585_25, r1585_33 +# 1586| r1586_1(double) = Constant[4.0] : +# 1586| r1586_2(glval) = VariableAddress[d] : +# 1586| r1586_3(double &) = Load[d] : &:r1586_2, ~m? +# 1586| r1586_4(glval) = CopyValue : r1586_3 +# 1586| mu1586_5(double) = Store[?] : &:r1586_4, r1586_1 +# 1587| r1587_1(glval) = VariableAddress[rd] : +# 1587| r1587_2(glval) = VariableAddress[d] : +# 1587| r1587_3(double &) = Load[d] : &:r1587_2, ~m? +# 1587| r1587_4(glval) = CopyValue : r1587_3 +# 1587| r1587_5(double &) = CopyValue : r1587_4 +# 1587| mu1587_6(double &) = Store[rd] : &:r1587_1, r1587_5 +# 1588| r1588_1(glval) = VariableAddress[v] : +# 1588| r1588_2(glval) = VariableAddress[i] : +# 1588| r1588_3(int &) = Load[i] : &:r1588_2, ~m? +# 1588| r1588_4(int) = Load[?] : &:r1588_3, ~m? +# 1588| mu1588_5(int) = Store[v] : &:r1588_1, r1588_4 +# 1589| r1589_1(int) = Constant[5] : # 1589| r1589_2(glval) = VariableAddress[r] : # 1589| r1589_3(int &) = Load[r] : &:r1589_2, ~m? -# 1589| r1589_4(int) = Load[?] : &:r1589_3, ~m? -# 1589| mu1589_5(int) = Store[w] : &:r1589_1, r1589_4 -# 1593| r1593_1(glval) = VariableAddress[unnamed_local_variable] : -# 1593| r1593_2(glval) = VariableAddress[t] : -# 1593| r1593_3(StructuredBindingTupleRefGet) = Load[t] : &:r1593_2, ~m? -# 1593| mu1593_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1593_1, r1593_3 -# 1594| r1594_1(glval) = VariableAddress[i] : -# 1594| r1594_2(glval) = VariableAddress[unnamed_local_variable] : -# 1594| r1594_3(glval) = FunctionAddress[get] : -# 1594| r1594_4(int &) = Call[get] : func:r1594_3, this:r1594_2 -# 1594| mu1594_5(unknown) = ^CallSideEffect : ~m? -# 1594| v1594_6(void) = ^IndirectReadSideEffect[-1] : &:r1594_2, ~m? -# 1594| mu1594_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1594_2 -# 1594| r1594_8(glval) = CopyValue : r1594_4 -# 1594| r1594_9(int &) = CopyValue : r1594_8 -# 1594| mu1594_10(int &) = Store[i] : &:r1594_1, r1594_9 -# 1595| r1595_1(glval) = VariableAddress[d] : -# 1595| r1595_2(glval) = VariableAddress[unnamed_local_variable] : -# 1595| r1595_3(glval) = FunctionAddress[get] : -# 1595| r1595_4(double &) = Call[get] : func:r1595_3, this:r1595_2 -# 1595| mu1595_5(unknown) = ^CallSideEffect : ~m? -# 1595| v1595_6(void) = ^IndirectReadSideEffect[-1] : &:r1595_2, ~m? -# 1595| mu1595_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1595_2 -# 1595| r1595_8(glval) = CopyValue : r1595_4 -# 1595| r1595_9(double &) = CopyValue : r1595_8 -# 1595| mu1595_10(double &) = Store[d] : &:r1595_1, r1595_9 -# 1596| r1596_1(glval) = VariableAddress[r] : +# 1589| r1589_4(glval) = CopyValue : r1589_3 +# 1589| mu1589_5(int) = Store[?] : &:r1589_4, r1589_1 +# 1590| r1590_1(glval) = VariableAddress[rr] : +# 1590| r1590_2(glval) = VariableAddress[r] : +# 1590| r1590_3(int &) = Load[r] : &:r1590_2, ~m? +# 1590| r1590_4(glval) = CopyValue : r1590_3 +# 1590| r1590_5(int &) = CopyValue : r1590_4 +# 1590| mu1590_6(int &) = Store[rr] : &:r1590_1, r1590_5 +# 1591| r1591_1(glval) = VariableAddress[w] : +# 1591| r1591_2(glval) = VariableAddress[r] : +# 1591| r1591_3(int &) = Load[r] : &:r1591_2, ~m? +# 1591| r1591_4(int) = Load[?] : &:r1591_3, ~m? +# 1591| mu1591_5(int) = Store[w] : &:r1591_1, r1591_4 +# 1595| r1595_1(glval) = VariableAddress[unnamed_local_variable] : +# 1595| r1595_2(glval) = VariableAddress[t] : +# 1595| r1595_3(StructuredBindingTupleRefGet) = Load[t] : &:r1595_2, ~m? +# 1595| mu1595_4(StructuredBindingTupleRefGet) = Store[unnamed_local_variable] : &:r1595_1, r1595_3 +# 1596| r1596_1(glval) = VariableAddress[i] : # 1596| r1596_2(glval) = VariableAddress[unnamed_local_variable] : # 1596| r1596_3(glval) = FunctionAddress[get] : # 1596| r1596_4(int &) = Call[get] : func:r1596_3, this:r1596_2 @@ -8778,1219 +8758,1225 @@ ir.cpp: # 1596| mu1596_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1596_2 # 1596| r1596_8(glval) = CopyValue : r1596_4 # 1596| r1596_9(int &) = CopyValue : r1596_8 -# 1596| mu1596_10(int &) = Store[r] : &:r1596_1, r1596_9 -# 1597| r1597_1(double) = Constant[4.0] : -# 1597| r1597_2(glval) = VariableAddress[d] : -# 1597| r1597_3(double &) = Load[d] : &:r1597_2, ~m? -# 1597| r1597_4(glval) = CopyValue : r1597_3 -# 1597| mu1597_5(double) = Store[?] : &:r1597_4, r1597_1 -# 1598| r1598_1(glval) = VariableAddress[rd] : -# 1598| r1598_2(glval) = VariableAddress[d] : -# 1598| r1598_3(double &) = Load[d] : &:r1598_2, ~m? -# 1598| r1598_4(glval) = CopyValue : r1598_3 -# 1598| r1598_5(double &) = CopyValue : r1598_4 -# 1598| mu1598_6(double &) = Store[rd] : &:r1598_1, r1598_5 -# 1599| r1599_1(glval) = VariableAddress[v] : -# 1599| r1599_2(glval) = VariableAddress[i] : -# 1599| r1599_3(int &) = Load[i] : &:r1599_2, ~m? -# 1599| r1599_4(int) = Load[?] : &:r1599_3, ~m? -# 1599| mu1599_5(int) = Store[v] : &:r1599_1, r1599_4 -# 1600| r1600_1(int) = Constant[5] : -# 1600| r1600_2(glval) = VariableAddress[r] : -# 1600| r1600_3(int &) = Load[r] : &:r1600_2, ~m? -# 1600| r1600_4(glval) = CopyValue : r1600_3 -# 1600| mu1600_5(int) = Store[?] : &:r1600_4, r1600_1 -# 1601| r1601_1(glval) = VariableAddress[rr] : -# 1601| r1601_2(glval) = VariableAddress[r] : -# 1601| r1601_3(int &) = Load[r] : &:r1601_2, ~m? -# 1601| r1601_4(glval) = CopyValue : r1601_3 -# 1601| r1601_5(int &) = CopyValue : r1601_4 -# 1601| mu1601_6(int &) = Store[rr] : &:r1601_1, r1601_5 -# 1602| r1602_1(glval) = VariableAddress[w] : +# 1596| mu1596_10(int &) = Store[i] : &:r1596_1, r1596_9 +# 1597| r1597_1(glval) = VariableAddress[d] : +# 1597| r1597_2(glval) = VariableAddress[unnamed_local_variable] : +# 1597| r1597_3(glval) = FunctionAddress[get] : +# 1597| r1597_4(double &) = Call[get] : func:r1597_3, this:r1597_2 +# 1597| mu1597_5(unknown) = ^CallSideEffect : ~m? +# 1597| v1597_6(void) = ^IndirectReadSideEffect[-1] : &:r1597_2, ~m? +# 1597| mu1597_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1597_2 +# 1597| r1597_8(glval) = CopyValue : r1597_4 +# 1597| r1597_9(double &) = CopyValue : r1597_8 +# 1597| mu1597_10(double &) = Store[d] : &:r1597_1, r1597_9 +# 1598| r1598_1(glval) = VariableAddress[r] : +# 1598| r1598_2(glval) = VariableAddress[unnamed_local_variable] : +# 1598| r1598_3(glval) = FunctionAddress[get] : +# 1598| r1598_4(int &) = Call[get] : func:r1598_3, this:r1598_2 +# 1598| mu1598_5(unknown) = ^CallSideEffect : ~m? +# 1598| v1598_6(void) = ^IndirectReadSideEffect[-1] : &:r1598_2, ~m? +# 1598| mu1598_7(StructuredBindingTupleRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1598_2 +# 1598| r1598_8(glval) = CopyValue : r1598_4 +# 1598| r1598_9(int &) = CopyValue : r1598_8 +# 1598| mu1598_10(int &) = Store[r] : &:r1598_1, r1598_9 +# 1599| r1599_1(double) = Constant[4.0] : +# 1599| r1599_2(glval) = VariableAddress[d] : +# 1599| r1599_3(double &) = Load[d] : &:r1599_2, ~m? +# 1599| r1599_4(glval) = CopyValue : r1599_3 +# 1599| mu1599_5(double) = Store[?] : &:r1599_4, r1599_1 +# 1600| r1600_1(glval) = VariableAddress[rd] : +# 1600| r1600_2(glval) = VariableAddress[d] : +# 1600| r1600_3(double &) = Load[d] : &:r1600_2, ~m? +# 1600| r1600_4(glval) = CopyValue : r1600_3 +# 1600| r1600_5(double &) = CopyValue : r1600_4 +# 1600| mu1600_6(double &) = Store[rd] : &:r1600_1, r1600_5 +# 1601| r1601_1(glval) = VariableAddress[v] : +# 1601| r1601_2(glval) = VariableAddress[i] : +# 1601| r1601_3(int &) = Load[i] : &:r1601_2, ~m? +# 1601| r1601_4(int) = Load[?] : &:r1601_3, ~m? +# 1601| mu1601_5(int) = Store[v] : &:r1601_1, r1601_4 +# 1602| r1602_1(int) = Constant[5] : # 1602| r1602_2(glval) = VariableAddress[r] : # 1602| r1602_3(int &) = Load[r] : &:r1602_2, ~m? -# 1602| r1602_4(int) = Load[?] : &:r1602_3, ~m? -# 1602| mu1602_5(int) = Store[w] : &:r1602_1, r1602_4 -# 1604| v1604_1(void) = NoOp : -# 1579| v1579_4(void) = ReturnVoid : -# 1579| v1579_5(void) = AliasedUse : ~m? -# 1579| v1579_6(void) = ExitFunction : +# 1602| r1602_4(glval) = CopyValue : r1602_3 +# 1602| mu1602_5(int) = Store[?] : &:r1602_4, r1602_1 +# 1603| r1603_1(glval) = VariableAddress[rr] : +# 1603| r1603_2(glval) = VariableAddress[r] : +# 1603| r1603_3(int &) = Load[r] : &:r1603_2, ~m? +# 1603| r1603_4(glval) = CopyValue : r1603_3 +# 1603| r1603_5(int &) = CopyValue : r1603_4 +# 1603| mu1603_6(int &) = Store[rr] : &:r1603_1, r1603_5 +# 1604| r1604_1(glval) = VariableAddress[w] : +# 1604| r1604_2(glval) = VariableAddress[r] : +# 1604| r1604_3(int &) = Load[r] : &:r1604_2, ~m? +# 1604| r1604_4(int) = Load[?] : &:r1604_3, ~m? +# 1604| mu1604_5(int) = Store[w] : &:r1604_1, r1604_4 +# 1606| v1606_1(void) = NoOp : +# 1581| v1581_4(void) = ReturnVoid : +# 1581| v1581_5(void) = AliasedUse : ~m? +# 1581| v1581_6(void) = ExitFunction : -# 1606| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() -# 1606| Block 0 -# 1606| v1606_1(void) = EnterFunction : -# 1606| mu1606_2(unknown) = AliasedDefinition : -# 1606| mu1606_3(unknown) = InitializeNonLocal : -# 1606| r1606_4(glval) = VariableAddress[#this] : -# 1606| mu1606_5(glval) = InitializeParameter[#this] : &:r1606_4 -# 1606| r1606_6(glval) = Load[#this] : &:r1606_4, ~m? -# 1606| mu1606_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1606_6 -# 1606| v1606_8(void) = NoOp : -# 1606| v1606_9(void) = ReturnIndirection[#this] : &:r1606_6, ~m? -# 1606| v1606_10(void) = ReturnVoid : -# 1606| v1606_11(void) = AliasedUse : ~m? -# 1606| v1606_12(void) = ExitFunction : +# 1608| void StructuredBindingTupleNoRefGet::StructuredBindingTupleNoRefGet() +# 1608| Block 0 +# 1608| v1608_1(void) = EnterFunction : +# 1608| mu1608_2(unknown) = AliasedDefinition : +# 1608| mu1608_3(unknown) = InitializeNonLocal : +# 1608| r1608_4(glval) = VariableAddress[#this] : +# 1608| mu1608_5(glval) = InitializeParameter[#this] : &:r1608_4 +# 1608| r1608_6(glval) = Load[#this] : &:r1608_4, ~m? +# 1608| mu1608_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1608_6 +# 1608| v1608_8(void) = NoOp : +# 1608| v1608_9(void) = ReturnIndirection[#this] : &:r1608_6, ~m? +# 1608| v1608_10(void) = ReturnVoid : +# 1608| v1608_11(void) = AliasedUse : ~m? +# 1608| v1608_12(void) = ExitFunction : -# 1633| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1633| Block 0 -# 1633| v1633_1(void) = EnterFunction : -# 1633| mu1633_2(unknown) = AliasedDefinition : -# 1633| mu1633_3(unknown) = InitializeNonLocal : -# 1633| r1633_4(glval) = VariableAddress[#this] : -# 1633| mu1633_5(glval) = InitializeParameter[#this] : &:r1633_4 -# 1633| r1633_6(glval) = Load[#this] : &:r1633_4, ~m? -# 1633| mu1633_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1633_6 -# 1634| r1634_1(glval) = VariableAddress[#return] : -# 1634| r1634_2(glval) = VariableAddress[#this] : -# 1634| r1634_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1634_2, ~m? -# 1634| r1634_4(glval) = FieldAddress[i] : r1634_3 -# 1634| r1634_5(int) = Load[?] : &:r1634_4, ~m? -# 1634| mu1634_6(int) = Store[#return] : &:r1634_1, r1634_5 -# 1633| v1633_8(void) = ReturnIndirection[#this] : &:r1633_6, ~m? -# 1633| r1633_9(glval) = VariableAddress[#return] : -# 1633| v1633_10(void) = ReturnValue : &:r1633_9, ~m? -# 1633| v1633_11(void) = AliasedUse : ~m? -# 1633| v1633_12(void) = ExitFunction : +# 1635| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1635| Block 0 +# 1635| v1635_1(void) = EnterFunction : +# 1635| mu1635_2(unknown) = AliasedDefinition : +# 1635| mu1635_3(unknown) = InitializeNonLocal : +# 1635| r1635_4(glval) = VariableAddress[#this] : +# 1635| mu1635_5(glval) = InitializeParameter[#this] : &:r1635_4 +# 1635| r1635_6(glval) = Load[#this] : &:r1635_4, ~m? +# 1635| mu1635_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1635_6 +# 1636| r1636_1(glval) = VariableAddress[#return] : +# 1636| r1636_2(glval) = VariableAddress[#this] : +# 1636| r1636_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1636_2, ~m? +# 1636| r1636_4(glval) = FieldAddress[i] : r1636_3 +# 1636| r1636_5(int) = Load[?] : &:r1636_4, ~m? +# 1636| mu1636_6(int) = Store[#return] : &:r1636_1, r1636_5 +# 1635| v1635_8(void) = ReturnIndirection[#this] : &:r1635_6, ~m? +# 1635| r1635_9(glval) = VariableAddress[#return] : +# 1635| v1635_10(void) = ReturnValue : &:r1635_9, ~m? +# 1635| v1635_11(void) = AliasedUse : ~m? +# 1635| v1635_12(void) = ExitFunction : -# 1637| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1637| Block 0 -# 1637| v1637_1(void) = EnterFunction : -# 1637| mu1637_2(unknown) = AliasedDefinition : -# 1637| mu1637_3(unknown) = InitializeNonLocal : -# 1637| r1637_4(glval) = VariableAddress[#this] : -# 1637| mu1637_5(glval) = InitializeParameter[#this] : &:r1637_4 -# 1637| r1637_6(glval) = Load[#this] : &:r1637_4, ~m? -# 1637| mu1637_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1637_6 -# 1638| r1638_1(glval) = VariableAddress[#return] : -# 1638| r1638_2(glval) = VariableAddress[#this] : -# 1638| r1638_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1638_2, ~m? -# 1638| r1638_4(glval) = FieldAddress[r] : r1638_3 -# 1638| r1638_5(int &) = Load[?] : &:r1638_4, ~m? -# 1638| r1638_6(glval) = CopyValue : r1638_5 -# 1638| r1638_7(int &) = CopyValue : r1638_6 -# 1638| mu1638_8(int &) = Store[#return] : &:r1638_1, r1638_7 -# 1637| v1637_8(void) = ReturnIndirection[#this] : &:r1637_6, ~m? -# 1637| r1637_9(glval) = VariableAddress[#return] : -# 1637| v1637_10(void) = ReturnValue : &:r1637_9, ~m? -# 1637| v1637_11(void) = AliasedUse : ~m? -# 1637| v1637_12(void) = ExitFunction : +# 1639| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1639| Block 0 +# 1639| v1639_1(void) = EnterFunction : +# 1639| mu1639_2(unknown) = AliasedDefinition : +# 1639| mu1639_3(unknown) = InitializeNonLocal : +# 1639| r1639_4(glval) = VariableAddress[#this] : +# 1639| mu1639_5(glval) = InitializeParameter[#this] : &:r1639_4 +# 1639| r1639_6(glval) = Load[#this] : &:r1639_4, ~m? +# 1639| mu1639_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1639_6 +# 1640| r1640_1(glval) = VariableAddress[#return] : +# 1640| r1640_2(glval) = VariableAddress[#this] : +# 1640| r1640_3(StructuredBindingTupleNoRefGet *) = Load[#this] : &:r1640_2, ~m? +# 1640| r1640_4(glval) = FieldAddress[r] : r1640_3 +# 1640| r1640_5(int &) = Load[?] : &:r1640_4, ~m? +# 1640| r1640_6(glval) = CopyValue : r1640_5 +# 1640| r1640_7(int &) = CopyValue : r1640_6 +# 1640| mu1640_8(int &) = Store[#return] : &:r1640_1, r1640_7 +# 1639| v1639_8(void) = ReturnIndirection[#this] : &:r1639_6, ~m? +# 1639| r1639_9(glval) = VariableAddress[#return] : +# 1639| v1639_10(void) = ReturnValue : &:r1639_9, ~m? +# 1639| v1639_11(void) = AliasedUse : ~m? +# 1639| v1639_12(void) = ExitFunction : -# 1641| std::tuple_element::type StructuredBindingTupleNoRefGet::get() -# 1641| Block 0 -# 1641| v1641_1(void) = EnterFunction : -# 1641| mu1641_2(unknown) = AliasedDefinition : -# 1641| mu1641_3(unknown) = InitializeNonLocal : -# 1641| r1641_4(glval) = VariableAddress[#this] : -# 1641| mu1641_5(glval) = InitializeParameter[#this] : &:r1641_4 -# 1641| r1641_6(glval) = Load[#this] : &:r1641_4, ~m? -# 1641| mu1641_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1641_6 -# 1642| r1642_1(glval) = VariableAddress[#return] : -# 1642| r1642_2(glval) = VariableAddress[#temp1642:12] : -# 1642| r1642_3(int) = Constant[5] : -# 1642| mu1642_4(int) = Store[#temp1642:12] : &:r1642_2, r1642_3 -# 1642| r1642_5(int &) = CopyValue : r1642_2 -# 1642| mu1642_6(int &&) = Store[#return] : &:r1642_1, r1642_5 -# 1641| v1641_8(void) = ReturnIndirection[#this] : &:r1641_6, ~m? -# 1641| r1641_9(glval) = VariableAddress[#return] : -# 1641| v1641_10(void) = ReturnValue : &:r1641_9, ~m? -# 1641| v1641_11(void) = AliasedUse : ~m? -# 1641| v1641_12(void) = ExitFunction : +# 1643| std::tuple_element::type StructuredBindingTupleNoRefGet::get() +# 1643| Block 0 +# 1643| v1643_1(void) = EnterFunction : +# 1643| mu1643_2(unknown) = AliasedDefinition : +# 1643| mu1643_3(unknown) = InitializeNonLocal : +# 1643| r1643_4(glval) = VariableAddress[#this] : +# 1643| mu1643_5(glval) = InitializeParameter[#this] : &:r1643_4 +# 1643| r1643_6(glval) = Load[#this] : &:r1643_4, ~m? +# 1643| mu1643_7(StructuredBindingTupleNoRefGet) = InitializeIndirection[#this] : &:r1643_6 +# 1644| r1644_1(glval) = VariableAddress[#return] : +# 1644| r1644_2(glval) = VariableAddress[#temp1644:12] : +# 1644| r1644_3(int) = Constant[5] : +# 1644| mu1644_4(int) = Store[#temp1644:12] : &:r1644_2, r1644_3 +# 1644| r1644_5(int &) = CopyValue : r1644_2 +# 1644| mu1644_6(int &&) = Store[#return] : &:r1644_1, r1644_5 +# 1643| v1643_8(void) = ReturnIndirection[#this] : &:r1643_6, ~m? +# 1643| r1643_9(glval) = VariableAddress[#return] : +# 1643| v1643_10(void) = ReturnValue : &:r1643_9, ~m? +# 1643| v1643_11(void) = AliasedUse : ~m? +# 1643| v1643_12(void) = ExitFunction : -# 1645| void tuple_structured_binding_no_ref_get() -# 1645| Block 0 -# 1645| v1645_1(void) = EnterFunction : -# 1645| mu1645_2(unknown) = AliasedDefinition : -# 1645| mu1645_3(unknown) = InitializeNonLocal : -# 1646| r1646_1(glval) = VariableAddress[t] : -# 1646| mu1646_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1646_1 -# 1646| r1646_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : -# 1646| v1646_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1646_3, this:r1646_1 -# 1646| mu1646_5(unknown) = ^CallSideEffect : ~m? -# 1646| mu1646_6(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1646_1 -# 1649| r1649_1(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_2(glval) = VariableAddress[t] : -# 1649| r1649_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1649_2 -# 1649| mu1649_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1649_1, r1649_3 -# 1649| r1649_5(glval) = VariableAddress[i] : -# 1649| r1649_6(glval) = VariableAddress[#temp1649:16] : -# 1649| r1649_7(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_7, ~m? -# 1649| r1649_9(glval) = CopyValue : r1649_8 -# 1649| r1649_10(glval) = FunctionAddress[get] : -# 1649| r1649_11(int) = Call[get] : func:r1649_10, this:r1649_9 -# 1649| mu1649_12(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_13(void) = ^IndirectReadSideEffect[-1] : &:r1649_9, ~m? -# 1649| mu1649_14(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_9 -# 1649| mu1649_15(int) = Store[#temp1649:16] : &:r1649_6, r1649_11 -# 1649| r1649_16(int &) = CopyValue : r1649_6 -# 1649| mu1649_17(int &&) = Store[i] : &:r1649_5, r1649_16 -# 1649| r1649_18(glval) = VariableAddress[r] : -# 1649| r1649_19(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_19, ~m? -# 1649| r1649_21(glval) = CopyValue : r1649_20 -# 1649| r1649_22(glval) = FunctionAddress[get] : -# 1649| r1649_23(int &) = Call[get] : func:r1649_22, this:r1649_21 -# 1649| mu1649_24(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_25(void) = ^IndirectReadSideEffect[-1] : &:r1649_21, ~m? -# 1649| mu1649_26(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_21 -# 1649| r1649_27(glval) = CopyValue : r1649_23 -# 1649| r1649_28(int &) = CopyValue : r1649_27 -# 1649| mu1649_29(int &) = Store[r] : &:r1649_18, r1649_28 -# 1649| r1649_30(glval) = VariableAddress[rv] : -# 1649| r1649_31(glval) = VariableAddress[(unnamed local variable)] : -# 1649| r1649_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1649_31, ~m? -# 1649| r1649_33(glval) = CopyValue : r1649_32 -# 1649| r1649_34(glval) = FunctionAddress[get] : -# 1649| r1649_35(int &&) = Call[get] : func:r1649_34, this:r1649_33 -# 1649| mu1649_36(unknown) = ^CallSideEffect : ~m? -# 1649| v1649_37(void) = ^IndirectReadSideEffect[-1] : &:r1649_33, ~m? -# 1649| mu1649_38(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1649_33 -# 1649| r1649_39(glval) = CopyValue : r1649_35 -# 1649| r1649_40(int &) = CopyValue : r1649_39 -# 1649| mu1649_41(int &&) = Store[rv] : &:r1649_30, r1649_40 -# 1650| r1650_1(int) = Constant[4] : -# 1650| r1650_2(glval) = VariableAddress[i] : -# 1650| r1650_3(int &&) = Load[i] : &:r1650_2, ~m? -# 1650| r1650_4(glval) = CopyValue : r1650_3 -# 1650| mu1650_5(int) = Store[?] : &:r1650_4, r1650_1 -# 1651| r1651_1(glval) = VariableAddress[ri] : -# 1651| r1651_2(glval) = VariableAddress[i] : -# 1651| r1651_3(int &&) = Load[i] : &:r1651_2, ~m? -# 1651| r1651_4(glval) = CopyValue : r1651_3 -# 1651| r1651_5(int &) = CopyValue : r1651_4 -# 1651| mu1651_6(int &) = Store[ri] : &:r1651_1, r1651_5 -# 1652| r1652_1(glval) = VariableAddress[v] : +# 1647| void tuple_structured_binding_no_ref_get() +# 1647| Block 0 +# 1647| v1647_1(void) = EnterFunction : +# 1647| mu1647_2(unknown) = AliasedDefinition : +# 1647| mu1647_3(unknown) = InitializeNonLocal : +# 1648| r1648_1(glval) = VariableAddress[t] : +# 1648| mu1648_2(StructuredBindingTupleNoRefGet) = Uninitialized[t] : &:r1648_1 +# 1648| r1648_3(glval) = FunctionAddress[StructuredBindingTupleNoRefGet] : +# 1648| v1648_4(void) = Call[StructuredBindingTupleNoRefGet] : func:r1648_3, this:r1648_1 +# 1648| mu1648_5(unknown) = ^CallSideEffect : ~m? +# 1648| mu1648_6(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1648_1 +# 1651| r1651_1(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_2(glval) = VariableAddress[t] : +# 1651| r1651_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1651_2 +# 1651| mu1651_4(StructuredBindingTupleNoRefGet &) = Store[(unnamed local variable)] : &:r1651_1, r1651_3 +# 1651| r1651_5(glval) = VariableAddress[i] : +# 1651| r1651_6(glval) = VariableAddress[#temp1651:16] : +# 1651| r1651_7(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_8(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_7, ~m? +# 1651| r1651_9(glval) = CopyValue : r1651_8 +# 1651| r1651_10(glval) = FunctionAddress[get] : +# 1651| r1651_11(int) = Call[get] : func:r1651_10, this:r1651_9 +# 1651| mu1651_12(unknown) = ^CallSideEffect : ~m? +# 1651| v1651_13(void) = ^IndirectReadSideEffect[-1] : &:r1651_9, ~m? +# 1651| mu1651_14(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_9 +# 1651| mu1651_15(int) = Store[#temp1651:16] : &:r1651_6, r1651_11 +# 1651| r1651_16(int &) = CopyValue : r1651_6 +# 1651| mu1651_17(int &&) = Store[i] : &:r1651_5, r1651_16 +# 1651| r1651_18(glval) = VariableAddress[r] : +# 1651| r1651_19(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_20(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_19, ~m? +# 1651| r1651_21(glval) = CopyValue : r1651_20 +# 1651| r1651_22(glval) = FunctionAddress[get] : +# 1651| r1651_23(int &) = Call[get] : func:r1651_22, this:r1651_21 +# 1651| mu1651_24(unknown) = ^CallSideEffect : ~m? +# 1651| v1651_25(void) = ^IndirectReadSideEffect[-1] : &:r1651_21, ~m? +# 1651| mu1651_26(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_21 +# 1651| r1651_27(glval) = CopyValue : r1651_23 +# 1651| r1651_28(int &) = CopyValue : r1651_27 +# 1651| mu1651_29(int &) = Store[r] : &:r1651_18, r1651_28 +# 1651| r1651_30(glval) = VariableAddress[rv] : +# 1651| r1651_31(glval) = VariableAddress[(unnamed local variable)] : +# 1651| r1651_32(StructuredBindingTupleNoRefGet &) = Load[(unnamed local variable)] : &:r1651_31, ~m? +# 1651| r1651_33(glval) = CopyValue : r1651_32 +# 1651| r1651_34(glval) = FunctionAddress[get] : +# 1651| r1651_35(int &&) = Call[get] : func:r1651_34, this:r1651_33 +# 1651| mu1651_36(unknown) = ^CallSideEffect : ~m? +# 1651| v1651_37(void) = ^IndirectReadSideEffect[-1] : &:r1651_33, ~m? +# 1651| mu1651_38(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1651_33 +# 1651| r1651_39(glval) = CopyValue : r1651_35 +# 1651| r1651_40(int &) = CopyValue : r1651_39 +# 1651| mu1651_41(int &&) = Store[rv] : &:r1651_30, r1651_40 +# 1652| r1652_1(int) = Constant[4] : # 1652| r1652_2(glval) = VariableAddress[i] : # 1652| r1652_3(int &&) = Load[i] : &:r1652_2, ~m? -# 1652| r1652_4(int) = Load[?] : &:r1652_3, ~m? -# 1652| mu1652_5(int) = Store[v] : &:r1652_1, r1652_4 -# 1653| r1653_1(int) = Constant[5] : -# 1653| r1653_2(glval) = VariableAddress[r] : -# 1653| r1653_3(int &) = Load[r] : &:r1653_2, ~m? +# 1652| r1652_4(glval) = CopyValue : r1652_3 +# 1652| mu1652_5(int) = Store[?] : &:r1652_4, r1652_1 +# 1653| r1653_1(glval) = VariableAddress[ri] : +# 1653| r1653_2(glval) = VariableAddress[i] : +# 1653| r1653_3(int &&) = Load[i] : &:r1653_2, ~m? # 1653| r1653_4(glval) = CopyValue : r1653_3 -# 1653| mu1653_5(int) = Store[?] : &:r1653_4, r1653_1 -# 1654| r1654_1(glval) = VariableAddress[rr] : -# 1654| r1654_2(glval) = VariableAddress[r] : -# 1654| r1654_3(int &) = Load[r] : &:r1654_2, ~m? -# 1654| r1654_4(glval) = CopyValue : r1654_3 -# 1654| r1654_5(int &) = CopyValue : r1654_4 -# 1654| mu1654_6(int &) = Store[rr] : &:r1654_1, r1654_5 -# 1655| r1655_1(glval) = VariableAddress[w] : +# 1653| r1653_5(int &) = CopyValue : r1653_4 +# 1653| mu1653_6(int &) = Store[ri] : &:r1653_1, r1653_5 +# 1654| r1654_1(glval) = VariableAddress[v] : +# 1654| r1654_2(glval) = VariableAddress[i] : +# 1654| r1654_3(int &&) = Load[i] : &:r1654_2, ~m? +# 1654| r1654_4(int) = Load[?] : &:r1654_3, ~m? +# 1654| mu1654_5(int) = Store[v] : &:r1654_1, r1654_4 +# 1655| r1655_1(int) = Constant[5] : # 1655| r1655_2(glval) = VariableAddress[r] : # 1655| r1655_3(int &) = Load[r] : &:r1655_2, ~m? -# 1655| r1655_4(int) = Load[?] : &:r1655_3, ~m? -# 1655| mu1655_5(int) = Store[w] : &:r1655_1, r1655_4 -# 1659| r1659_1(glval) = VariableAddress[unnamed_local_variable] : -# 1659| r1659_2(glval) = VariableAddress[t] : -# 1659| r1659_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1659_2 -# 1659| mu1659_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1659_1, r1659_3 -# 1660| r1660_1(glval) = VariableAddress[i] : -# 1660| r1660_2(glval) = VariableAddress[#temp1660:20] : -# 1660| r1660_3(glval) = VariableAddress[unnamed_local_variable] : -# 1660| r1660_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1660_3, ~m? -# 1660| r1660_5(glval) = CopyValue : r1660_4 -# 1660| r1660_6(glval) = FunctionAddress[get] : -# 1660| r1660_7(int) = Call[get] : func:r1660_6, this:r1660_5 -# 1660| mu1660_8(unknown) = ^CallSideEffect : ~m? -# 1660| v1660_9(void) = ^IndirectReadSideEffect[-1] : &:r1660_5, ~m? -# 1660| mu1660_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1660_5 -# 1660| mu1660_11(int) = Store[#temp1660:20] : &:r1660_2, r1660_7 -# 1660| r1660_12(int &) = CopyValue : r1660_2 -# 1660| mu1660_13(int &&) = Store[i] : &:r1660_1, r1660_12 -# 1661| r1661_1(glval) = VariableAddress[r] : -# 1661| r1661_2(glval) = VariableAddress[unnamed_local_variable] : -# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1661_2, ~m? -# 1661| r1661_4(glval) = CopyValue : r1661_3 -# 1661| r1661_5(glval) = FunctionAddress[get] : -# 1661| r1661_6(int &) = Call[get] : func:r1661_5, this:r1661_4 -# 1661| mu1661_7(unknown) = ^CallSideEffect : ~m? -# 1661| v1661_8(void) = ^IndirectReadSideEffect[-1] : &:r1661_4, ~m? -# 1661| mu1661_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1661_4 -# 1661| r1661_10(glval) = CopyValue : r1661_6 -# 1661| r1661_11(int &) = CopyValue : r1661_10 -# 1661| mu1661_12(int &) = Store[r] : &:r1661_1, r1661_11 -# 1662| r1662_1(glval) = VariableAddress[rv] : -# 1662| r1662_2(glval) = VariableAddress[unnamed_local_variable] : -# 1662| r1662_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_2, ~m? -# 1662| r1662_4(glval) = CopyValue : r1662_3 -# 1662| r1662_5(glval) = FunctionAddress[get] : -# 1662| r1662_6(int &&) = Call[get] : func:r1662_5, this:r1662_4 -# 1662| mu1662_7(unknown) = ^CallSideEffect : ~m? -# 1662| v1662_8(void) = ^IndirectReadSideEffect[-1] : &:r1662_4, ~m? -# 1662| mu1662_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_4 -# 1662| r1662_10(glval) = CopyValue : r1662_6 -# 1662| r1662_11(int &) = CopyValue : r1662_10 -# 1662| mu1662_12(int &&) = Store[rv] : &:r1662_1, r1662_11 -# 1663| r1663_1(int) = Constant[4] : -# 1663| r1663_2(glval) = VariableAddress[i] : -# 1663| r1663_3(int &&) = Load[i] : &:r1663_2, ~m? -# 1663| r1663_4(glval) = CopyValue : r1663_3 -# 1663| mu1663_5(int) = Store[?] : &:r1663_4, r1663_1 -# 1664| r1664_1(glval) = VariableAddress[ri] : -# 1664| r1664_2(glval) = VariableAddress[i] : -# 1664| r1664_3(int &&) = Load[i] : &:r1664_2, ~m? -# 1664| r1664_4(glval) = CopyValue : r1664_3 -# 1664| r1664_5(int &) = CopyValue : r1664_4 -# 1664| mu1664_6(int &) = Store[ri] : &:r1664_1, r1664_5 -# 1665| r1665_1(glval) = VariableAddress[v] : +# 1655| r1655_4(glval) = CopyValue : r1655_3 +# 1655| mu1655_5(int) = Store[?] : &:r1655_4, r1655_1 +# 1656| r1656_1(glval) = VariableAddress[rr] : +# 1656| r1656_2(glval) = VariableAddress[r] : +# 1656| r1656_3(int &) = Load[r] : &:r1656_2, ~m? +# 1656| r1656_4(glval) = CopyValue : r1656_3 +# 1656| r1656_5(int &) = CopyValue : r1656_4 +# 1656| mu1656_6(int &) = Store[rr] : &:r1656_1, r1656_5 +# 1657| r1657_1(glval) = VariableAddress[w] : +# 1657| r1657_2(glval) = VariableAddress[r] : +# 1657| r1657_3(int &) = Load[r] : &:r1657_2, ~m? +# 1657| r1657_4(int) = Load[?] : &:r1657_3, ~m? +# 1657| mu1657_5(int) = Store[w] : &:r1657_1, r1657_4 +# 1661| r1661_1(glval) = VariableAddress[unnamed_local_variable] : +# 1661| r1661_2(glval) = VariableAddress[t] : +# 1661| r1661_3(StructuredBindingTupleNoRefGet &) = CopyValue : r1661_2 +# 1661| mu1661_4(StructuredBindingTupleNoRefGet &) = Store[unnamed_local_variable] : &:r1661_1, r1661_3 +# 1662| r1662_1(glval) = VariableAddress[i] : +# 1662| r1662_2(glval) = VariableAddress[#temp1662:20] : +# 1662| r1662_3(glval) = VariableAddress[unnamed_local_variable] : +# 1662| r1662_4(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1662_3, ~m? +# 1662| r1662_5(glval) = CopyValue : r1662_4 +# 1662| r1662_6(glval) = FunctionAddress[get] : +# 1662| r1662_7(int) = Call[get] : func:r1662_6, this:r1662_5 +# 1662| mu1662_8(unknown) = ^CallSideEffect : ~m? +# 1662| v1662_9(void) = ^IndirectReadSideEffect[-1] : &:r1662_5, ~m? +# 1662| mu1662_10(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1662_5 +# 1662| mu1662_11(int) = Store[#temp1662:20] : &:r1662_2, r1662_7 +# 1662| r1662_12(int &) = CopyValue : r1662_2 +# 1662| mu1662_13(int &&) = Store[i] : &:r1662_1, r1662_12 +# 1663| r1663_1(glval) = VariableAddress[r] : +# 1663| r1663_2(glval) = VariableAddress[unnamed_local_variable] : +# 1663| r1663_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1663_2, ~m? +# 1663| r1663_4(glval) = CopyValue : r1663_3 +# 1663| r1663_5(glval) = FunctionAddress[get] : +# 1663| r1663_6(int &) = Call[get] : func:r1663_5, this:r1663_4 +# 1663| mu1663_7(unknown) = ^CallSideEffect : ~m? +# 1663| v1663_8(void) = ^IndirectReadSideEffect[-1] : &:r1663_4, ~m? +# 1663| mu1663_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1663_4 +# 1663| r1663_10(glval) = CopyValue : r1663_6 +# 1663| r1663_11(int &) = CopyValue : r1663_10 +# 1663| mu1663_12(int &) = Store[r] : &:r1663_1, r1663_11 +# 1664| r1664_1(glval) = VariableAddress[rv] : +# 1664| r1664_2(glval) = VariableAddress[unnamed_local_variable] : +# 1664| r1664_3(StructuredBindingTupleNoRefGet &) = Load[unnamed_local_variable] : &:r1664_2, ~m? +# 1664| r1664_4(glval) = CopyValue : r1664_3 +# 1664| r1664_5(glval) = FunctionAddress[get] : +# 1664| r1664_6(int &&) = Call[get] : func:r1664_5, this:r1664_4 +# 1664| mu1664_7(unknown) = ^CallSideEffect : ~m? +# 1664| v1664_8(void) = ^IndirectReadSideEffect[-1] : &:r1664_4, ~m? +# 1664| mu1664_9(StructuredBindingTupleNoRefGet) = ^IndirectMayWriteSideEffect[-1] : &:r1664_4 +# 1664| r1664_10(glval) = CopyValue : r1664_6 +# 1664| r1664_11(int &) = CopyValue : r1664_10 +# 1664| mu1664_12(int &&) = Store[rv] : &:r1664_1, r1664_11 +# 1665| r1665_1(int) = Constant[4] : # 1665| r1665_2(glval) = VariableAddress[i] : # 1665| r1665_3(int &&) = Load[i] : &:r1665_2, ~m? -# 1665| r1665_4(int) = Load[?] : &:r1665_3, ~m? -# 1665| mu1665_5(int) = Store[v] : &:r1665_1, r1665_4 -# 1666| r1666_1(int) = Constant[5] : -# 1666| r1666_2(glval) = VariableAddress[r] : -# 1666| r1666_3(int &) = Load[r] : &:r1666_2, ~m? +# 1665| r1665_4(glval) = CopyValue : r1665_3 +# 1665| mu1665_5(int) = Store[?] : &:r1665_4, r1665_1 +# 1666| r1666_1(glval) = VariableAddress[ri] : +# 1666| r1666_2(glval) = VariableAddress[i] : +# 1666| r1666_3(int &&) = Load[i] : &:r1666_2, ~m? # 1666| r1666_4(glval) = CopyValue : r1666_3 -# 1666| mu1666_5(int) = Store[?] : &:r1666_4, r1666_1 -# 1667| r1667_1(glval) = VariableAddress[rr] : -# 1667| r1667_2(glval) = VariableAddress[r] : -# 1667| r1667_3(int &) = Load[r] : &:r1667_2, ~m? -# 1667| r1667_4(glval) = CopyValue : r1667_3 -# 1667| r1667_5(int &) = CopyValue : r1667_4 -# 1667| mu1667_6(int &) = Store[rr] : &:r1667_1, r1667_5 -# 1668| r1668_1(glval) = VariableAddress[w] : +# 1666| r1666_5(int &) = CopyValue : r1666_4 +# 1666| mu1666_6(int &) = Store[ri] : &:r1666_1, r1666_5 +# 1667| r1667_1(glval) = VariableAddress[v] : +# 1667| r1667_2(glval) = VariableAddress[i] : +# 1667| r1667_3(int &&) = Load[i] : &:r1667_2, ~m? +# 1667| r1667_4(int) = Load[?] : &:r1667_3, ~m? +# 1667| mu1667_5(int) = Store[v] : &:r1667_1, r1667_4 +# 1668| r1668_1(int) = Constant[5] : # 1668| r1668_2(glval) = VariableAddress[r] : # 1668| r1668_3(int &) = Load[r] : &:r1668_2, ~m? -# 1668| r1668_4(int) = Load[?] : &:r1668_3, ~m? -# 1668| mu1668_5(int) = Store[w] : &:r1668_1, r1668_4 -# 1670| v1670_1(void) = NoOp : -# 1645| v1645_4(void) = ReturnVoid : -# 1645| v1645_5(void) = AliasedUse : ~m? -# 1645| v1645_6(void) = ExitFunction : +# 1668| r1668_4(glval) = CopyValue : r1668_3 +# 1668| mu1668_5(int) = Store[?] : &:r1668_4, r1668_1 +# 1669| r1669_1(glval) = VariableAddress[rr] : +# 1669| r1669_2(glval) = VariableAddress[r] : +# 1669| r1669_3(int &) = Load[r] : &:r1669_2, ~m? +# 1669| r1669_4(glval) = CopyValue : r1669_3 +# 1669| r1669_5(int &) = CopyValue : r1669_4 +# 1669| mu1669_6(int &) = Store[rr] : &:r1669_1, r1669_5 +# 1670| r1670_1(glval) = VariableAddress[w] : +# 1670| r1670_2(glval) = VariableAddress[r] : +# 1670| r1670_3(int &) = Load[r] : &:r1670_2, ~m? +# 1670| r1670_4(int) = Load[?] : &:r1670_3, ~m? +# 1670| mu1670_5(int) = Store[w] : &:r1670_1, r1670_4 +# 1672| v1672_1(void) = NoOp : +# 1647| v1647_4(void) = ReturnVoid : +# 1647| v1647_5(void) = AliasedUse : ~m? +# 1647| v1647_6(void) = ExitFunction : -# 1672| void array_structured_binding_non_ref_init() -# 1672| Block 0 -# 1672| v1672_1(void) = EnterFunction : -# 1672| mu1672_2(unknown) = AliasedDefinition : -# 1672| mu1672_3(unknown) = InitializeNonLocal : -# 1673| r1673_1(glval) = VariableAddress[xs] : -# 1673| mu1673_2(int[2]) = Uninitialized[xs] : &:r1673_1 -# 1673| r1673_3(int) = Constant[0] : -# 1673| r1673_4(glval) = PointerAdd[4] : r1673_1, r1673_3 -# 1673| r1673_5(int) = Constant[1] : -# 1673| mu1673_6(int) = Store[?] : &:r1673_4, r1673_5 -# 1673| r1673_7(int) = Constant[1] : -# 1673| r1673_8(glval) = PointerAdd[4] : r1673_1, r1673_7 -# 1673| r1673_9(int) = Constant[2] : -# 1673| mu1673_10(int) = Store[?] : &:r1673_8, r1673_9 -# 1674| r1674_1(glval) = VariableAddress[(unnamed local variable)] : -# 1674| r1674_2(glval) = VariableAddress[xs] : -# 1674| r1674_3(int[2]) = Load[xs] : &:r1674_2, ~m? -# 1674| mu1674_4(int[2]) = Store[(unnamed local variable)] : &:r1674_1, r1674_3 -# 1674| r1674_5(glval) = VariableAddress[x0] : +# 1674| void array_structured_binding_non_ref_init() +# 1674| Block 0 +# 1674| v1674_1(void) = EnterFunction : +# 1674| mu1674_2(unknown) = AliasedDefinition : +# 1674| mu1674_3(unknown) = InitializeNonLocal : +# 1675| r1675_1(glval) = VariableAddress[xs] : +# 1675| mu1675_2(int[2]) = Uninitialized[xs] : &:r1675_1 +# 1675| r1675_3(int) = Constant[0] : +# 1675| r1675_4(glval) = PointerAdd[4] : r1675_1, r1675_3 +# 1675| r1675_5(int) = Constant[1] : +# 1675| mu1675_6(int) = Store[?] : &:r1675_4, r1675_5 +# 1675| r1675_7(int) = Constant[1] : +# 1675| r1675_8(glval) = PointerAdd[4] : r1675_1, r1675_7 +# 1675| r1675_9(int) = Constant[2] : +# 1675| mu1675_10(int) = Store[?] : &:r1675_8, r1675_9 +# 1676| r1676_1(glval) = VariableAddress[(unnamed local variable)] : +# 1676| r1676_2(glval) = VariableAddress[xs] : +# 1676| r1676_3(int[2]) = Load[xs] : &:r1676_2, ~m? +# 1676| mu1676_4(int[2]) = Store[(unnamed local variable)] : &:r1676_1, r1676_3 +# 1676| r1676_5(glval) = VariableAddress[x0] : #-----| r0_1(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_2(int *) = Convert : r0_1 #-----| r0_3(unsigned long) = Constant[0] : #-----| r0_4(glval) = PointerAdd[4] : r0_2, r0_3 -#-----| mu0_5(int &) = Store[x0] : &:r1674_5, r0_4 -# 1674| r1674_6(glval) = VariableAddress[x1] : +#-----| mu0_5(int &) = Store[x0] : &:r1676_5, r0_4 +# 1676| r1676_6(glval) = VariableAddress[x1] : #-----| r0_6(glval) = VariableAddress[(unnamed local variable)] : #-----| r0_7(int *) = Convert : r0_6 #-----| r0_8(unsigned long) = Constant[1] : #-----| r0_9(glval) = PointerAdd[4] : r0_7, r0_8 -#-----| mu0_10(int &) = Store[x1] : &:r1674_6, r0_9 -# 1675| v1675_1(void) = NoOp : -# 1672| v1672_4(void) = ReturnVoid : -# 1672| v1672_5(void) = AliasedUse : ~m? -# 1672| v1672_6(void) = ExitFunction : +#-----| mu0_10(int &) = Store[x1] : &:r1676_6, r0_9 +# 1677| v1677_1(void) = NoOp : +# 1674| v1674_4(void) = ReturnVoid : +# 1674| v1674_5(void) = AliasedUse : ~m? +# 1674| v1674_6(void) = ExitFunction : -# 1680| void CapturedLambdaMyObj::CapturedLambdaMyObj() -# 1680| Block 0 -# 1680| v1680_1(void) = EnterFunction : -# 1680| mu1680_2(unknown) = AliasedDefinition : -# 1680| mu1680_3(unknown) = InitializeNonLocal : -# 1680| r1680_4(glval) = VariableAddress[#this] : -# 1680| mu1680_5(glval) = InitializeParameter[#this] : &:r1680_4 -# 1680| r1680_6(glval) = Load[#this] : &:r1680_4, ~m? -# 1680| mu1680_7(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1680_6 -# 1680| v1680_8(void) = NoOp : -# 1680| v1680_9(void) = ReturnIndirection[#this] : &:r1680_6, ~m? -# 1680| v1680_10(void) = ReturnVoid : -# 1680| v1680_11(void) = AliasedUse : ~m? -# 1680| v1680_12(void) = ExitFunction : +# 1682| void CapturedLambdaMyObj::CapturedLambdaMyObj() +# 1682| Block 0 +# 1682| v1682_1(void) = EnterFunction : +# 1682| mu1682_2(unknown) = AliasedDefinition : +# 1682| mu1682_3(unknown) = InitializeNonLocal : +# 1682| r1682_4(glval) = VariableAddress[#this] : +# 1682| mu1682_5(glval) = InitializeParameter[#this] : &:r1682_4 +# 1682| r1682_6(glval) = Load[#this] : &:r1682_4, ~m? +# 1682| mu1682_7(CapturedLambdaMyObj) = InitializeIndirection[#this] : &:r1682_6 +# 1682| v1682_8(void) = NoOp : +# 1682| v1682_9(void) = ReturnIndirection[#this] : &:r1682_6, ~m? +# 1682| v1682_10(void) = ReturnVoid : +# 1682| v1682_11(void) = AliasedUse : ~m? +# 1682| v1682_12(void) = ExitFunction : -# 1683| void captured_lambda(int, int&, int&&) -# 1683| Block 0 -# 1683| v1683_1(void) = EnterFunction : -# 1683| mu1683_2(unknown) = AliasedDefinition : -# 1683| mu1683_3(unknown) = InitializeNonLocal : -# 1683| r1683_4(glval) = VariableAddress[x] : -# 1683| mu1683_5(int) = InitializeParameter[x] : &:r1683_4 -# 1683| r1683_6(glval) = VariableAddress[y] : -# 1683| mu1683_7(int &) = InitializeParameter[y] : &:r1683_6 -# 1683| r1683_8(int &) = Load[y] : &:r1683_6, ~m? -# 1683| mu1683_9(unknown) = InitializeIndirection[y] : &:r1683_8 -# 1683| r1683_10(glval) = VariableAddress[z] : -# 1683| mu1683_11(int &&) = InitializeParameter[z] : &:r1683_10 -# 1683| r1683_12(int &&) = Load[z] : &:r1683_10, ~m? -# 1683| mu1683_13(unknown) = InitializeIndirection[z] : &:r1683_12 -# 1685| r1685_1(glval) = VariableAddress[obj1] : -# 1685| r1685_2(glval) = VariableAddress[#temp1685:24] : -# 1685| mu1685_3(CapturedLambdaMyObj) = Uninitialized[#temp1685:24] : &:r1685_2 -# 1685| r1685_4(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1685| v1685_5(void) = Call[CapturedLambdaMyObj] : func:r1685_4, this:r1685_2 -# 1685| mu1685_6(unknown) = ^CallSideEffect : ~m? -# 1685| mu1685_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1685_2 -# 1685| r1685_8(glval) = Convert : r1685_2 -# 1685| r1685_9(CapturedLambdaMyObj &) = CopyValue : r1685_8 -# 1685| mu1685_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1685_1, r1685_9 -# 1686| r1686_1(glval) = VariableAddress[obj2] : -# 1686| mu1686_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1686_1 -# 1686| r1686_3(glval) = FunctionAddress[CapturedLambdaMyObj] : -# 1686| v1686_4(void) = Call[CapturedLambdaMyObj] : func:r1686_3, this:r1686_1 -# 1686| mu1686_5(unknown) = ^CallSideEffect : ~m? -# 1686| mu1686_6(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1686_1 -# 1688| r1688_1(glval) = VariableAddress[lambda_outer] : -# 1688| r1688_2(glval) = VariableAddress[#temp1688:24] : -# 1688| mu1688_3(decltype([...](...){...})) = Uninitialized[#temp1688:24] : &:r1688_2 -# 1688| r1688_4(glval) = FieldAddress[obj1] : r1688_2 -# 1688| r1688_5(glval) = VariableAddress[obj1] : -# 1688| r1688_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1688_5, ~m? -#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1688_6, ~m? -#-----| mu0_2(CapturedLambdaMyObj) = Store[?] : &:r1688_4, r0_1 -# 1688| r1688_7(glval) = FieldAddress[obj2] : r1688_2 -# 1688| r1688_8(glval) = VariableAddress[obj2] : -# 1688| r1688_9(CapturedLambdaMyObj) = Load[obj2] : &:r1688_8, ~m? -# 1688| mu1688_10(CapturedLambdaMyObj) = Store[?] : &:r1688_7, r1688_9 -# 1688| r1688_11(glval) = FieldAddress[x] : r1688_2 -# 1688| r1688_12(glval) = VariableAddress[x] : -# 1688| r1688_13(int) = Load[x] : &:r1688_12, ~m? -# 1688| mu1688_14(int) = Store[?] : &:r1688_11, r1688_13 -# 1688| r1688_15(glval) = FieldAddress[y] : r1688_2 -# 1688| r1688_16(glval) = VariableAddress[y] : -# 1688| r1688_17(int &) = Load[y] : &:r1688_16, ~m? -# 1690| r1690_1(int) = Load[?] : &:r1688_17, ~m? -# 1690| mu1690_2(int) = Store[?] : &:r1688_15, r1690_1 -# 1688| r1688_18(glval) = FieldAddress[z] : r1688_2 -# 1688| r1688_19(glval) = VariableAddress[z] : -# 1688| r1688_20(int &&) = Load[z] : &:r1688_19, ~m? -# 1690| r1690_3(int) = Load[?] : &:r1688_20, ~m? -# 1690| mu1690_4(int) = Store[?] : &:r1688_18, r1690_3 -# 1688| r1688_21(decltype([...](...){...})) = Load[#temp1688:24] : &:r1688_2, ~m? -# 1688| mu1688_22(decltype([...](...){...})) = Store[lambda_outer] : &:r1688_1, r1688_21 -# 1691| v1691_1(void) = NoOp : -# 1683| v1683_14(void) = ReturnIndirection[y] : &:r1683_8, ~m? -# 1683| v1683_15(void) = ReturnIndirection[z] : &:r1683_12, ~m? -# 1683| v1683_16(void) = ReturnVoid : -# 1683| v1683_17(void) = AliasedUse : ~m? -# 1683| v1683_18(void) = ExitFunction : +# 1685| void captured_lambda(int, int&, int&&) +# 1685| Block 0 +# 1685| v1685_1(void) = EnterFunction : +# 1685| mu1685_2(unknown) = AliasedDefinition : +# 1685| mu1685_3(unknown) = InitializeNonLocal : +# 1685| r1685_4(glval) = VariableAddress[x] : +# 1685| mu1685_5(int) = InitializeParameter[x] : &:r1685_4 +# 1685| r1685_6(glval) = VariableAddress[y] : +# 1685| mu1685_7(int &) = InitializeParameter[y] : &:r1685_6 +# 1685| r1685_8(int &) = Load[y] : &:r1685_6, ~m? +# 1685| mu1685_9(unknown) = InitializeIndirection[y] : &:r1685_8 +# 1685| r1685_10(glval) = VariableAddress[z] : +# 1685| mu1685_11(int &&) = InitializeParameter[z] : &:r1685_10 +# 1685| r1685_12(int &&) = Load[z] : &:r1685_10, ~m? +# 1685| mu1685_13(unknown) = InitializeIndirection[z] : &:r1685_12 +# 1687| r1687_1(glval) = VariableAddress[obj1] : +# 1687| r1687_2(glval) = VariableAddress[#temp1687:24] : +# 1687| mu1687_3(CapturedLambdaMyObj) = Uninitialized[#temp1687:24] : &:r1687_2 +# 1687| r1687_4(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1687| v1687_5(void) = Call[CapturedLambdaMyObj] : func:r1687_4, this:r1687_2 +# 1687| mu1687_6(unknown) = ^CallSideEffect : ~m? +# 1687| mu1687_7(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1687_2 +# 1687| r1687_8(glval) = Convert : r1687_2 +# 1687| r1687_9(CapturedLambdaMyObj &) = CopyValue : r1687_8 +# 1687| mu1687_10(CapturedLambdaMyObj &) = Store[obj1] : &:r1687_1, r1687_9 +# 1688| r1688_1(glval) = VariableAddress[obj2] : +# 1688| mu1688_2(CapturedLambdaMyObj) = Uninitialized[obj2] : &:r1688_1 +# 1688| r1688_3(glval) = FunctionAddress[CapturedLambdaMyObj] : +# 1688| v1688_4(void) = Call[CapturedLambdaMyObj] : func:r1688_3, this:r1688_1 +# 1688| mu1688_5(unknown) = ^CallSideEffect : ~m? +# 1688| mu1688_6(CapturedLambdaMyObj) = ^IndirectMayWriteSideEffect[-1] : &:r1688_1 +# 1690| r1690_1(glval) = VariableAddress[lambda_outer] : +# 1690| r1690_2(glval) = VariableAddress[#temp1690:24] : +# 1690| mu1690_3(decltype([...](...){...})) = Uninitialized[#temp1690:24] : &:r1690_2 +# 1690| r1690_4(glval) = FieldAddress[obj1] : r1690_2 +# 1690| r1690_5(glval) = VariableAddress[obj1] : +# 1690| r1690_6(CapturedLambdaMyObj &) = Load[obj1] : &:r1690_5, ~m? +#-----| r0_1(CapturedLambdaMyObj) = Load[?] : &:r1690_6, ~m? +#-----| mu0_2(CapturedLambdaMyObj) = Store[?] : &:r1690_4, r0_1 +# 1690| r1690_7(glval) = FieldAddress[obj2] : r1690_2 +# 1690| r1690_8(glval) = VariableAddress[obj2] : +# 1690| r1690_9(CapturedLambdaMyObj) = Load[obj2] : &:r1690_8, ~m? +# 1690| mu1690_10(CapturedLambdaMyObj) = Store[?] : &:r1690_7, r1690_9 +# 1690| r1690_11(glval) = FieldAddress[x] : r1690_2 +# 1690| r1690_12(glval) = VariableAddress[x] : +# 1690| r1690_13(int) = Load[x] : &:r1690_12, ~m? +# 1690| mu1690_14(int) = Store[?] : &:r1690_11, r1690_13 +# 1690| r1690_15(glval) = FieldAddress[y] : r1690_2 +# 1690| r1690_16(glval) = VariableAddress[y] : +# 1690| r1690_17(int &) = Load[y] : &:r1690_16, ~m? +# 1692| r1692_1(int) = Load[?] : &:r1690_17, ~m? +# 1692| mu1692_2(int) = Store[?] : &:r1690_15, r1692_1 +# 1690| r1690_18(glval) = FieldAddress[z] : r1690_2 +# 1690| r1690_19(glval) = VariableAddress[z] : +# 1690| r1690_20(int &&) = Load[z] : &:r1690_19, ~m? +# 1692| r1692_3(int) = Load[?] : &:r1690_20, ~m? +# 1692| mu1692_4(int) = Store[?] : &:r1690_18, r1692_3 +# 1690| r1690_21(decltype([...](...){...})) = Load[#temp1690:24] : &:r1690_2, ~m? +# 1690| mu1690_22(decltype([...](...){...})) = Store[lambda_outer] : &:r1690_1, r1690_21 +# 1693| v1693_1(void) = NoOp : +# 1685| v1685_14(void) = ReturnIndirection[y] : &:r1685_8, ~m? +# 1685| v1685_15(void) = ReturnIndirection[z] : &:r1685_12, ~m? +# 1685| v1685_16(void) = ReturnVoid : +# 1685| v1685_17(void) = AliasedUse : ~m? +# 1685| v1685_18(void) = ExitFunction : -# 1688| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const -# 1688| Block 0 -# 1688| v1688_1(void) = EnterFunction : -# 1688| mu1688_2(unknown) = AliasedDefinition : -# 1688| mu1688_3(unknown) = InitializeNonLocal : -# 1688| r1688_4(glval) = VariableAddress[#this] : -# 1688| mu1688_5(glval) = InitializeParameter[#this] : &:r1688_4 -# 1688| r1688_6(glval) = Load[#this] : &:r1688_4, ~m? -# 1688| mu1688_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1688_6 -# 1689| r1689_1(glval) = VariableAddress[lambda_inner] : -# 1689| r1689_2(glval) = VariableAddress[#temp1689:28] : -# 1689| mu1689_3(decltype([...](...){...})) = Uninitialized[#temp1689:28] : &:r1689_2 -# 1689| r1689_4(glval) = FieldAddress[obj1] : r1689_2 -# 1689| r1689_5(glval) = VariableAddress[#this] : -# 1689| r1689_6(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_5, ~m? -# 1689| r1689_7(glval) = FieldAddress[obj1] : r1689_6 -# 1689| r1689_8(CapturedLambdaMyObj) = Load[?] : &:r1689_7, ~m? -# 1689| mu1689_9(CapturedLambdaMyObj) = Store[?] : &:r1689_4, r1689_8 -# 1689| r1689_10(glval) = FieldAddress[obj2] : r1689_2 -# 1689| r1689_11(glval) = VariableAddress[#this] : -# 1689| r1689_12(lambda [] type at line 1689, col. 29 *) = Load[#this] : &:r1689_11, ~m? -# 1689| r1689_13(glval) = FieldAddress[obj2] : r1689_12 -# 1689| r1689_14(CapturedLambdaMyObj) = Load[?] : &:r1689_13, ~m? -# 1689| mu1689_15(CapturedLambdaMyObj) = Store[?] : &:r1689_10, r1689_14 -# 1689| r1689_16(glval) = FieldAddress[x] : r1689_2 -# 1689| r1689_17(glval) = VariableAddress[#this] : -# 1689| r1689_18(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_17, ~m? -# 1689| r1689_19(glval) = FieldAddress[x] : r1689_18 -# 1689| r1689_20(int) = Load[?] : &:r1689_19, ~m? -# 1689| mu1689_21(int) = Store[?] : &:r1689_16, r1689_20 -# 1689| r1689_22(glval) = FieldAddress[y] : r1689_2 -# 1689| r1689_23(glval) = VariableAddress[#this] : -# 1689| r1689_24(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_23, ~m? -# 1689| r1689_25(glval) = FieldAddress[y] : r1689_24 -# 1689| r1689_26(int) = Load[?] : &:r1689_25, ~m? -# 1689| mu1689_27(int) = Store[?] : &:r1689_22, r1689_26 -# 1689| r1689_28(glval) = FieldAddress[z] : r1689_2 -# 1689| r1689_29(glval) = VariableAddress[#this] : -# 1689| r1689_30(lambda [] type at line 1688, col. 25 *) = Load[#this] : &:r1689_29, ~m? -# 1689| r1689_31(glval) = FieldAddress[z] : r1689_30 -# 1689| r1689_32(int) = Load[?] : &:r1689_31, ~m? -# 1689| mu1689_33(int) = Store[?] : &:r1689_28, r1689_32 -# 1689| r1689_34(decltype([...](...){...})) = Load[#temp1689:28] : &:r1689_2, ~m? -# 1689| mu1689_35(decltype([...](...){...})) = Store[lambda_inner] : &:r1689_1, r1689_34 -# 1690| v1690_1(void) = NoOp : -# 1688| v1688_8(void) = ReturnIndirection[#this] : &:r1688_6, ~m? -# 1688| v1688_9(void) = ReturnVoid : -# 1688| v1688_10(void) = AliasedUse : ~m? -# 1688| v1688_11(void) = ExitFunction : +# 1690| void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const +# 1690| Block 0 +# 1690| v1690_1(void) = EnterFunction : +# 1690| mu1690_2(unknown) = AliasedDefinition : +# 1690| mu1690_3(unknown) = InitializeNonLocal : +# 1690| r1690_4(glval) = VariableAddress[#this] : +# 1690| mu1690_5(glval) = InitializeParameter[#this] : &:r1690_4 +# 1690| r1690_6(glval) = Load[#this] : &:r1690_4, ~m? +# 1690| mu1690_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1690_6 +# 1691| r1691_1(glval) = VariableAddress[lambda_inner] : +# 1691| r1691_2(glval) = VariableAddress[#temp1691:28] : +# 1691| mu1691_3(decltype([...](...){...})) = Uninitialized[#temp1691:28] : &:r1691_2 +# 1691| r1691_4(glval) = FieldAddress[obj1] : r1691_2 +# 1691| r1691_5(glval) = VariableAddress[#this] : +# 1691| r1691_6(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_5, ~m? +# 1691| r1691_7(glval) = FieldAddress[obj1] : r1691_6 +# 1691| r1691_8(CapturedLambdaMyObj) = Load[?] : &:r1691_7, ~m? +# 1691| mu1691_9(CapturedLambdaMyObj) = Store[?] : &:r1691_4, r1691_8 +# 1691| r1691_10(glval) = FieldAddress[obj2] : r1691_2 +# 1691| r1691_11(glval) = VariableAddress[#this] : +# 1691| r1691_12(lambda [] type at line 1691, col. 29 *) = Load[#this] : &:r1691_11, ~m? +# 1691| r1691_13(glval) = FieldAddress[obj2] : r1691_12 +# 1691| r1691_14(CapturedLambdaMyObj) = Load[?] : &:r1691_13, ~m? +# 1691| mu1691_15(CapturedLambdaMyObj) = Store[?] : &:r1691_10, r1691_14 +# 1691| r1691_16(glval) = FieldAddress[x] : r1691_2 +# 1691| r1691_17(glval) = VariableAddress[#this] : +# 1691| r1691_18(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_17, ~m? +# 1691| r1691_19(glval) = FieldAddress[x] : r1691_18 +# 1691| r1691_20(int) = Load[?] : &:r1691_19, ~m? +# 1691| mu1691_21(int) = Store[?] : &:r1691_16, r1691_20 +# 1691| r1691_22(glval) = FieldAddress[y] : r1691_2 +# 1691| r1691_23(glval) = VariableAddress[#this] : +# 1691| r1691_24(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_23, ~m? +# 1691| r1691_25(glval) = FieldAddress[y] : r1691_24 +# 1691| r1691_26(int) = Load[?] : &:r1691_25, ~m? +# 1691| mu1691_27(int) = Store[?] : &:r1691_22, r1691_26 +# 1691| r1691_28(glval) = FieldAddress[z] : r1691_2 +# 1691| r1691_29(glval) = VariableAddress[#this] : +# 1691| r1691_30(lambda [] type at line 1690, col. 25 *) = Load[#this] : &:r1691_29, ~m? +# 1691| r1691_31(glval) = FieldAddress[z] : r1691_30 +# 1691| r1691_32(int) = Load[?] : &:r1691_31, ~m? +# 1691| mu1691_33(int) = Store[?] : &:r1691_28, r1691_32 +# 1691| r1691_34(decltype([...](...){...})) = Load[#temp1691:28] : &:r1691_2, ~m? +# 1691| mu1691_35(decltype([...](...){...})) = Store[lambda_inner] : &:r1691_1, r1691_34 +# 1692| v1692_1(void) = NoOp : +# 1690| v1690_8(void) = ReturnIndirection[#this] : &:r1690_6, ~m? +# 1690| v1690_9(void) = ReturnVoid : +# 1690| v1690_10(void) = AliasedUse : ~m? +# 1690| v1690_11(void) = ExitFunction : -# 1689| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1688, col. 25)::operator()() const)::(lambda [] type at line 1689, col. 29)::operator()() const -# 1689| Block 0 -# 1689| v1689_1(void) = EnterFunction : -# 1689| mu1689_2(unknown) = AliasedDefinition : -# 1689| mu1689_3(unknown) = InitializeNonLocal : -# 1689| r1689_4(glval) = VariableAddress[#this] : -# 1689| mu1689_5(glval) = InitializeParameter[#this] : &:r1689_4 -# 1689| r1689_6(glval) = Load[#this] : &:r1689_4, ~m? -# 1689| mu1689_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1689_6 -# 1689| v1689_8(void) = NoOp : -# 1689| v1689_9(void) = NoOp : -# 1689| v1689_10(void) = ReturnIndirection[#this] : &:r1689_6, ~m? -# 1689| v1689_11(void) = ReturnVoid : -# 1689| v1689_12(void) = AliasedUse : ~m? -# 1689| v1689_13(void) = ExitFunction : +# 1691| void (void (void captured_lambda(int, int&, int&&))::(lambda [] type at line 1690, col. 25)::operator()() const)::(lambda [] type at line 1691, col. 29)::operator()() const +# 1691| Block 0 +# 1691| v1691_1(void) = EnterFunction : +# 1691| mu1691_2(unknown) = AliasedDefinition : +# 1691| mu1691_3(unknown) = InitializeNonLocal : +# 1691| r1691_4(glval) = VariableAddress[#this] : +# 1691| mu1691_5(glval) = InitializeParameter[#this] : &:r1691_4 +# 1691| r1691_6(glval) = Load[#this] : &:r1691_4, ~m? +# 1691| mu1691_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1691_6 +# 1691| v1691_8(void) = NoOp : +# 1691| v1691_9(void) = NoOp : +# 1691| v1691_10(void) = ReturnIndirection[#this] : &:r1691_6, ~m? +# 1691| v1691_11(void) = ReturnVoid : +# 1691| v1691_12(void) = AliasedUse : ~m? +# 1691| v1691_13(void) = ExitFunction : -# 1693| int goto_on_same_line() -# 1693| Block 0 -# 1693| v1693_1(void) = EnterFunction : -# 1693| mu1693_2(unknown) = AliasedDefinition : -# 1693| mu1693_3(unknown) = InitializeNonLocal : -# 1694| r1694_1(glval) = VariableAddress[x] : -# 1694| r1694_2(int) = Constant[42] : -# 1694| mu1694_3(int) = Store[x] : &:r1694_1, r1694_2 -# 1695| v1695_1(void) = NoOp : -# 1695| v1695_2(void) = NoOp : -# 1696| r1696_1(glval) = VariableAddress[#return] : -# 1696| r1696_2(glval) = VariableAddress[x] : -# 1696| r1696_3(int) = Load[x] : &:r1696_2, ~m? -# 1696| mu1696_4(int) = Store[#return] : &:r1696_1, r1696_3 -# 1693| r1693_4(glval) = VariableAddress[#return] : -# 1693| v1693_5(void) = ReturnValue : &:r1693_4, ~m? -# 1693| v1693_6(void) = AliasedUse : ~m? -# 1693| v1693_7(void) = ExitFunction : +# 1695| int goto_on_same_line() +# 1695| Block 0 +# 1695| v1695_1(void) = EnterFunction : +# 1695| mu1695_2(unknown) = AliasedDefinition : +# 1695| mu1695_3(unknown) = InitializeNonLocal : +# 1696| r1696_1(glval) = VariableAddress[x] : +# 1696| r1696_2(int) = Constant[42] : +# 1696| mu1696_3(int) = Store[x] : &:r1696_1, r1696_2 +# 1697| v1697_1(void) = NoOp : +# 1697| v1697_2(void) = NoOp : +# 1698| r1698_1(glval) = VariableAddress[#return] : +# 1698| r1698_2(glval) = VariableAddress[x] : +# 1698| r1698_3(int) = Load[x] : &:r1698_2, ~m? +# 1698| mu1698_4(int) = Store[#return] : &:r1698_1, r1698_3 +# 1695| r1695_4(glval) = VariableAddress[#return] : +# 1695| v1695_5(void) = ReturnValue : &:r1695_4, ~m? +# 1695| v1695_6(void) = AliasedUse : ~m? +# 1695| v1695_7(void) = ExitFunction : -# 1701| void TrivialLambdaClass::m() const -# 1701| Block 0 -# 1701| v1701_1(void) = EnterFunction : -# 1701| mu1701_2(unknown) = AliasedDefinition : -# 1701| mu1701_3(unknown) = InitializeNonLocal : -# 1701| r1701_4(glval) = VariableAddress[#this] : -# 1701| mu1701_5(glval) = InitializeParameter[#this] : &:r1701_4 -# 1701| r1701_6(glval) = Load[#this] : &:r1701_4, ~m? -# 1701| mu1701_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1701_6 -# 1702| r1702_1(glval) = VariableAddress[l_m_outer] : -# 1702| r1702_2(glval) = VariableAddress[#temp1702:25] : -# 1702| mu1702_3(decltype([...](...){...})) = Uninitialized[#temp1702:25] : &:r1702_2 -# 1702| r1702_4(glval) = FieldAddress[(captured this)] : r1702_2 -# 1702| r1702_5(glval) = VariableAddress[#this] : -# 1702| r1702_6(TrivialLambdaClass *) = Load[#this] : &:r1702_5, ~m? -# 1702| r1702_7(TrivialLambdaClass) = Load[?] : &:r1702_6, ~m? -# 1702| mu1702_8(TrivialLambdaClass) = Store[?] : &:r1702_4, r1702_7 -# 1702| r1702_9(decltype([...](...){...})) = Load[#temp1702:25] : &:r1702_2, ~m? -# 1702| mu1702_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1702_1, r1702_9 -# 1709| v1709_1(void) = NoOp : -# 1701| v1701_8(void) = ReturnIndirection[#this] : &:r1701_6, ~m? -# 1701| v1701_9(void) = ReturnVoid : -# 1701| v1701_10(void) = AliasedUse : ~m? -# 1701| v1701_11(void) = ExitFunction : +# 1703| void TrivialLambdaClass::m() const +# 1703| Block 0 +# 1703| v1703_1(void) = EnterFunction : +# 1703| mu1703_2(unknown) = AliasedDefinition : +# 1703| mu1703_3(unknown) = InitializeNonLocal : +# 1703| r1703_4(glval) = VariableAddress[#this] : +# 1703| mu1703_5(glval) = InitializeParameter[#this] : &:r1703_4 +# 1703| r1703_6(glval) = Load[#this] : &:r1703_4, ~m? +# 1703| mu1703_7(TrivialLambdaClass) = InitializeIndirection[#this] : &:r1703_6 +# 1704| r1704_1(glval) = VariableAddress[l_m_outer] : +# 1704| r1704_2(glval) = VariableAddress[#temp1704:25] : +# 1704| mu1704_3(decltype([...](...){...})) = Uninitialized[#temp1704:25] : &:r1704_2 +# 1704| r1704_4(glval) = FieldAddress[(captured this)] : r1704_2 +# 1704| r1704_5(glval) = VariableAddress[#this] : +# 1704| r1704_6(TrivialLambdaClass *) = Load[#this] : &:r1704_5, ~m? +# 1704| r1704_7(TrivialLambdaClass) = Load[?] : &:r1704_6, ~m? +# 1704| mu1704_8(TrivialLambdaClass) = Store[?] : &:r1704_4, r1704_7 +# 1704| r1704_9(decltype([...](...){...})) = Load[#temp1704:25] : &:r1704_2, ~m? +# 1704| mu1704_10(decltype([...](...){...})) = Store[l_m_outer] : &:r1704_1, r1704_9 +# 1711| v1711_1(void) = NoOp : +# 1703| v1703_8(void) = ReturnIndirection[#this] : &:r1703_6, ~m? +# 1703| v1703_9(void) = ReturnVoid : +# 1703| v1703_10(void) = AliasedUse : ~m? +# 1703| v1703_11(void) = ExitFunction : -# 1702| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const -# 1702| Block 0 -# 1702| v1702_1(void) = EnterFunction : -# 1702| mu1702_2(unknown) = AliasedDefinition : -# 1702| mu1702_3(unknown) = InitializeNonLocal : -# 1702| r1702_4(glval) = VariableAddress[#this] : -# 1702| mu1702_5(glval) = InitializeParameter[#this] : &:r1702_4 -# 1702| r1702_6(glval) = Load[#this] : &:r1702_4, ~m? -# 1702| mu1702_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1702_6 -# 1703| r1703_1(glval) = VariableAddress[#this] : -# 1703| r1703_2(lambda [] type at line 1702, col. 26 *) = Load[#this] : &:r1703_1, ~m? -# 1703| r1703_3(glval) = FieldAddress[(captured this)] : r1703_2 -# 1703| r1703_4(TrivialLambdaClass *) = CopyValue : r1703_3 -# 1703| r1703_5(glval) = FunctionAddress[m] : -# 1703| v1703_6(void) = Call[m] : func:r1703_5, this:r1703_4 -# 1703| mu1703_7(unknown) = ^CallSideEffect : ~m? -# 1703| v1703_8(void) = ^IndirectReadSideEffect[-1] : &:r1703_4, ~m? -# 1705| r1705_1(glval) = VariableAddress[l_m_inner] : -# 1705| r1705_2(glval) = VariableAddress[#temp1705:29] : -# 1705| mu1705_3(decltype([...](...){...})) = Uninitialized[#temp1705:29] : &:r1705_2 -# 1705| r1705_4(glval) = FieldAddress[(captured this)] : r1705_2 -# 1705| r1705_5(glval) = VariableAddress[#this] : -# 1705| r1705_6(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1705_5, ~m? -# 1705| r1705_7(glval) = FieldAddress[(captured this)] : r1705_6 -# 1705| r1705_8(TrivialLambdaClass) = Load[?] : &:r1705_7, ~m? -# 1705| mu1705_9(TrivialLambdaClass) = Store[?] : &:r1705_4, r1705_8 -# 1705| r1705_10(decltype([...](...){...})) = Load[#temp1705:29] : &:r1705_2, ~m? -# 1705| mu1705_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1705_1, r1705_10 -# 1708| v1708_1(void) = NoOp : -# 1702| v1702_8(void) = ReturnIndirection[#this] : &:r1702_6, ~m? -# 1702| v1702_9(void) = ReturnVoid : -# 1702| v1702_10(void) = AliasedUse : ~m? -# 1702| v1702_11(void) = ExitFunction : +# 1704| void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const +# 1704| Block 0 +# 1704| v1704_1(void) = EnterFunction : +# 1704| mu1704_2(unknown) = AliasedDefinition : +# 1704| mu1704_3(unknown) = InitializeNonLocal : +# 1704| r1704_4(glval) = VariableAddress[#this] : +# 1704| mu1704_5(glval) = InitializeParameter[#this] : &:r1704_4 +# 1704| r1704_6(glval) = Load[#this] : &:r1704_4, ~m? +# 1704| mu1704_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1704_6 +# 1705| r1705_1(glval) = VariableAddress[#this] : +# 1705| r1705_2(lambda [] type at line 1704, col. 26 *) = Load[#this] : &:r1705_1, ~m? +# 1705| r1705_3(glval) = FieldAddress[(captured this)] : r1705_2 +# 1705| r1705_4(TrivialLambdaClass *) = CopyValue : r1705_3 +# 1705| r1705_5(glval) = FunctionAddress[m] : +# 1705| v1705_6(void) = Call[m] : func:r1705_5, this:r1705_4 +# 1705| mu1705_7(unknown) = ^CallSideEffect : ~m? +# 1705| v1705_8(void) = ^IndirectReadSideEffect[-1] : &:r1705_4, ~m? +# 1707| r1707_1(glval) = VariableAddress[l_m_inner] : +# 1707| r1707_2(glval) = VariableAddress[#temp1707:29] : +# 1707| mu1707_3(decltype([...](...){...})) = Uninitialized[#temp1707:29] : &:r1707_2 +# 1707| r1707_4(glval) = FieldAddress[(captured this)] : r1707_2 +# 1707| r1707_5(glval) = VariableAddress[#this] : +# 1707| r1707_6(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1707_5, ~m? +# 1707| r1707_7(glval) = FieldAddress[(captured this)] : r1707_6 +# 1707| r1707_8(TrivialLambdaClass) = Load[?] : &:r1707_7, ~m? +# 1707| mu1707_9(TrivialLambdaClass) = Store[?] : &:r1707_4, r1707_8 +# 1707| r1707_10(decltype([...](...){...})) = Load[#temp1707:29] : &:r1707_2, ~m? +# 1707| mu1707_11(decltype([...](...){...})) = Store[l_m_inner] : &:r1707_1, r1707_10 +# 1710| v1710_1(void) = NoOp : +# 1704| v1704_8(void) = ReturnIndirection[#this] : &:r1704_6, ~m? +# 1704| v1704_9(void) = ReturnVoid : +# 1704| v1704_10(void) = AliasedUse : ~m? +# 1704| v1704_11(void) = ExitFunction : -# 1705| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1702, col. 26)::operator()() const)::(lambda [] type at line 1705, col. 30)::operator()() const -# 1705| Block 0 -# 1705| v1705_1(void) = EnterFunction : -# 1705| mu1705_2(unknown) = AliasedDefinition : -# 1705| mu1705_3(unknown) = InitializeNonLocal : -# 1705| r1705_4(glval) = VariableAddress[#this] : -# 1705| mu1705_5(glval) = InitializeParameter[#this] : &:r1705_4 -# 1705| r1705_6(glval) = Load[#this] : &:r1705_4, ~m? -# 1705| mu1705_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1705_6 -# 1706| r1706_1(glval) = VariableAddress[#this] : -# 1706| r1706_2(lambda [] type at line 1705, col. 30 *) = Load[#this] : &:r1706_1, ~m? -# 1706| r1706_3(glval) = FieldAddress[(captured this)] : r1706_2 -# 1706| r1706_4(TrivialLambdaClass *) = CopyValue : r1706_3 -# 1706| r1706_5(glval) = FunctionAddress[m] : -# 1706| v1706_6(void) = Call[m] : func:r1706_5, this:r1706_4 -# 1706| mu1706_7(unknown) = ^CallSideEffect : ~m? -# 1706| v1706_8(void) = ^IndirectReadSideEffect[-1] : &:r1706_4, ~m? -# 1707| v1707_1(void) = NoOp : -# 1705| v1705_8(void) = ReturnIndirection[#this] : &:r1705_6, ~m? -# 1705| v1705_9(void) = ReturnVoid : -# 1705| v1705_10(void) = AliasedUse : ~m? -# 1705| v1705_11(void) = ExitFunction : +# 1707| void (void (void TrivialLambdaClass::m() const)::(lambda [] type at line 1704, col. 26)::operator()() const)::(lambda [] type at line 1707, col. 30)::operator()() const +# 1707| Block 0 +# 1707| v1707_1(void) = EnterFunction : +# 1707| mu1707_2(unknown) = AliasedDefinition : +# 1707| mu1707_3(unknown) = InitializeNonLocal : +# 1707| r1707_4(glval) = VariableAddress[#this] : +# 1707| mu1707_5(glval) = InitializeParameter[#this] : &:r1707_4 +# 1707| r1707_6(glval) = Load[#this] : &:r1707_4, ~m? +# 1707| mu1707_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1707_6 +# 1708| r1708_1(glval) = VariableAddress[#this] : +# 1708| r1708_2(lambda [] type at line 1707, col. 30 *) = Load[#this] : &:r1708_1, ~m? +# 1708| r1708_3(glval) = FieldAddress[(captured this)] : r1708_2 +# 1708| r1708_4(TrivialLambdaClass *) = CopyValue : r1708_3 +# 1708| r1708_5(glval) = FunctionAddress[m] : +# 1708| v1708_6(void) = Call[m] : func:r1708_5, this:r1708_4 +# 1708| mu1708_7(unknown) = ^CallSideEffect : ~m? +# 1708| v1708_8(void) = ^IndirectReadSideEffect[-1] : &:r1708_4, ~m? +# 1709| v1709_1(void) = NoOp : +# 1707| v1707_8(void) = ReturnIndirection[#this] : &:r1707_6, ~m? +# 1707| v1707_9(void) = ReturnVoid : +# 1707| v1707_10(void) = AliasedUse : ~m? +# 1707| v1707_11(void) = ExitFunction : -# 1712| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) -# 1712| Block 0 -# 1712| v1712_1(void) = EnterFunction : -# 1712| mu1712_2(unknown) = AliasedDefinition : -# 1712| mu1712_3(unknown) = InitializeNonLocal : -# 1712| r1712_4(glval) = VariableAddress[p1] : -# 1712| mu1712_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1712_4 -# 1712| r1712_6(glval) = VariableAddress[p2] : -# 1712| mu1712_7(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1712_6 -# 1712| r1712_8(TrivialLambdaClass &) = Load[p2] : &:r1712_6, ~m? -# 1712| mu1712_9(unknown) = InitializeIndirection[p2] : &:r1712_8 -# 1712| r1712_10(glval) = VariableAddress[p3] : -# 1712| mu1712_11(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1712_10 -# 1712| r1712_12(TrivialLambdaClass &&) = Load[p3] : &:r1712_10, ~m? -# 1712| mu1712_13(unknown) = InitializeIndirection[p3] : &:r1712_12 -# 1713| r1713_1(glval) = VariableAddress[l1] : -# 1713| mu1713_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1713_1 -# 1714| r1714_1(glval) = VariableAddress[l2] : -# 1714| r1714_2(glval) = VariableAddress[#temp1714:36] : -# 1714| r1714_3(TrivialLambdaClass) = Constant[0] : -# 1714| mu1714_4(TrivialLambdaClass) = Store[#temp1714:36] : &:r1714_2, r1714_3 -# 1714| r1714_5(glval) = Convert : r1714_2 -# 1714| r1714_6(TrivialLambdaClass &) = CopyValue : r1714_5 -# 1714| mu1714_7(TrivialLambdaClass &) = Store[l2] : &:r1714_1, r1714_6 -# 1716| r1716_1(glval) = VariableAddress[l_outer1] : -# 1716| r1716_2(glval) = VariableAddress[#temp1716:20] : -# 1716| mu1716_3(decltype([...](...){...})) = Uninitialized[#temp1716:20] : &:r1716_2 -# 1716| r1716_4(glval) = FieldAddress[p1] : r1716_2 -# 1716| r1716_5(glval) = VariableAddress[p1] : -# 1716| r1716_6(TrivialLambdaClass) = Load[p1] : &:r1716_5, ~m? -# 1716| mu1716_7(TrivialLambdaClass) = Store[?] : &:r1716_4, r1716_6 -# 1716| r1716_8(glval) = FieldAddress[p2] : r1716_2 -# 1716| r1716_9(glval) = VariableAddress[p2] : -# 1716| r1716_10(TrivialLambdaClass &) = Load[p2] : &:r1716_9, ~m? -#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1716_10, ~m? -#-----| mu0_2(TrivialLambdaClass) = Store[?] : &:r1716_8, r0_1 -# 1716| r1716_11(glval) = FieldAddress[p3] : r1716_2 -# 1716| r1716_12(glval) = VariableAddress[p3] : -# 1716| r1716_13(TrivialLambdaClass &&) = Load[p3] : &:r1716_12, ~m? -#-----| r0_3(TrivialLambdaClass) = Load[?] : &:r1716_13, ~m? -#-----| mu0_4(TrivialLambdaClass) = Store[?] : &:r1716_11, r0_3 -# 1716| r1716_14(glval) = FieldAddress[l1] : r1716_2 -# 1716| r1716_15(glval) = VariableAddress[l1] : -# 1716| r1716_16(TrivialLambdaClass) = Load[l1] : &:r1716_15, ~m? -# 1716| mu1716_17(TrivialLambdaClass) = Store[?] : &:r1716_14, r1716_16 -# 1716| r1716_18(glval) = FieldAddress[l2] : r1716_2 -# 1716| r1716_19(glval) = VariableAddress[l2] : -# 1716| r1716_20(TrivialLambdaClass &) = Load[l2] : &:r1716_19, ~m? -#-----| r0_5(TrivialLambdaClass) = Load[?] : &:r1716_20, ~m? -#-----| mu0_6(TrivialLambdaClass) = Store[?] : &:r1716_18, r0_5 -# 1716| r1716_21(decltype([...](...){...})) = Load[#temp1716:20] : &:r1716_2, ~m? -# 1716| mu1716_22(decltype([...](...){...})) = Store[l_outer1] : &:r1716_1, r1716_21 -# 1719| v1719_1(void) = NoOp : -# 1712| v1712_14(void) = ReturnIndirection[p2] : &:r1712_8, ~m? -# 1712| v1712_15(void) = ReturnIndirection[p3] : &:r1712_12, ~m? -# 1712| v1712_16(void) = ReturnVoid : -# 1712| v1712_17(void) = AliasedUse : ~m? -# 1712| v1712_18(void) = ExitFunction : +# 1714| void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&) +# 1714| Block 0 +# 1714| v1714_1(void) = EnterFunction : +# 1714| mu1714_2(unknown) = AliasedDefinition : +# 1714| mu1714_3(unknown) = InitializeNonLocal : +# 1714| r1714_4(glval) = VariableAddress[p1] : +# 1714| mu1714_5(TrivialLambdaClass) = InitializeParameter[p1] : &:r1714_4 +# 1714| r1714_6(glval) = VariableAddress[p2] : +# 1714| mu1714_7(TrivialLambdaClass &) = InitializeParameter[p2] : &:r1714_6 +# 1714| r1714_8(TrivialLambdaClass &) = Load[p2] : &:r1714_6, ~m? +# 1714| mu1714_9(unknown) = InitializeIndirection[p2] : &:r1714_8 +# 1714| r1714_10(glval) = VariableAddress[p3] : +# 1714| mu1714_11(TrivialLambdaClass &&) = InitializeParameter[p3] : &:r1714_10 +# 1714| r1714_12(TrivialLambdaClass &&) = Load[p3] : &:r1714_10, ~m? +# 1714| mu1714_13(unknown) = InitializeIndirection[p3] : &:r1714_12 +# 1715| r1715_1(glval) = VariableAddress[l1] : +# 1715| mu1715_2(TrivialLambdaClass) = Uninitialized[l1] : &:r1715_1 +# 1716| r1716_1(glval) = VariableAddress[l2] : +# 1716| r1716_2(glval) = VariableAddress[#temp1716:36] : +# 1716| r1716_3(TrivialLambdaClass) = Constant[0] : +# 1716| mu1716_4(TrivialLambdaClass) = Store[#temp1716:36] : &:r1716_2, r1716_3 +# 1716| r1716_5(glval) = Convert : r1716_2 +# 1716| r1716_6(TrivialLambdaClass &) = CopyValue : r1716_5 +# 1716| mu1716_7(TrivialLambdaClass &) = Store[l2] : &:r1716_1, r1716_6 +# 1718| r1718_1(glval) = VariableAddress[l_outer1] : +# 1718| r1718_2(glval) = VariableAddress[#temp1718:20] : +# 1718| mu1718_3(decltype([...](...){...})) = Uninitialized[#temp1718:20] : &:r1718_2 +# 1718| r1718_4(glval) = FieldAddress[p1] : r1718_2 +# 1718| r1718_5(glval) = VariableAddress[p1] : +# 1718| r1718_6(TrivialLambdaClass) = Load[p1] : &:r1718_5, ~m? +# 1718| mu1718_7(TrivialLambdaClass) = Store[?] : &:r1718_4, r1718_6 +# 1718| r1718_8(glval) = FieldAddress[p2] : r1718_2 +# 1718| r1718_9(glval) = VariableAddress[p2] : +# 1718| r1718_10(TrivialLambdaClass &) = Load[p2] : &:r1718_9, ~m? +#-----| r0_1(TrivialLambdaClass) = Load[?] : &:r1718_10, ~m? +#-----| mu0_2(TrivialLambdaClass) = Store[?] : &:r1718_8, r0_1 +# 1718| r1718_11(glval) = FieldAddress[p3] : r1718_2 +# 1718| r1718_12(glval) = VariableAddress[p3] : +# 1718| r1718_13(TrivialLambdaClass &&) = Load[p3] : &:r1718_12, ~m? +#-----| r0_3(TrivialLambdaClass) = Load[?] : &:r1718_13, ~m? +#-----| mu0_4(TrivialLambdaClass) = Store[?] : &:r1718_11, r0_3 +# 1718| r1718_14(glval) = FieldAddress[l1] : r1718_2 +# 1718| r1718_15(glval) = VariableAddress[l1] : +# 1718| r1718_16(TrivialLambdaClass) = Load[l1] : &:r1718_15, ~m? +# 1718| mu1718_17(TrivialLambdaClass) = Store[?] : &:r1718_14, r1718_16 +# 1718| r1718_18(glval) = FieldAddress[l2] : r1718_2 +# 1718| r1718_19(glval) = VariableAddress[l2] : +# 1718| r1718_20(TrivialLambdaClass &) = Load[l2] : &:r1718_19, ~m? +#-----| r0_5(TrivialLambdaClass) = Load[?] : &:r1718_20, ~m? +#-----| mu0_6(TrivialLambdaClass) = Store[?] : &:r1718_18, r0_5 +# 1718| r1718_21(decltype([...](...){...})) = Load[#temp1718:20] : &:r1718_2, ~m? +# 1718| mu1718_22(decltype([...](...){...})) = Store[l_outer1] : &:r1718_1, r1718_21 +# 1721| v1721_1(void) = NoOp : +# 1714| v1714_14(void) = ReturnIndirection[p2] : &:r1714_8, ~m? +# 1714| v1714_15(void) = ReturnIndirection[p3] : &:r1714_12, ~m? +# 1714| v1714_16(void) = ReturnVoid : +# 1714| v1714_17(void) = AliasedUse : ~m? +# 1714| v1714_18(void) = ExitFunction : -# 1716| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const -# 1716| Block 0 -# 1716| v1716_1(void) = EnterFunction : -# 1716| mu1716_2(unknown) = AliasedDefinition : -# 1716| mu1716_3(unknown) = InitializeNonLocal : -# 1716| r1716_4(glval) = VariableAddress[#this] : -# 1716| mu1716_5(glval) = InitializeParameter[#this] : &:r1716_4 -# 1716| r1716_6(glval) = Load[#this] : &:r1716_4, ~m? -# 1716| mu1716_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1716_6 -# 1717| r1717_1(glval) = VariableAddress[l_inner1] : -# 1717| r1717_2(glval) = VariableAddress[#temp1717:24] : -# 1717| mu1717_3(decltype([...](...){...})) = Uninitialized[#temp1717:24] : &:r1717_2 -# 1717| r1717_4(glval) = FieldAddress[p1] : r1717_2 -# 1717| r1717_5(glval) = VariableAddress[#this] : -# 1717| r1717_6(lambda [] type at line 1717, col. 25 *) = Load[#this] : &:r1717_5, ~m? -# 1717| r1717_7(glval) = FieldAddress[p1] : r1717_6 -# 1717| r1717_8(TrivialLambdaClass) = Load[?] : &:r1717_7, ~m? -# 1717| mu1717_9(TrivialLambdaClass) = Store[?] : &:r1717_4, r1717_8 -# 1717| r1717_10(decltype([...](...){...})) = Load[#temp1717:24] : &:r1717_2, ~m? -# 1717| mu1717_11(decltype([...](...){...})) = Store[l_inner1] : &:r1717_1, r1717_10 -# 1718| v1718_1(void) = NoOp : -# 1716| v1716_8(void) = ReturnIndirection[#this] : &:r1716_6, ~m? -# 1716| v1716_9(void) = ReturnVoid : -# 1716| v1716_10(void) = AliasedUse : ~m? -# 1716| v1716_11(void) = ExitFunction : +# 1718| void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const +# 1718| Block 0 +# 1718| v1718_1(void) = EnterFunction : +# 1718| mu1718_2(unknown) = AliasedDefinition : +# 1718| mu1718_3(unknown) = InitializeNonLocal : +# 1718| r1718_4(glval) = VariableAddress[#this] : +# 1718| mu1718_5(glval) = InitializeParameter[#this] : &:r1718_4 +# 1718| r1718_6(glval) = Load[#this] : &:r1718_4, ~m? +# 1718| mu1718_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1718_6 +# 1719| r1719_1(glval) = VariableAddress[l_inner1] : +# 1719| r1719_2(glval) = VariableAddress[#temp1719:24] : +# 1719| mu1719_3(decltype([...](...){...})) = Uninitialized[#temp1719:24] : &:r1719_2 +# 1719| r1719_4(glval) = FieldAddress[p1] : r1719_2 +# 1719| r1719_5(glval) = VariableAddress[#this] : +# 1719| r1719_6(lambda [] type at line 1719, col. 25 *) = Load[#this] : &:r1719_5, ~m? +# 1719| r1719_7(glval) = FieldAddress[p1] : r1719_6 +# 1719| r1719_8(TrivialLambdaClass) = Load[?] : &:r1719_7, ~m? +# 1719| mu1719_9(TrivialLambdaClass) = Store[?] : &:r1719_4, r1719_8 +# 1719| r1719_10(decltype([...](...){...})) = Load[#temp1719:24] : &:r1719_2, ~m? +# 1719| mu1719_11(decltype([...](...){...})) = Store[l_inner1] : &:r1719_1, r1719_10 +# 1720| v1720_1(void) = NoOp : +# 1718| v1718_8(void) = ReturnIndirection[#this] : &:r1718_6, ~m? +# 1718| v1718_9(void) = ReturnVoid : +# 1718| v1718_10(void) = AliasedUse : ~m? +# 1718| v1718_11(void) = ExitFunction : -# 1717| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1716, col. 21)::operator()() const)::(lambda [] type at line 1717, col. 25)::operator()() const -# 1717| Block 0 -# 1717| v1717_1(void) = EnterFunction : -# 1717| mu1717_2(unknown) = AliasedDefinition : -# 1717| mu1717_3(unknown) = InitializeNonLocal : -# 1717| r1717_4(glval) = VariableAddress[#this] : -# 1717| mu1717_5(glval) = InitializeParameter[#this] : &:r1717_4 -# 1717| r1717_6(glval) = Load[#this] : &:r1717_4, ~m? -# 1717| mu1717_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1717_6 -# 1717| v1717_8(void) = NoOp : -# 1717| v1717_9(void) = ReturnIndirection[#this] : &:r1717_6, ~m? -# 1717| v1717_10(void) = ReturnVoid : -# 1717| v1717_11(void) = AliasedUse : ~m? -# 1717| v1717_12(void) = ExitFunction : +# 1719| void (void (void captured_lambda2(TrivialLambdaClass, TrivialLambdaClass&, TrivialLambdaClass&&))::(lambda [] type at line 1718, col. 21)::operator()() const)::(lambda [] type at line 1719, col. 25)::operator()() const +# 1719| Block 0 +# 1719| v1719_1(void) = EnterFunction : +# 1719| mu1719_2(unknown) = AliasedDefinition : +# 1719| mu1719_3(unknown) = InitializeNonLocal : +# 1719| r1719_4(glval) = VariableAddress[#this] : +# 1719| mu1719_5(glval) = InitializeParameter[#this] : &:r1719_4 +# 1719| r1719_6(glval) = Load[#this] : &:r1719_4, ~m? +# 1719| mu1719_7(decltype([...](...){...})) = InitializeIndirection[#this] : &:r1719_6 +# 1719| v1719_8(void) = NoOp : +# 1719| v1719_9(void) = ReturnIndirection[#this] : &:r1719_6, ~m? +# 1719| v1719_10(void) = ReturnVoid : +# 1719| v1719_11(void) = AliasedUse : ~m? +# 1719| v1719_12(void) = ExitFunction : -# 1724| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() -# 1724| Block 0 -# 1724| v1724_1(void) = EnterFunction : -# 1724| mu1724_2(unknown) = AliasedDefinition : -# 1724| mu1724_3(unknown) = InitializeNonLocal : -# 1724| r1724_4(glval) = VariableAddress[#this] : -# 1724| mu1724_5(glval) = InitializeParameter[#this] : &:r1724_4 -# 1724| r1724_6(glval) = Load[#this] : &:r1724_4, ~m? -# 1724| mu1724_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1724_6 -# 1724| v1724_8(void) = NoOp : -# 1724| v1724_9(void) = ReturnIndirection[#this] : &:r1724_6, ~m? -# 1724| v1724_10(void) = ReturnVoid : -# 1724| v1724_11(void) = AliasedUse : ~m? -# 1724| v1724_12(void) = ExitFunction : +# 1726| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass() +# 1726| Block 0 +# 1726| v1726_1(void) = EnterFunction : +# 1726| mu1726_2(unknown) = AliasedDefinition : +# 1726| mu1726_3(unknown) = InitializeNonLocal : +# 1726| r1726_4(glval) = VariableAddress[#this] : +# 1726| mu1726_5(glval) = InitializeParameter[#this] : &:r1726_4 +# 1726| r1726_6(glval) = Load[#this] : &:r1726_4, ~m? +# 1726| mu1726_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1726_6 +# 1726| v1726_8(void) = NoOp : +# 1726| v1726_9(void) = ReturnIndirection[#this] : &:r1726_6, ~m? +# 1726| v1726_10(void) = ReturnVoid : +# 1726| v1726_11(void) = AliasedUse : ~m? +# 1726| v1726_12(void) = ExitFunction : -# 1725| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) -# 1725| Block 0 -# 1725| v1725_1(void) = EnterFunction : -# 1725| mu1725_2(unknown) = AliasedDefinition : -# 1725| mu1725_3(unknown) = InitializeNonLocal : -# 1725| r1725_4(glval) = VariableAddress[#this] : -# 1725| mu1725_5(glval) = InitializeParameter[#this] : &:r1725_4 -# 1725| r1725_6(glval) = Load[#this] : &:r1725_4, ~m? -# 1725| mu1725_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1725_6 -# 1725| r1725_8(glval) = VariableAddress[c] : -# 1725| mu1725_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1725_8 -# 1725| r1725_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1725_8, ~m? -# 1725| mu1725_11(unknown) = InitializeIndirection[c] : &:r1725_10 -# 1726| r1726_1(glval) = VariableAddress[c] : -# 1726| r1726_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1726_1, ~m? -# 1726| r1726_3(glval) = CopyValue : r1726_2 -# 1726| r1726_4(glval) = FieldAddress[x] : r1726_3 -# 1726| r1726_5(int) = Load[?] : &:r1726_4, ~m? -# 1726| r1726_6(glval) = VariableAddress[#this] : -# 1726| r1726_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1726_6, ~m? -# 1726| r1726_8(glval) = FieldAddress[x] : r1726_7 -# 1726| mu1726_9(int) = Store[?] : &:r1726_8, r1726_5 -# 1727| v1727_1(void) = NoOp : -# 1725| v1725_12(void) = ReturnIndirection[#this] : &:r1725_6, ~m? -# 1725| v1725_13(void) = ReturnIndirection[c] : &:r1725_10, ~m? -# 1725| v1725_14(void) = ReturnVoid : -# 1725| v1725_15(void) = AliasedUse : ~m? -# 1725| v1725_16(void) = ExitFunction : +# 1727| void CopyConstructorWithImplicitArgumentClass::CopyConstructorWithImplicitArgumentClass(CopyConstructorWithImplicitArgumentClass const&) +# 1727| Block 0 +# 1727| v1727_1(void) = EnterFunction : +# 1727| mu1727_2(unknown) = AliasedDefinition : +# 1727| mu1727_3(unknown) = InitializeNonLocal : +# 1727| r1727_4(glval) = VariableAddress[#this] : +# 1727| mu1727_5(glval) = InitializeParameter[#this] : &:r1727_4 +# 1727| r1727_6(glval) = Load[#this] : &:r1727_4, ~m? +# 1727| mu1727_7(CopyConstructorWithImplicitArgumentClass) = InitializeIndirection[#this] : &:r1727_6 +# 1727| r1727_8(glval) = VariableAddress[c] : +# 1727| mu1727_9(CopyConstructorWithImplicitArgumentClass &) = InitializeParameter[c] : &:r1727_8 +# 1727| r1727_10(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1727_8, ~m? +# 1727| mu1727_11(unknown) = InitializeIndirection[c] : &:r1727_10 +# 1728| r1728_1(glval) = VariableAddress[c] : +# 1728| r1728_2(CopyConstructorWithImplicitArgumentClass &) = Load[c] : &:r1728_1, ~m? +# 1728| r1728_3(glval) = CopyValue : r1728_2 +# 1728| r1728_4(glval) = FieldAddress[x] : r1728_3 +# 1728| r1728_5(int) = Load[?] : &:r1728_4, ~m? +# 1728| r1728_6(glval) = VariableAddress[#this] : +# 1728| r1728_7(CopyConstructorWithImplicitArgumentClass *) = Load[#this] : &:r1728_6, ~m? +# 1728| r1728_8(glval) = FieldAddress[x] : r1728_7 +# 1728| mu1728_9(int) = Store[?] : &:r1728_8, r1728_5 +# 1729| v1729_1(void) = NoOp : +# 1727| v1727_12(void) = ReturnIndirection[#this] : &:r1727_6, ~m? +# 1727| v1727_13(void) = ReturnIndirection[c] : &:r1727_10, ~m? +# 1727| v1727_14(void) = ReturnVoid : +# 1727| v1727_15(void) = AliasedUse : ~m? +# 1727| v1727_16(void) = ExitFunction : -# 1733| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() -# 1733| Block 0 -# 1733| v1733_1(void) = EnterFunction : -# 1733| mu1733_2(unknown) = AliasedDefinition : -# 1733| mu1733_3(unknown) = InitializeNonLocal : -# 1733| r1733_4(glval) = VariableAddress[#this] : -# 1733| mu1733_5(glval) = InitializeParameter[#this] : &:r1733_4 -# 1733| r1733_6(glval) = Load[#this] : &:r1733_4, ~m? -# 1733| mu1733_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1733_6 -# 1733| v1733_8(void) = NoOp : -# 1733| v1733_9(void) = ReturnIndirection[#this] : &:r1733_6, ~m? -# 1733| v1733_10(void) = ReturnVoid : -# 1733| v1733_11(void) = AliasedUse : ~m? -# 1733| v1733_12(void) = ExitFunction : +# 1735| void CopyConstructorWithBitwiseCopyClass::CopyConstructorWithBitwiseCopyClass() +# 1735| Block 0 +# 1735| v1735_1(void) = EnterFunction : +# 1735| mu1735_2(unknown) = AliasedDefinition : +# 1735| mu1735_3(unknown) = InitializeNonLocal : +# 1735| r1735_4(glval) = VariableAddress[#this] : +# 1735| mu1735_5(glval) = InitializeParameter[#this] : &:r1735_4 +# 1735| r1735_6(glval) = Load[#this] : &:r1735_4, ~m? +# 1735| mu1735_7(CopyConstructorWithBitwiseCopyClass) = InitializeIndirection[#this] : &:r1735_6 +# 1735| v1735_8(void) = NoOp : +# 1735| v1735_9(void) = ReturnIndirection[#this] : &:r1735_6, ~m? +# 1735| v1735_10(void) = ReturnVoid : +# 1735| v1735_11(void) = AliasedUse : ~m? +# 1735| v1735_12(void) = ExitFunction : -# 1736| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) -# 1736| Block 0 -# 1736| v1736_1(void) = EnterFunction : -# 1736| mu1736_2(unknown) = AliasedDefinition : -# 1736| mu1736_3(unknown) = InitializeNonLocal : -# 1736| r1736_4(glval) = VariableAddress[#this] : -# 1736| mu1736_5(glval) = InitializeParameter[#this] : &:r1736_4 -# 1736| r1736_6(glval) = Load[#this] : &:r1736_4, ~m? -# 1736| mu1736_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1736_6 +# 1738| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass(CopyConstructorTestNonVirtualClass const&) +# 1738| Block 0 +# 1738| v1738_1(void) = EnterFunction : +# 1738| mu1738_2(unknown) = AliasedDefinition : +# 1738| mu1738_3(unknown) = InitializeNonLocal : +# 1738| r1738_4(glval) = VariableAddress[#this] : +# 1738| mu1738_5(glval) = InitializeParameter[#this] : &:r1738_4 +# 1738| r1738_6(glval) = Load[#this] : &:r1738_4, ~m? +# 1738| mu1738_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1738_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1736| r1736_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1736_5 -# 1736| r1736_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1736| r1736_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1736| r1736_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1736_10, ~m? -# 1736| r1736_12(glval) = CopyValue : r1736_11 -# 1736| r1736_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1736_12 -# 1736| r1736_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1736_13 -# 1736| v1736_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1736_9, this:r1736_8, 0:r1736_14 -# 1736| mu1736_16(unknown) = ^CallSideEffect : ~m? -# 1736| v1736_17(void) = ^BufferReadSideEffect[0] : &:r1736_14, ~m? -# 1736| mu1736_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1736_8 -# 1736| v1736_19(void) = NoOp : -# 1736| v1736_20(void) = ReturnIndirection[#this] : &:r1736_6, ~m? +# 1738| r1738_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1738_5 +# 1738| r1738_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1738| r1738_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1738| r1738_11(CopyConstructorTestNonVirtualClass &) = Load[(unnamed parameter 0)] : &:r1738_10, ~m? +# 1738| r1738_12(glval) = CopyValue : r1738_11 +# 1738| r1738_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1738_12 +# 1738| r1738_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1738_13 +# 1738| v1738_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1738_9, this:r1738_8, 0:r1738_14 +# 1738| mu1738_16(unknown) = ^CallSideEffect : ~m? +# 1738| v1738_17(void) = ^BufferReadSideEffect[0] : &:r1738_14, ~m? +# 1738| mu1738_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1738_8 +# 1738| v1738_19(void) = NoOp : +# 1738| v1738_20(void) = ReturnIndirection[#this] : &:r1738_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1736| v1736_21(void) = ReturnVoid : -# 1736| v1736_22(void) = AliasedUse : ~m? -# 1736| v1736_23(void) = ExitFunction : +# 1738| v1738_21(void) = ReturnVoid : +# 1738| v1738_22(void) = AliasedUse : ~m? +# 1738| v1738_23(void) = ExitFunction : -# 1740| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() -# 1740| Block 0 -# 1740| v1740_1(void) = EnterFunction : -# 1740| mu1740_2(unknown) = AliasedDefinition : -# 1740| mu1740_3(unknown) = InitializeNonLocal : -# 1740| r1740_4(glval) = VariableAddress[#this] : -# 1740| mu1740_5(glval) = InitializeParameter[#this] : &:r1740_4 -# 1740| r1740_6(glval) = Load[#this] : &:r1740_4, ~m? -# 1740| mu1740_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1740_6 -# 1740| r1740_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1740_5 -# 1740| r1740_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1740| v1740_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1740_9, this:r1740_8 -# 1740| mu1740_11(unknown) = ^CallSideEffect : ~m? -# 1740| mu1740_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_8 -# 1740| r1740_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1740_5 -# 1740| r1740_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1740| v1740_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1740_14, this:r1740_13 -# 1740| mu1740_16(unknown) = ^CallSideEffect : ~m? -# 1740| mu1740_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1740_13 -# 1740| v1740_18(void) = NoOp : -# 1740| v1740_19(void) = ReturnIndirection[#this] : &:r1740_6, ~m? -# 1740| v1740_20(void) = ReturnVoid : -# 1740| v1740_21(void) = AliasedUse : ~m? -# 1740| v1740_22(void) = ExitFunction : +# 1742| void CopyConstructorTestNonVirtualClass::CopyConstructorTestNonVirtualClass() +# 1742| Block 0 +# 1742| v1742_1(void) = EnterFunction : +# 1742| mu1742_2(unknown) = AliasedDefinition : +# 1742| mu1742_3(unknown) = InitializeNonLocal : +# 1742| r1742_4(glval) = VariableAddress[#this] : +# 1742| mu1742_5(glval) = InitializeParameter[#this] : &:r1742_4 +# 1742| r1742_6(glval) = Load[#this] : &:r1742_4, ~m? +# 1742| mu1742_7(CopyConstructorTestNonVirtualClass) = InitializeIndirection[#this] : &:r1742_6 +# 1742| r1742_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1742_5 +# 1742| r1742_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1742| v1742_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1742_9, this:r1742_8 +# 1742| mu1742_11(unknown) = ^CallSideEffect : ~m? +# 1742| mu1742_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_8 +# 1742| r1742_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestNonVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1742_5 +# 1742| r1742_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1742| v1742_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1742_14, this:r1742_13 +# 1742| mu1742_16(unknown) = ^CallSideEffect : ~m? +# 1742| mu1742_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1742_13 +# 1742| v1742_18(void) = NoOp : +# 1742| v1742_19(void) = ReturnIndirection[#this] : &:r1742_6, ~m? +# 1742| v1742_20(void) = ReturnVoid : +# 1742| v1742_21(void) = AliasedUse : ~m? +# 1742| v1742_22(void) = ExitFunction : -# 1743| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) -# 1743| Block 0 -# 1743| v1743_1(void) = EnterFunction : -# 1743| mu1743_2(unknown) = AliasedDefinition : -# 1743| mu1743_3(unknown) = InitializeNonLocal : -# 1743| r1743_4(glval) = VariableAddress[#this] : -# 1743| mu1743_5(glval) = InitializeParameter[#this] : &:r1743_4 -# 1743| r1743_6(glval) = Load[#this] : &:r1743_4, ~m? -# 1743| mu1743_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1743_6 +# 1745| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass(CopyConstructorTestVirtualClass const&) +# 1745| Block 0 +# 1745| v1745_1(void) = EnterFunction : +# 1745| mu1745_2(unknown) = AliasedDefinition : +# 1745| mu1745_3(unknown) = InitializeNonLocal : +# 1745| r1745_4(glval) = VariableAddress[#this] : +# 1745| mu1745_5(glval) = InitializeParameter[#this] : &:r1745_4 +# 1745| r1745_6(glval) = Load[#this] : &:r1745_4, ~m? +# 1745| mu1745_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1745_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(CopyConstructorTestVirtualClass &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1743| r1743_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1743_5 -# 1743| r1743_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1743| r1743_10(glval) = VariableAddress[(unnamed parameter 0)] : -# 1743| r1743_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1743_10, ~m? -# 1743| r1743_12(glval) = CopyValue : r1743_11 -# 1743| r1743_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1743_12 -# 1743| r1743_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1743_13 -# 1743| v1743_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1743_9, this:r1743_8, 0:r1743_14 -# 1743| mu1743_16(unknown) = ^CallSideEffect : ~m? -# 1743| v1743_17(void) = ^BufferReadSideEffect[0] : &:r1743_14, ~m? -# 1743| mu1743_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1743_8 -# 1743| v1743_19(void) = NoOp : -# 1743| v1743_20(void) = ReturnIndirection[#this] : &:r1743_6, ~m? +# 1745| r1745_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1745_5 +# 1745| r1745_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1745| r1745_10(glval) = VariableAddress[(unnamed parameter 0)] : +# 1745| r1745_11(CopyConstructorTestVirtualClass &) = Load[(unnamed parameter 0)] : &:r1745_10, ~m? +# 1745| r1745_12(glval) = CopyValue : r1745_11 +# 1745| r1745_13(glval) = ConvertToVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : r1745_12 +# 1745| r1745_14(CopyConstructorWithImplicitArgumentClass &) = CopyValue : r1745_13 +# 1745| v1745_15(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1745_9, this:r1745_8, 0:r1745_14 +# 1745| mu1745_16(unknown) = ^CallSideEffect : ~m? +# 1745| v1745_17(void) = ^BufferReadSideEffect[0] : &:r1745_14, ~m? +# 1745| mu1745_18(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1745_8 +# 1745| v1745_19(void) = NoOp : +# 1745| v1745_20(void) = ReturnIndirection[#this] : &:r1745_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1743| v1743_21(void) = ReturnVoid : -# 1743| v1743_22(void) = AliasedUse : ~m? -# 1743| v1743_23(void) = ExitFunction : +# 1745| v1745_21(void) = ReturnVoid : +# 1745| v1745_22(void) = AliasedUse : ~m? +# 1745| v1745_23(void) = ExitFunction : -# 1747| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() -# 1747| Block 0 -# 1747| v1747_1(void) = EnterFunction : -# 1747| mu1747_2(unknown) = AliasedDefinition : -# 1747| mu1747_3(unknown) = InitializeNonLocal : -# 1747| r1747_4(glval) = VariableAddress[#this] : -# 1747| mu1747_5(glval) = InitializeParameter[#this] : &:r1747_4 -# 1747| r1747_6(glval) = Load[#this] : &:r1747_4, ~m? -# 1747| mu1747_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1747_6 -# 1747| r1747_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1747_5 -# 1747| r1747_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : -# 1747| v1747_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1747_9, this:r1747_8 -# 1747| mu1747_11(unknown) = ^CallSideEffect : ~m? -# 1747| mu1747_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_8 -# 1747| r1747_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1747_5 -# 1747| r1747_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : -# 1747| v1747_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1747_14, this:r1747_13 -# 1747| mu1747_16(unknown) = ^CallSideEffect : ~m? -# 1747| mu1747_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1747_13 -# 1747| v1747_18(void) = NoOp : -# 1747| v1747_19(void) = ReturnIndirection[#this] : &:r1747_6, ~m? -# 1747| v1747_20(void) = ReturnVoid : -# 1747| v1747_21(void) = AliasedUse : ~m? -# 1747| v1747_22(void) = ExitFunction : +# 1749| void CopyConstructorTestVirtualClass::CopyConstructorTestVirtualClass() +# 1749| Block 0 +# 1749| v1749_1(void) = EnterFunction : +# 1749| mu1749_2(unknown) = AliasedDefinition : +# 1749| mu1749_3(unknown) = InitializeNonLocal : +# 1749| r1749_4(glval) = VariableAddress[#this] : +# 1749| mu1749_5(glval) = InitializeParameter[#this] : &:r1749_4 +# 1749| r1749_6(glval) = Load[#this] : &:r1749_4, ~m? +# 1749| mu1749_7(CopyConstructorTestVirtualClass) = InitializeIndirection[#this] : &:r1749_6 +# 1749| r1749_8(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithImplicitArgumentClass] : mu1749_5 +# 1749| r1749_9(glval) = FunctionAddress[CopyConstructorWithImplicitArgumentClass] : +# 1749| v1749_10(void) = Call[CopyConstructorWithImplicitArgumentClass] : func:r1749_9, this:r1749_8 +# 1749| mu1749_11(unknown) = ^CallSideEffect : ~m? +# 1749| mu1749_12(CopyConstructorWithImplicitArgumentClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_8 +# 1749| r1749_13(glval) = ConvertToNonVirtualBase[CopyConstructorTestVirtualClass : CopyConstructorWithBitwiseCopyClass] : mu1749_5 +# 1749| r1749_14(glval) = FunctionAddress[CopyConstructorWithBitwiseCopyClass] : +# 1749| v1749_15(void) = Call[CopyConstructorWithBitwiseCopyClass] : func:r1749_14, this:r1749_13 +# 1749| mu1749_16(unknown) = ^CallSideEffect : ~m? +# 1749| mu1749_17(CopyConstructorWithBitwiseCopyClass) = ^IndirectMayWriteSideEffect[-1] : &:r1749_13 +# 1749| v1749_18(void) = NoOp : +# 1749| v1749_19(void) = ReturnIndirection[#this] : &:r1749_6, ~m? +# 1749| v1749_20(void) = ReturnVoid : +# 1749| v1749_21(void) = AliasedUse : ~m? +# 1749| v1749_22(void) = ExitFunction : -# 1750| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) -# 1750| Block 0 -# 1750| v1750_1(void) = EnterFunction : -# 1750| mu1750_2(unknown) = AliasedDefinition : -# 1750| mu1750_3(unknown) = InitializeNonLocal : -# 1751| r1751_1(glval) = VariableAddress[x] : -# 1751| mu1751_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1751_1 -# 1751| r1751_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1751_1, ~m? -# 1751| mu1751_4(unknown) = InitializeIndirection[x] : &:r1751_3 -# 1752| r1752_1(glval) = VariableAddress[y] : -# 1752| mu1752_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1752_1 -# 1752| r1752_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1752_1, ~m? -# 1752| mu1752_4(unknown) = InitializeIndirection[y] : &:r1752_3 -# 1753| r1753_1(glval) = VariableAddress[cx] : -# 1753| mu1753_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1753_1 -# 1753| r1753_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : -# 1753| r1753_4(glval) = VariableAddress[x] : -# 1753| r1753_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_4, ~m? -# 1753| r1753_6(glval) = CopyValue : r1753_5 -# 1753| r1753_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1753_6 -# 1753| v1753_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1753_3, this:r1753_1, 0:r1753_7 -# 1753| mu1753_9(unknown) = ^CallSideEffect : ~m? -# 1753| v1753_10(void) = ^BufferReadSideEffect[0] : &:r1753_7, ~m? -# 1753| mu1753_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1753_1 -# 1754| r1754_1(glval) = VariableAddress[cy] : -# 1754| mu1754_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1754_1 -# 1754| r1754_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : -# 1754| r1754_4(glval) = VariableAddress[y] : -# 1754| r1754_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_4, ~m? -# 1754| r1754_6(glval) = CopyValue : r1754_5 -# 1754| r1754_7(CopyConstructorTestVirtualClass &) = CopyValue : r1754_6 -# 1754| v1754_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1754_3, this:r1754_1, 0:r1754_7 -# 1754| mu1754_9(unknown) = ^CallSideEffect : ~m? -# 1754| v1754_10(void) = ^BufferReadSideEffect[0] : &:r1754_7, ~m? -# 1754| mu1754_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1754_1 -# 1755| r1755_1(glval) = VariableAddress[#return] : -# 1755| mu1755_2(int) = Uninitialized[#return] : &:r1755_1 -# 1751| v1751_5(void) = ReturnIndirection[x] : &:r1751_3, ~m? -# 1752| v1752_5(void) = ReturnIndirection[y] : &:r1752_3, ~m? -# 1750| r1750_4(glval) = VariableAddress[#return] : -# 1750| v1750_5(void) = ReturnValue : &:r1750_4, ~m? -# 1750| v1750_6(void) = AliasedUse : ~m? -# 1750| v1750_7(void) = ExitFunction : +# 1752| int implicit_copy_constructor_test(CopyConstructorTestNonVirtualClass const&, CopyConstructorTestVirtualClass const&) +# 1752| Block 0 +# 1752| v1752_1(void) = EnterFunction : +# 1752| mu1752_2(unknown) = AliasedDefinition : +# 1752| mu1752_3(unknown) = InitializeNonLocal : +# 1753| r1753_1(glval) = VariableAddress[x] : +# 1753| mu1753_2(CopyConstructorTestNonVirtualClass &) = InitializeParameter[x] : &:r1753_1 +# 1753| r1753_3(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1753_1, ~m? +# 1753| mu1753_4(unknown) = InitializeIndirection[x] : &:r1753_3 +# 1754| r1754_1(glval) = VariableAddress[y] : +# 1754| mu1754_2(CopyConstructorTestVirtualClass &) = InitializeParameter[y] : &:r1754_1 +# 1754| r1754_3(CopyConstructorTestVirtualClass &) = Load[y] : &:r1754_1, ~m? +# 1754| mu1754_4(unknown) = InitializeIndirection[y] : &:r1754_3 +# 1755| r1755_1(glval) = VariableAddress[cx] : +# 1755| mu1755_2(CopyConstructorTestNonVirtualClass) = Uninitialized[cx] : &:r1755_1 +# 1755| r1755_3(glval) = FunctionAddress[CopyConstructorTestNonVirtualClass] : +# 1755| r1755_4(glval) = VariableAddress[x] : +# 1755| r1755_5(CopyConstructorTestNonVirtualClass &) = Load[x] : &:r1755_4, ~m? +# 1755| r1755_6(glval) = CopyValue : r1755_5 +# 1755| r1755_7(CopyConstructorTestNonVirtualClass &) = CopyValue : r1755_6 +# 1755| v1755_8(void) = Call[CopyConstructorTestNonVirtualClass] : func:r1755_3, this:r1755_1, 0:r1755_7 +# 1755| mu1755_9(unknown) = ^CallSideEffect : ~m? +# 1755| v1755_10(void) = ^BufferReadSideEffect[0] : &:r1755_7, ~m? +# 1755| mu1755_11(CopyConstructorTestNonVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1755_1 +# 1756| r1756_1(glval) = VariableAddress[cy] : +# 1756| mu1756_2(CopyConstructorTestVirtualClass) = Uninitialized[cy] : &:r1756_1 +# 1756| r1756_3(glval) = FunctionAddress[CopyConstructorTestVirtualClass] : +# 1756| r1756_4(glval) = VariableAddress[y] : +# 1756| r1756_5(CopyConstructorTestVirtualClass &) = Load[y] : &:r1756_4, ~m? +# 1756| r1756_6(glval) = CopyValue : r1756_5 +# 1756| r1756_7(CopyConstructorTestVirtualClass &) = CopyValue : r1756_6 +# 1756| v1756_8(void) = Call[CopyConstructorTestVirtualClass] : func:r1756_3, this:r1756_1, 0:r1756_7 +# 1756| mu1756_9(unknown) = ^CallSideEffect : ~m? +# 1756| v1756_10(void) = ^BufferReadSideEffect[0] : &:r1756_7, ~m? +# 1756| mu1756_11(CopyConstructorTestVirtualClass) = ^IndirectMayWriteSideEffect[-1] : &:r1756_1 +# 1757| r1757_1(glval) = VariableAddress[#return] : +# 1757| mu1757_2(int) = Uninitialized[#return] : &:r1757_1 +# 1753| v1753_5(void) = ReturnIndirection[x] : &:r1753_3, ~m? +# 1754| v1754_5(void) = ReturnIndirection[y] : &:r1754_3, ~m? +# 1752| r1752_4(glval) = VariableAddress[#return] : +# 1752| v1752_5(void) = ReturnValue : &:r1752_4, ~m? +# 1752| v1752_6(void) = AliasedUse : ~m? +# 1752| v1752_7(void) = ExitFunction : -# 1757| void if_initialization(int) -# 1757| Block 0 -# 1757| v1757_1(void) = EnterFunction : -# 1757| mu1757_2(unknown) = AliasedDefinition : -# 1757| mu1757_3(unknown) = InitializeNonLocal : -# 1757| r1757_4(glval) = VariableAddress[x] : -# 1757| mu1757_5(int) = InitializeParameter[x] : &:r1757_4 -# 1758| r1758_1(glval) = VariableAddress[y] : -# 1758| r1758_2(glval) = VariableAddress[x] : -# 1758| r1758_3(int) = Load[x] : &:r1758_2, ~m? -# 1758| mu1758_4(int) = Store[y] : &:r1758_1, r1758_3 -# 1758| r1758_5(glval) = VariableAddress[x] : -# 1758| r1758_6(int) = Load[x] : &:r1758_5, ~m? -# 1758| r1758_7(int) = Constant[1] : -# 1758| r1758_8(int) = Add : r1758_6, r1758_7 -# 1758| r1758_9(int) = Constant[0] : -# 1758| r1758_10(bool) = CompareNE : r1758_8, r1758_9 -# 1758| v1758_11(void) = ConditionalBranch : r1758_10 +# 1759| void if_initialization(int) +# 1759| Block 0 +# 1759| v1759_1(void) = EnterFunction : +# 1759| mu1759_2(unknown) = AliasedDefinition : +# 1759| mu1759_3(unknown) = InitializeNonLocal : +# 1759| r1759_4(glval) = VariableAddress[x] : +# 1759| mu1759_5(int) = InitializeParameter[x] : &:r1759_4 +# 1760| r1760_1(glval) = VariableAddress[y] : +# 1760| r1760_2(glval) = VariableAddress[x] : +# 1760| r1760_3(int) = Load[x] : &:r1760_2, ~m? +# 1760| mu1760_4(int) = Store[y] : &:r1760_1, r1760_3 +# 1760| r1760_5(glval) = VariableAddress[x] : +# 1760| r1760_6(int) = Load[x] : &:r1760_5, ~m? +# 1760| r1760_7(int) = Constant[1] : +# 1760| r1760_8(int) = Add : r1760_6, r1760_7 +# 1760| r1760_9(int) = Constant[0] : +# 1760| r1760_10(bool) = CompareNE : r1760_8, r1760_9 +# 1760| v1760_11(void) = ConditionalBranch : r1760_10 #-----| False -> Block 2 #-----| True -> Block 1 -# 1759| Block 1 -# 1759| r1759_1(glval) = VariableAddress[x] : -# 1759| r1759_2(int) = Load[x] : &:r1759_1, ~m? -# 1759| r1759_3(glval) = VariableAddress[y] : -# 1759| r1759_4(int) = Load[y] : &:r1759_3, ~m? -# 1759| r1759_5(int) = Add : r1759_2, r1759_4 -# 1759| r1759_6(glval) = VariableAddress[x] : -# 1759| mu1759_7(int) = Store[x] : &:r1759_6, r1759_5 +# 1761| Block 1 +# 1761| r1761_1(glval) = VariableAddress[x] : +# 1761| r1761_2(int) = Load[x] : &:r1761_1, ~m? +# 1761| r1761_3(glval) = VariableAddress[y] : +# 1761| r1761_4(int) = Load[y] : &:r1761_3, ~m? +# 1761| r1761_5(int) = Add : r1761_2, r1761_4 +# 1761| r1761_6(glval) = VariableAddress[x] : +# 1761| mu1761_7(int) = Store[x] : &:r1761_6, r1761_5 #-----| Goto -> Block 2 -# 1762| Block 2 -# 1762| r1762_1(glval) = VariableAddress[w] : -# 1762| mu1762_2(int) = Uninitialized[w] : &:r1762_1 -# 1763| r1763_1(glval) = VariableAddress[x] : -# 1763| r1763_2(int) = Load[x] : &:r1763_1, ~m? -# 1763| r1763_3(glval) = VariableAddress[w] : -# 1763| mu1763_4(int) = Store[w] : &:r1763_3, r1763_2 -# 1763| r1763_5(glval) = VariableAddress[x] : -# 1763| r1763_6(int) = Load[x] : &:r1763_5, ~m? -# 1763| r1763_7(int) = Constant[1] : -# 1763| r1763_8(int) = Add : r1763_6, r1763_7 -# 1763| r1763_9(int) = Constant[0] : -# 1763| r1763_10(bool) = CompareNE : r1763_8, r1763_9 -# 1763| v1763_11(void) = ConditionalBranch : r1763_10 +# 1764| Block 2 +# 1764| r1764_1(glval) = VariableAddress[w] : +# 1764| mu1764_2(int) = Uninitialized[w] : &:r1764_1 +# 1765| r1765_1(glval) = VariableAddress[x] : +# 1765| r1765_2(int) = Load[x] : &:r1765_1, ~m? +# 1765| r1765_3(glval) = VariableAddress[w] : +# 1765| mu1765_4(int) = Store[w] : &:r1765_3, r1765_2 +# 1765| r1765_5(glval) = VariableAddress[x] : +# 1765| r1765_6(int) = Load[x] : &:r1765_5, ~m? +# 1765| r1765_7(int) = Constant[1] : +# 1765| r1765_8(int) = Add : r1765_6, r1765_7 +# 1765| r1765_9(int) = Constant[0] : +# 1765| r1765_10(bool) = CompareNE : r1765_8, r1765_9 +# 1765| v1765_11(void) = ConditionalBranch : r1765_10 #-----| False -> Block 4 #-----| True -> Block 3 -# 1764| Block 3 -# 1764| r1764_1(glval) = VariableAddress[x] : -# 1764| r1764_2(int) = Load[x] : &:r1764_1, ~m? -# 1764| r1764_3(glval) = VariableAddress[w] : -# 1764| r1764_4(int) = Load[w] : &:r1764_3, ~m? -# 1764| r1764_5(int) = Add : r1764_2, r1764_4 -# 1764| r1764_6(glval) = VariableAddress[x] : -# 1764| mu1764_7(int) = Store[x] : &:r1764_6, r1764_5 +# 1766| Block 3 +# 1766| r1766_1(glval) = VariableAddress[x] : +# 1766| r1766_2(int) = Load[x] : &:r1766_1, ~m? +# 1766| r1766_3(glval) = VariableAddress[w] : +# 1766| r1766_4(int) = Load[w] : &:r1766_3, ~m? +# 1766| r1766_5(int) = Add : r1766_2, r1766_4 +# 1766| r1766_6(glval) = VariableAddress[x] : +# 1766| mu1766_7(int) = Store[x] : &:r1766_6, r1766_5 #-----| Goto -> Block 4 -# 1767| Block 4 -# 1767| r1767_1(glval) = VariableAddress[x] : -# 1767| r1767_2(int) = Load[x] : &:r1767_1, ~m? -# 1767| r1767_3(glval) = VariableAddress[w] : -# 1767| mu1767_4(int) = Store[w] : &:r1767_3, r1767_2 -# 1767| r1767_5(glval) = VariableAddress[w2] : -# 1767| r1767_6(glval) = VariableAddress[w] : -# 1767| r1767_7(int) = Load[w] : &:r1767_6, ~m? -# 1767| mu1767_8(int) = Store[w2] : &:r1767_5, r1767_7 -# 1767| r1767_9(glval) = VariableAddress[w2] : -# 1767| r1767_10(int) = Load[w2] : &:r1767_9, ~m? -# 1767| r1767_11(int) = Constant[0] : -# 1767| r1767_12(bool) = CompareNE : r1767_10, r1767_11 -# 1767| r1767_13(bool) = CopyValue : r1767_12 -# 1767| v1767_14(void) = ConditionalBranch : r1767_13 +# 1769| Block 4 +# 1769| r1769_1(glval) = VariableAddress[x] : +# 1769| r1769_2(int) = Load[x] : &:r1769_1, ~m? +# 1769| r1769_3(glval) = VariableAddress[w] : +# 1769| mu1769_4(int) = Store[w] : &:r1769_3, r1769_2 +# 1769| r1769_5(glval) = VariableAddress[w2] : +# 1769| r1769_6(glval) = VariableAddress[w] : +# 1769| r1769_7(int) = Load[w] : &:r1769_6, ~m? +# 1769| mu1769_8(int) = Store[w2] : &:r1769_5, r1769_7 +# 1769| r1769_9(glval) = VariableAddress[w2] : +# 1769| r1769_10(int) = Load[w2] : &:r1769_9, ~m? +# 1769| r1769_11(int) = Constant[0] : +# 1769| r1769_12(bool) = CompareNE : r1769_10, r1769_11 +# 1769| r1769_13(bool) = CopyValue : r1769_12 +# 1769| v1769_14(void) = ConditionalBranch : r1769_13 #-----| False -> Block 6 #-----| True -> Block 5 -# 1768| Block 5 -# 1768| r1768_1(glval) = VariableAddress[x] : -# 1768| r1768_2(int) = Load[x] : &:r1768_1, ~m? -# 1768| r1768_3(glval) = VariableAddress[w] : -# 1768| r1768_4(int) = Load[w] : &:r1768_3, ~m? -# 1768| r1768_5(int) = Add : r1768_2, r1768_4 -# 1768| r1768_6(glval) = VariableAddress[x] : -# 1768| mu1768_7(int) = Store[x] : &:r1768_6, r1768_5 +# 1770| Block 5 +# 1770| r1770_1(glval) = VariableAddress[x] : +# 1770| r1770_2(int) = Load[x] : &:r1770_1, ~m? +# 1770| r1770_3(glval) = VariableAddress[w] : +# 1770| r1770_4(int) = Load[w] : &:r1770_3, ~m? +# 1770| r1770_5(int) = Add : r1770_2, r1770_4 +# 1770| r1770_6(glval) = VariableAddress[x] : +# 1770| mu1770_7(int) = Store[x] : &:r1770_6, r1770_5 #-----| Goto -> Block 6 -# 1771| Block 6 -# 1771| r1771_1(glval) = VariableAddress[v] : -# 1771| r1771_2(glval) = VariableAddress[x] : -# 1771| r1771_3(int) = Load[x] : &:r1771_2, ~m? -# 1771| mu1771_4(int) = Store[v] : &:r1771_1, r1771_3 -# 1771| r1771_5(glval) = VariableAddress[v2] : -# 1771| r1771_6(glval) = VariableAddress[v] : -# 1771| r1771_7(int) = Load[v] : &:r1771_6, ~m? -# 1771| mu1771_8(int) = Store[v2] : &:r1771_5, r1771_7 -# 1771| r1771_9(glval) = VariableAddress[v2] : -# 1771| r1771_10(int) = Load[v2] : &:r1771_9, ~m? -# 1771| r1771_11(int) = Constant[0] : -# 1771| r1771_12(bool) = CompareNE : r1771_10, r1771_11 -# 1771| r1771_13(bool) = CopyValue : r1771_12 -# 1771| v1771_14(void) = ConditionalBranch : r1771_13 +# 1773| Block 6 +# 1773| r1773_1(glval) = VariableAddress[v] : +# 1773| r1773_2(glval) = VariableAddress[x] : +# 1773| r1773_3(int) = Load[x] : &:r1773_2, ~m? +# 1773| mu1773_4(int) = Store[v] : &:r1773_1, r1773_3 +# 1773| r1773_5(glval) = VariableAddress[v2] : +# 1773| r1773_6(glval) = VariableAddress[v] : +# 1773| r1773_7(int) = Load[v] : &:r1773_6, ~m? +# 1773| mu1773_8(int) = Store[v2] : &:r1773_5, r1773_7 +# 1773| r1773_9(glval) = VariableAddress[v2] : +# 1773| r1773_10(int) = Load[v2] : &:r1773_9, ~m? +# 1773| r1773_11(int) = Constant[0] : +# 1773| r1773_12(bool) = CompareNE : r1773_10, r1773_11 +# 1773| r1773_13(bool) = CopyValue : r1773_12 +# 1773| v1773_14(void) = ConditionalBranch : r1773_13 #-----| False -> Block 8 #-----| True -> Block 7 -# 1772| Block 7 -# 1772| r1772_1(glval) = VariableAddress[x] : -# 1772| r1772_2(int) = Load[x] : &:r1772_1, ~m? -# 1772| r1772_3(glval) = VariableAddress[v] : -# 1772| r1772_4(int) = Load[v] : &:r1772_3, ~m? -# 1772| r1772_5(int) = Add : r1772_2, r1772_4 -# 1772| r1772_6(glval) = VariableAddress[x] : -# 1772| mu1772_7(int) = Store[x] : &:r1772_6, r1772_5 +# 1774| Block 7 +# 1774| r1774_1(glval) = VariableAddress[x] : +# 1774| r1774_2(int) = Load[x] : &:r1774_1, ~m? +# 1774| r1774_3(glval) = VariableAddress[v] : +# 1774| r1774_4(int) = Load[v] : &:r1774_3, ~m? +# 1774| r1774_5(int) = Add : r1774_2, r1774_4 +# 1774| r1774_6(glval) = VariableAddress[x] : +# 1774| mu1774_7(int) = Store[x] : &:r1774_6, r1774_5 #-----| Goto -> Block 8 -# 1775| Block 8 -# 1775| r1775_1(glval) = VariableAddress[z] : -# 1775| r1775_2(glval) = VariableAddress[x] : -# 1775| r1775_3(int) = Load[x] : &:r1775_2, ~m? -# 1775| mu1775_4(int) = Store[z] : &:r1775_1, r1775_3 -# 1776| r1776_1(glval) = VariableAddress[z] : -# 1776| r1776_2(int) = Load[z] : &:r1776_1, ~m? -# 1776| r1776_3(int) = Constant[0] : -# 1776| r1776_4(bool) = CompareNE : r1776_2, r1776_3 -# 1776| v1776_5(void) = ConditionalBranch : r1776_4 +# 1777| Block 8 +# 1777| r1777_1(glval) = VariableAddress[z] : +# 1777| r1777_2(glval) = VariableAddress[x] : +# 1777| r1777_3(int) = Load[x] : &:r1777_2, ~m? +# 1777| mu1777_4(int) = Store[z] : &:r1777_1, r1777_3 +# 1778| r1778_1(glval) = VariableAddress[z] : +# 1778| r1778_2(int) = Load[z] : &:r1778_1, ~m? +# 1778| r1778_3(int) = Constant[0] : +# 1778| r1778_4(bool) = CompareNE : r1778_2, r1778_3 +# 1778| v1778_5(void) = ConditionalBranch : r1778_4 #-----| False -> Block 10 #-----| True -> Block 9 -# 1777| Block 9 -# 1777| r1777_1(glval) = VariableAddress[x] : -# 1777| r1777_2(int) = Load[x] : &:r1777_1, ~m? -# 1777| r1777_3(glval) = VariableAddress[z] : -# 1777| r1777_4(int) = Load[z] : &:r1777_3, ~m? -# 1777| r1777_5(int) = Add : r1777_2, r1777_4 -# 1777| r1777_6(glval) = VariableAddress[x] : -# 1777| mu1777_7(int) = Store[x] : &:r1777_6, r1777_5 +# 1779| Block 9 +# 1779| r1779_1(glval) = VariableAddress[x] : +# 1779| r1779_2(int) = Load[x] : &:r1779_1, ~m? +# 1779| r1779_3(glval) = VariableAddress[z] : +# 1779| r1779_4(int) = Load[z] : &:r1779_3, ~m? +# 1779| r1779_5(int) = Add : r1779_2, r1779_4 +# 1779| r1779_6(glval) = VariableAddress[x] : +# 1779| mu1779_7(int) = Store[x] : &:r1779_6, r1779_5 #-----| Goto -> Block 10 -# 1780| Block 10 -# 1780| r1780_1(glval) = VariableAddress[z2] : -# 1780| r1780_2(glval) = VariableAddress[z] : -# 1780| r1780_3(int) = Load[z] : &:r1780_2, ~m? -# 1780| mu1780_4(int) = Store[z2] : &:r1780_1, r1780_3 -# 1780| r1780_5(glval) = VariableAddress[z2] : -# 1780| r1780_6(int) = Load[z2] : &:r1780_5, ~m? -# 1780| r1780_7(int) = Constant[0] : -# 1780| r1780_8(bool) = CompareNE : r1780_6, r1780_7 -# 1780| r1780_9(bool) = CopyValue : r1780_8 -# 1780| v1780_10(void) = ConditionalBranch : r1780_9 +# 1782| Block 10 +# 1782| r1782_1(glval) = VariableAddress[z2] : +# 1782| r1782_2(glval) = VariableAddress[z] : +# 1782| r1782_3(int) = Load[z] : &:r1782_2, ~m? +# 1782| mu1782_4(int) = Store[z2] : &:r1782_1, r1782_3 +# 1782| r1782_5(glval) = VariableAddress[z2] : +# 1782| r1782_6(int) = Load[z2] : &:r1782_5, ~m? +# 1782| r1782_7(int) = Constant[0] : +# 1782| r1782_8(bool) = CompareNE : r1782_6, r1782_7 +# 1782| r1782_9(bool) = CopyValue : r1782_8 +# 1782| v1782_10(void) = ConditionalBranch : r1782_9 #-----| False -> Block 12 #-----| True -> Block 11 -# 1781| Block 11 -# 1781| r1781_1(glval) = VariableAddress[z2] : -# 1781| r1781_2(int) = Load[z2] : &:r1781_1, ~m? -# 1781| r1781_3(glval) = VariableAddress[x] : -# 1781| r1781_4(int) = Load[x] : &:r1781_3, ~m? -# 1781| r1781_5(int) = Add : r1781_4, r1781_2 -# 1781| mu1781_6(int) = Store[x] : &:r1781_3, r1781_5 +# 1783| Block 11 +# 1783| r1783_1(glval) = VariableAddress[z2] : +# 1783| r1783_2(int) = Load[z2] : &:r1783_1, ~m? +# 1783| r1783_3(glval) = VariableAddress[x] : +# 1783| r1783_4(int) = Load[x] : &:r1783_3, ~m? +# 1783| r1783_5(int) = Add : r1783_4, r1783_2 +# 1783| mu1783_6(int) = Store[x] : &:r1783_3, r1783_5 #-----| Goto -> Block 12 -# 1783| Block 12 -# 1783| v1783_1(void) = NoOp : -# 1757| v1757_6(void) = ReturnVoid : -# 1757| v1757_7(void) = AliasedUse : ~m? -# 1757| v1757_8(void) = ExitFunction : +# 1785| Block 12 +# 1785| v1785_1(void) = NoOp : +# 1759| v1759_6(void) = ReturnVoid : +# 1759| v1759_7(void) = AliasedUse : ~m? +# 1759| v1759_8(void) = ExitFunction : -# 1785| void switch_initialization(int) -# 1785| Block 0 -# 1785| v1785_1(void) = EnterFunction : -# 1785| mu1785_2(unknown) = AliasedDefinition : -# 1785| mu1785_3(unknown) = InitializeNonLocal : -# 1785| r1785_4(glval) = VariableAddress[x] : -# 1785| mu1785_5(int) = InitializeParameter[x] : &:r1785_4 -# 1786| r1786_1(glval) = VariableAddress[y] : -# 1786| r1786_2(glval) = VariableAddress[x] : -# 1786| r1786_3(int) = Load[x] : &:r1786_2, ~m? -# 1786| mu1786_4(int) = Store[y] : &:r1786_1, r1786_3 -# 1786| r1786_5(glval) = VariableAddress[x] : -# 1786| r1786_6(int) = Load[x] : &:r1786_5, ~m? -# 1786| r1786_7(int) = Constant[1] : -# 1786| r1786_8(int) = Add : r1786_6, r1786_7 -# 1786| v1786_9(void) = Switch : r1786_8 +# 1787| void switch_initialization(int) +# 1787| Block 0 +# 1787| v1787_1(void) = EnterFunction : +# 1787| mu1787_2(unknown) = AliasedDefinition : +# 1787| mu1787_3(unknown) = InitializeNonLocal : +# 1787| r1787_4(glval) = VariableAddress[x] : +# 1787| mu1787_5(int) = InitializeParameter[x] : &:r1787_4 +# 1788| r1788_1(glval) = VariableAddress[y] : +# 1788| r1788_2(glval) = VariableAddress[x] : +# 1788| r1788_3(int) = Load[x] : &:r1788_2, ~m? +# 1788| mu1788_4(int) = Store[y] : &:r1788_1, r1788_3 +# 1788| r1788_5(glval) = VariableAddress[x] : +# 1788| r1788_6(int) = Load[x] : &:r1788_5, ~m? +# 1788| r1788_7(int) = Constant[1] : +# 1788| r1788_8(int) = Add : r1788_6, r1788_7 +# 1788| v1788_9(void) = Switch : r1788_8 #-----| Default -> Block 1 -# 1787| Block 1 -# 1787| v1787_1(void) = NoOp : -# 1788| r1788_1(glval) = VariableAddress[x] : -# 1788| r1788_2(int) = Load[x] : &:r1788_1, ~m? -# 1788| r1788_3(glval) = VariableAddress[y] : -# 1788| r1788_4(int) = Load[y] : &:r1788_3, ~m? -# 1788| r1788_5(int) = Add : r1788_2, r1788_4 -# 1788| r1788_6(glval) = VariableAddress[x] : -# 1788| mu1788_7(int) = Store[x] : &:r1788_6, r1788_5 -# 1791| r1791_1(glval) = VariableAddress[w] : -# 1791| mu1791_2(int) = Uninitialized[w] : &:r1791_1 -# 1792| r1792_1(glval) = VariableAddress[x] : -# 1792| r1792_2(int) = Load[x] : &:r1792_1, ~m? -# 1792| r1792_3(glval) = VariableAddress[w] : -# 1792| mu1792_4(int) = Store[w] : &:r1792_3, r1792_2 -# 1792| r1792_5(glval) = VariableAddress[x] : -# 1792| r1792_6(int) = Load[x] : &:r1792_5, ~m? -# 1792| r1792_7(int) = Constant[1] : -# 1792| r1792_8(int) = Add : r1792_6, r1792_7 -# 1792| v1792_9(void) = Switch : r1792_8 +# 1789| Block 1 +# 1789| v1789_1(void) = NoOp : +# 1790| r1790_1(glval) = VariableAddress[x] : +# 1790| r1790_2(int) = Load[x] : &:r1790_1, ~m? +# 1790| r1790_3(glval) = VariableAddress[y] : +# 1790| r1790_4(int) = Load[y] : &:r1790_3, ~m? +# 1790| r1790_5(int) = Add : r1790_2, r1790_4 +# 1790| r1790_6(glval) = VariableAddress[x] : +# 1790| mu1790_7(int) = Store[x] : &:r1790_6, r1790_5 +# 1793| r1793_1(glval) = VariableAddress[w] : +# 1793| mu1793_2(int) = Uninitialized[w] : &:r1793_1 +# 1794| r1794_1(glval) = VariableAddress[x] : +# 1794| r1794_2(int) = Load[x] : &:r1794_1, ~m? +# 1794| r1794_3(glval) = VariableAddress[w] : +# 1794| mu1794_4(int) = Store[w] : &:r1794_3, r1794_2 +# 1794| r1794_5(glval) = VariableAddress[x] : +# 1794| r1794_6(int) = Load[x] : &:r1794_5, ~m? +# 1794| r1794_7(int) = Constant[1] : +# 1794| r1794_8(int) = Add : r1794_6, r1794_7 +# 1794| v1794_9(void) = Switch : r1794_8 #-----| Default -> Block 2 -# 1793| Block 2 -# 1793| v1793_1(void) = NoOp : -# 1794| r1794_1(glval) = VariableAddress[x] : -# 1794| r1794_2(int) = Load[x] : &:r1794_1, ~m? -# 1794| r1794_3(glval) = VariableAddress[w] : -# 1794| r1794_4(int) = Load[w] : &:r1794_3, ~m? -# 1794| r1794_5(int) = Add : r1794_2, r1794_4 -# 1794| r1794_6(glval) = VariableAddress[x] : -# 1794| mu1794_7(int) = Store[x] : &:r1794_6, r1794_5 -# 1797| r1797_1(glval) = VariableAddress[x] : -# 1797| r1797_2(int) = Load[x] : &:r1797_1, ~m? -# 1797| r1797_3(glval) = VariableAddress[w] : -# 1797| mu1797_4(int) = Store[w] : &:r1797_3, r1797_2 -# 1797| r1797_5(glval) = VariableAddress[w2] : -# 1797| r1797_6(glval) = VariableAddress[w] : -# 1797| r1797_7(int) = Load[w] : &:r1797_6, ~m? -# 1797| mu1797_8(int) = Store[w2] : &:r1797_5, r1797_7 -# 1797| r1797_9(glval) = VariableAddress[w2] : -# 1797| r1797_10(int) = Load[w2] : &:r1797_9, ~m? -# 1797| r1797_11(int) = CopyValue : r1797_10 -# 1797| v1797_12(void) = Switch : r1797_11 -#-----| Default -> Block 3 - -# 1798| Block 3 -# 1798| v1798_1(void) = NoOp : +# 1795| Block 2 +# 1795| v1795_1(void) = NoOp : +# 1796| r1796_1(glval) = VariableAddress[x] : +# 1796| r1796_2(int) = Load[x] : &:r1796_1, ~m? +# 1796| r1796_3(glval) = VariableAddress[w] : +# 1796| r1796_4(int) = Load[w] : &:r1796_3, ~m? +# 1796| r1796_5(int) = Add : r1796_2, r1796_4 +# 1796| r1796_6(glval) = VariableAddress[x] : +# 1796| mu1796_7(int) = Store[x] : &:r1796_6, r1796_5 # 1799| r1799_1(glval) = VariableAddress[x] : # 1799| r1799_2(int) = Load[x] : &:r1799_1, ~m? # 1799| r1799_3(glval) = VariableAddress[w] : -# 1799| r1799_4(int) = Load[w] : &:r1799_3, ~m? -# 1799| r1799_5(int) = Add : r1799_2, r1799_4 -# 1799| r1799_6(glval) = VariableAddress[x] : -# 1799| mu1799_7(int) = Store[x] : &:r1799_6, r1799_5 -# 1802| r1802_1(glval) = VariableAddress[v] : -# 1802| r1802_2(glval) = VariableAddress[x] : -# 1802| r1802_3(int) = Load[x] : &:r1802_2, ~m? -# 1802| mu1802_4(int) = Store[v] : &:r1802_1, r1802_3 -# 1802| r1802_5(glval) = VariableAddress[v2] : -# 1802| r1802_6(glval) = VariableAddress[v] : -# 1802| r1802_7(int) = Load[v] : &:r1802_6, ~m? -# 1802| mu1802_8(int) = Store[v2] : &:r1802_5, r1802_7 -# 1802| r1802_9(glval) = VariableAddress[v2] : -# 1802| r1802_10(int) = Load[v2] : &:r1802_9, ~m? -# 1802| r1802_11(int) = CopyValue : r1802_10 -# 1802| v1802_12(void) = Switch : r1802_11 +# 1799| mu1799_4(int) = Store[w] : &:r1799_3, r1799_2 +# 1799| r1799_5(glval) = VariableAddress[w2] : +# 1799| r1799_6(glval) = VariableAddress[w] : +# 1799| r1799_7(int) = Load[w] : &:r1799_6, ~m? +# 1799| mu1799_8(int) = Store[w2] : &:r1799_5, r1799_7 +# 1799| r1799_9(glval) = VariableAddress[w2] : +# 1799| r1799_10(int) = Load[w2] : &:r1799_9, ~m? +# 1799| r1799_11(int) = CopyValue : r1799_10 +# 1799| v1799_12(void) = Switch : r1799_11 +#-----| Default -> Block 3 + +# 1800| Block 3 +# 1800| v1800_1(void) = NoOp : +# 1801| r1801_1(glval) = VariableAddress[x] : +# 1801| r1801_2(int) = Load[x] : &:r1801_1, ~m? +# 1801| r1801_3(glval) = VariableAddress[w] : +# 1801| r1801_4(int) = Load[w] : &:r1801_3, ~m? +# 1801| r1801_5(int) = Add : r1801_2, r1801_4 +# 1801| r1801_6(glval) = VariableAddress[x] : +# 1801| mu1801_7(int) = Store[x] : &:r1801_6, r1801_5 +# 1804| r1804_1(glval) = VariableAddress[v] : +# 1804| r1804_2(glval) = VariableAddress[x] : +# 1804| r1804_3(int) = Load[x] : &:r1804_2, ~m? +# 1804| mu1804_4(int) = Store[v] : &:r1804_1, r1804_3 +# 1804| r1804_5(glval) = VariableAddress[v2] : +# 1804| r1804_6(glval) = VariableAddress[v] : +# 1804| r1804_7(int) = Load[v] : &:r1804_6, ~m? +# 1804| mu1804_8(int) = Store[v2] : &:r1804_5, r1804_7 +# 1804| r1804_9(glval) = VariableAddress[v2] : +# 1804| r1804_10(int) = Load[v2] : &:r1804_9, ~m? +# 1804| r1804_11(int) = CopyValue : r1804_10 +# 1804| v1804_12(void) = Switch : r1804_11 #-----| Default -> Block 4 -# 1803| Block 4 -# 1803| v1803_1(void) = NoOp : -# 1804| r1804_1(glval) = VariableAddress[x] : -# 1804| r1804_2(int) = Load[x] : &:r1804_1, ~m? -# 1804| r1804_3(glval) = VariableAddress[v] : -# 1804| r1804_4(int) = Load[v] : &:r1804_3, ~m? -# 1804| r1804_5(int) = Add : r1804_2, r1804_4 -# 1804| r1804_6(glval) = VariableAddress[x] : -# 1804| mu1804_7(int) = Store[x] : &:r1804_6, r1804_5 -# 1807| r1807_1(glval) = VariableAddress[z] : -# 1807| r1807_2(glval) = VariableAddress[x] : -# 1807| r1807_3(int) = Load[x] : &:r1807_2, ~m? -# 1807| mu1807_4(int) = Store[z] : &:r1807_1, r1807_3 -# 1808| r1808_1(glval) = VariableAddress[z] : -# 1808| r1808_2(int) = Load[z] : &:r1808_1, ~m? -# 1808| v1808_3(void) = Switch : r1808_2 +# 1805| Block 4 +# 1805| v1805_1(void) = NoOp : +# 1806| r1806_1(glval) = VariableAddress[x] : +# 1806| r1806_2(int) = Load[x] : &:r1806_1, ~m? +# 1806| r1806_3(glval) = VariableAddress[v] : +# 1806| r1806_4(int) = Load[v] : &:r1806_3, ~m? +# 1806| r1806_5(int) = Add : r1806_2, r1806_4 +# 1806| r1806_6(glval) = VariableAddress[x] : +# 1806| mu1806_7(int) = Store[x] : &:r1806_6, r1806_5 +# 1809| r1809_1(glval) = VariableAddress[z] : +# 1809| r1809_2(glval) = VariableAddress[x] : +# 1809| r1809_3(int) = Load[x] : &:r1809_2, ~m? +# 1809| mu1809_4(int) = Store[z] : &:r1809_1, r1809_3 +# 1810| r1810_1(glval) = VariableAddress[z] : +# 1810| r1810_2(int) = Load[z] : &:r1810_1, ~m? +# 1810| v1810_3(void) = Switch : r1810_2 #-----| Default -> Block 5 -# 1809| Block 5 -# 1809| v1809_1(void) = NoOp : -# 1810| r1810_1(glval) = VariableAddress[x] : -# 1810| r1810_2(int) = Load[x] : &:r1810_1, ~m? -# 1810| r1810_3(glval) = VariableAddress[z] : -# 1810| r1810_4(int) = Load[z] : &:r1810_3, ~m? -# 1810| r1810_5(int) = Add : r1810_2, r1810_4 -# 1810| r1810_6(glval) = VariableAddress[x] : -# 1810| mu1810_7(int) = Store[x] : &:r1810_6, r1810_5 -# 1813| r1813_1(glval) = VariableAddress[z2] : -# 1813| r1813_2(glval) = VariableAddress[z] : -# 1813| r1813_3(int) = Load[z] : &:r1813_2, ~m? -# 1813| mu1813_4(int) = Store[z2] : &:r1813_1, r1813_3 -# 1813| r1813_5(glval) = VariableAddress[z2] : -# 1813| r1813_6(int) = Load[z2] : &:r1813_5, ~m? -# 1813| r1813_7(int) = CopyValue : r1813_6 -# 1813| v1813_8(void) = Switch : r1813_7 +# 1811| Block 5 +# 1811| v1811_1(void) = NoOp : +# 1812| r1812_1(glval) = VariableAddress[x] : +# 1812| r1812_2(int) = Load[x] : &:r1812_1, ~m? +# 1812| r1812_3(glval) = VariableAddress[z] : +# 1812| r1812_4(int) = Load[z] : &:r1812_3, ~m? +# 1812| r1812_5(int) = Add : r1812_2, r1812_4 +# 1812| r1812_6(glval) = VariableAddress[x] : +# 1812| mu1812_7(int) = Store[x] : &:r1812_6, r1812_5 +# 1815| r1815_1(glval) = VariableAddress[z2] : +# 1815| r1815_2(glval) = VariableAddress[z] : +# 1815| r1815_3(int) = Load[z] : &:r1815_2, ~m? +# 1815| mu1815_4(int) = Store[z2] : &:r1815_1, r1815_3 +# 1815| r1815_5(glval) = VariableAddress[z2] : +# 1815| r1815_6(int) = Load[z2] : &:r1815_5, ~m? +# 1815| r1815_7(int) = CopyValue : r1815_6 +# 1815| v1815_8(void) = Switch : r1815_7 #-----| Default -> Block 6 -# 1814| Block 6 -# 1814| v1814_1(void) = NoOp : -# 1815| r1815_1(glval) = VariableAddress[z2] : -# 1815| r1815_2(int) = Load[z2] : &:r1815_1, ~m? -# 1815| r1815_3(glval) = VariableAddress[x] : -# 1815| r1815_4(int) = Load[x] : &:r1815_3, ~m? -# 1815| r1815_5(int) = Add : r1815_4, r1815_2 -# 1815| mu1815_6(int) = Store[x] : &:r1815_3, r1815_5 -# 1817| v1817_1(void) = NoOp : -# 1785| v1785_6(void) = ReturnVoid : -# 1785| v1785_7(void) = AliasedUse : ~m? -# 1785| v1785_8(void) = ExitFunction : +# 1816| Block 6 +# 1816| v1816_1(void) = NoOp : +# 1817| r1817_1(glval) = VariableAddress[z2] : +# 1817| r1817_2(int) = Load[z2] : &:r1817_1, ~m? +# 1817| r1817_3(glval) = VariableAddress[x] : +# 1817| r1817_4(int) = Load[x] : &:r1817_3, ~m? +# 1817| r1817_5(int) = Add : r1817_4, r1817_2 +# 1817| mu1817_6(int) = Store[x] : &:r1817_3, r1817_5 +# 1819| v1819_1(void) = NoOp : +# 1787| v1787_6(void) = ReturnVoid : +# 1787| v1787_7(void) = AliasedUse : ~m? +# 1787| v1787_8(void) = ExitFunction : -# 1821| int global_2 -# 1821| Block 0 -# 1821| v1821_1(void) = EnterFunction : -# 1821| mu1821_2(unknown) = AliasedDefinition : -# 1821| r1821_3(glval) = VariableAddress[global_2] : -# 1821| r1821_4(int) = Constant[1] : -# 1821| mu1821_5(int) = Store[global_2] : &:r1821_3, r1821_4 -# 1821| v1821_6(void) = ReturnVoid : -# 1821| v1821_7(void) = AliasedUse : ~m? -# 1821| v1821_8(void) = ExitFunction : +# 1823| int global_2 +# 1823| Block 0 +# 1823| v1823_1(void) = EnterFunction : +# 1823| mu1823_2(unknown) = AliasedDefinition : +# 1823| r1823_3(glval) = VariableAddress[global_2] : +# 1823| r1823_4(int) = Constant[1] : +# 1823| mu1823_5(int) = Store[global_2] : &:r1823_3, r1823_4 +# 1823| v1823_6(void) = ReturnVoid : +# 1823| v1823_7(void) = AliasedUse : ~m? +# 1823| v1823_8(void) = ExitFunction : -# 1825| constructor_only global_4 -# 1825| Block 0 -# 1825| v1825_1(void) = EnterFunction : -# 1825| mu1825_2(unknown) = AliasedDefinition : -# 1825| r1825_3(glval) = VariableAddress[global_4] : -# 1825| r1825_4(glval) = FunctionAddress[constructor_only] : -# 1825| r1825_5(int) = Constant[1] : -# 1825| v1825_6(void) = Call[constructor_only] : func:r1825_4, this:r1825_3, 0:r1825_5 -# 1825| mu1825_7(unknown) = ^CallSideEffect : ~m? -# 1825| mu1825_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1825_3 -# 1825| v1825_9(void) = ReturnVoid : -# 1825| v1825_10(void) = AliasedUse : ~m? -# 1825| v1825_11(void) = ExitFunction : - -# 1827| constructor_only global_5 +# 1827| constructor_only global_4 # 1827| Block 0 # 1827| v1827_1(void) = EnterFunction : # 1827| mu1827_2(unknown) = AliasedDefinition : -# 1827| r1827_3(glval) = VariableAddress[global_5] : +# 1827| r1827_3(glval) = VariableAddress[global_4] : # 1827| r1827_4(glval) = FunctionAddress[constructor_only] : -# 1827| r1827_5(int) = Constant[2] : +# 1827| r1827_5(int) = Constant[1] : # 1827| v1827_6(void) = Call[constructor_only] : func:r1827_4, this:r1827_3, 0:r1827_5 # 1827| mu1827_7(unknown) = ^CallSideEffect : ~m? # 1827| mu1827_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1827_3 @@ -9998,40 +9984,54 @@ ir.cpp: # 1827| v1827_10(void) = AliasedUse : ~m? # 1827| v1827_11(void) = ExitFunction : -# 1829| char* global_string +# 1829| constructor_only global_5 # 1829| Block 0 -# 1829| v1829_1(void) = EnterFunction : -# 1829| mu1829_2(unknown) = AliasedDefinition : -# 1829| r1829_3(glval) = VariableAddress[global_string] : -# 1829| r1829_4(glval) = StringConstant["global string"] : -# 1829| r1829_5(char *) = Convert : r1829_4 -# 1829| r1829_6(char *) = Convert : r1829_5 -# 1829| mu1829_7(char *) = Store[global_string] : &:r1829_3, r1829_6 -# 1829| v1829_8(void) = ReturnVoid : -# 1829| v1829_9(void) = AliasedUse : ~m? -# 1829| v1829_10(void) = ExitFunction : +# 1829| v1829_1(void) = EnterFunction : +# 1829| mu1829_2(unknown) = AliasedDefinition : +# 1829| r1829_3(glval) = VariableAddress[global_5] : +# 1829| r1829_4(glval) = FunctionAddress[constructor_only] : +# 1829| r1829_5(int) = Constant[2] : +# 1829| v1829_6(void) = Call[constructor_only] : func:r1829_4, this:r1829_3, 0:r1829_5 +# 1829| mu1829_7(unknown) = ^CallSideEffect : ~m? +# 1829| mu1829_8(constructor_only) = ^IndirectMayWriteSideEffect[-1] : &:r1829_3 +# 1829| v1829_9(void) = ReturnVoid : +# 1829| v1829_10(void) = AliasedUse : ~m? +# 1829| v1829_11(void) = ExitFunction : -# 1831| int global_6 +# 1831| char* global_string # 1831| Block 0 -# 1831| v1831_1(void) = EnterFunction : -# 1831| mu1831_2(unknown) = AliasedDefinition : -# 1831| r1831_3(glval) = VariableAddress[global_6] : -# 1831| r1831_4(glval) = VariableAddress[global_2] : -# 1831| r1831_5(int) = Load[global_2] : &:r1831_4, ~m? -# 1831| mu1831_6(int) = Store[global_6] : &:r1831_3, r1831_5 -# 1831| v1831_7(void) = ReturnVoid : -# 1831| v1831_8(void) = AliasedUse : ~m? -# 1831| v1831_9(void) = ExitFunction : +# 1831| v1831_1(void) = EnterFunction : +# 1831| mu1831_2(unknown) = AliasedDefinition : +# 1831| r1831_3(glval) = VariableAddress[global_string] : +# 1831| r1831_4(glval) = StringConstant["global string"] : +# 1831| r1831_5(char *) = Convert : r1831_4 +# 1831| r1831_6(char *) = Convert : r1831_5 +# 1831| mu1831_7(char *) = Store[global_string] : &:r1831_3, r1831_6 +# 1831| v1831_8(void) = ReturnVoid : +# 1831| v1831_9(void) = AliasedUse : ~m? +# 1831| v1831_10(void) = ExitFunction : -# 1834| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) -# 1834| Block 0 -# 1834| v1834_1(void) = EnterFunction : -# 1834| mu1834_2(unknown) = AliasedDefinition : -# 1834| mu1834_3(unknown) = InitializeNonLocal : -# 1834| r1834_4(glval) = VariableAddress[#this] : -# 1834| mu1834_5(glval) = InitializeParameter[#this] : &:r1834_4 -# 1834| r1834_6(glval) = Load[#this] : &:r1834_4, ~m? -# 1834| mu1834_7(A) = InitializeIndirection[#this] : &:r1834_6 +# 1833| int global_6 +# 1833| Block 0 +# 1833| v1833_1(void) = EnterFunction : +# 1833| mu1833_2(unknown) = AliasedDefinition : +# 1833| r1833_3(glval) = VariableAddress[global_6] : +# 1833| r1833_4(glval) = VariableAddress[global_2] : +# 1833| r1833_5(int) = Load[global_2] : &:r1833_4, ~m? +# 1833| mu1833_6(int) = Store[global_6] : &:r1833_3, r1833_5 +# 1833| v1833_7(void) = ReturnVoid : +# 1833| v1833_8(void) = AliasedUse : ~m? +# 1833| v1833_9(void) = ExitFunction : + +# 1836| block_assignment::A& block_assignment::A::operator=(block_assignment::A&&) +# 1836| Block 0 +# 1836| v1836_1(void) = EnterFunction : +# 1836| mu1836_2(unknown) = AliasedDefinition : +# 1836| mu1836_3(unknown) = InitializeNonLocal : +# 1836| r1836_4(glval) = VariableAddress[#this] : +# 1836| mu1836_5(glval) = InitializeParameter[#this] : &:r1836_4 +# 1836| r1836_6(glval) = Load[#this] : &:r1836_4, ~m? +# 1836| mu1836_7(A) = InitializeIndirection[#this] : &:r1836_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(A &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(A &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -10051,884 +10051,884 @@ ir.cpp: #-----| r0_17(glval) = CopyValue : r0_16 #-----| r0_18(A &) = CopyValue : r0_17 #-----| mu0_19(A &) = Store[#return] : &:r0_14, r0_18 -# 1834| v1834_8(void) = ReturnIndirection[#this] : &:r1834_6, ~m? +# 1836| v1836_8(void) = ReturnIndirection[#this] : &:r1836_6, ~m? #-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1834| r1834_9(glval) = VariableAddress[#return] : -# 1834| v1834_10(void) = ReturnValue : &:r1834_9, ~m? -# 1834| v1834_11(void) = AliasedUse : ~m? -# 1834| v1834_12(void) = ExitFunction : +# 1836| r1836_9(glval) = VariableAddress[#return] : +# 1836| v1836_10(void) = ReturnValue : &:r1836_9, ~m? +# 1836| v1836_11(void) = AliasedUse : ~m? +# 1836| v1836_12(void) = ExitFunction : -# 1839| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) -# 1839| Block 0 -# 1839| v1839_1(void) = EnterFunction : -# 1839| mu1839_2(unknown) = AliasedDefinition : -# 1839| mu1839_3(unknown) = InitializeNonLocal : -# 1839| r1839_4(glval) = VariableAddress[#this] : -# 1839| mu1839_5(glval) = InitializeParameter[#this] : &:r1839_4 -# 1839| r1839_6(glval) = Load[#this] : &:r1839_4, ~m? -# 1839| mu1839_7(B) = InitializeIndirection[#this] : &:r1839_6 +# 1841| block_assignment::B& block_assignment::B::operator=(block_assignment::B&&) +# 1841| Block 0 +# 1841| v1841_1(void) = EnterFunction : +# 1841| mu1841_2(unknown) = AliasedDefinition : +# 1841| mu1841_3(unknown) = InitializeNonLocal : +# 1841| r1841_4(glval) = VariableAddress[#this] : +# 1841| mu1841_5(glval) = InitializeParameter[#this] : &:r1841_4 +# 1841| r1841_6(glval) = Load[#this] : &:r1841_4, ~m? +# 1841| mu1841_7(B) = InitializeIndirection[#this] : &:r1841_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(B &&) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(B &&) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 1839| r1839_8(glval) = VariableAddress[#this] : -# 1839| r1839_9(B *) = Load[#this] : &:r1839_8, ~m? -#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1839_9 -# 1839| r1839_10(glval) = FunctionAddress[operator=] : -# 1839| r1839_11(glval) = VariableAddress[(unnamed parameter 0)] : -# 1839| r1839_12(B &&) = Load[(unnamed parameter 0)] : &:r1839_11, ~m? -#-----| r0_6(glval) = CopyValue : r1839_12 -# 1839| r1839_13(B *) = CopyValue : r0_6 -#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1839_13 -# 1839| r1839_14(glval) = CopyValue : r0_7 -#-----| r0_8(A &) = CopyValue : r1839_14 -# 1839| r1839_15(A &) = Call[operator=] : func:r1839_10, this:r0_5, 0:r0_8 -# 1839| mu1839_16(unknown) = ^CallSideEffect : ~m? +# 1841| r1841_8(glval) = VariableAddress[#this] : +# 1841| r1841_9(B *) = Load[#this] : &:r1841_8, ~m? +#-----| r0_5(A *) = ConvertToNonVirtualBase[B : A] : r1841_9 +# 1841| r1841_10(glval) = FunctionAddress[operator=] : +# 1841| r1841_11(glval) = VariableAddress[(unnamed parameter 0)] : +# 1841| r1841_12(B &&) = Load[(unnamed parameter 0)] : &:r1841_11, ~m? +#-----| r0_6(glval) = CopyValue : r1841_12 +# 1841| r1841_13(B *) = CopyValue : r0_6 +#-----| r0_7(A *) = ConvertToNonVirtualBase[B : A] : r1841_13 +# 1841| r1841_14(glval) = CopyValue : r0_7 +#-----| r0_8(A &) = CopyValue : r1841_14 +# 1841| r1841_15(A &) = Call[operator=] : func:r1841_10, this:r0_5, 0:r0_8 +# 1841| mu1841_16(unknown) = ^CallSideEffect : ~m? #-----| v0_9(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? #-----| v0_10(void) = ^BufferReadSideEffect[0] : &:r0_8, ~m? #-----| mu0_11(A) = ^IndirectMayWriteSideEffect[-1] : &:r0_5 #-----| mu0_12(unknown) = ^BufferMayWriteSideEffect[0] : &:r0_8 -#-----| r0_13(glval) = CopyValue : r1839_15 +#-----| r0_13(glval) = CopyValue : r1841_15 #-----| r0_14(glval) = VariableAddress[#return] : #-----| r0_15(glval) = VariableAddress[#this] : #-----| r0_16(B *) = Load[#this] : &:r0_15, ~m? #-----| r0_17(glval) = CopyValue : r0_16 #-----| r0_18(B &) = CopyValue : r0_17 #-----| mu0_19(B &) = Store[#return] : &:r0_14, r0_18 -# 1839| v1839_17(void) = ReturnIndirection[#this] : &:r1839_6, ~m? +# 1841| v1841_17(void) = ReturnIndirection[#this] : &:r1841_6, ~m? #-----| v0_20(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 1839| r1839_18(glval) = VariableAddress[#return] : -# 1839| v1839_19(void) = ReturnValue : &:r1839_18, ~m? -# 1839| v1839_20(void) = AliasedUse : ~m? -# 1839| v1839_21(void) = ExitFunction : +# 1841| r1841_18(glval) = VariableAddress[#return] : +# 1841| v1841_19(void) = ReturnValue : &:r1841_18, ~m? +# 1841| v1841_20(void) = AliasedUse : ~m? +# 1841| v1841_21(void) = ExitFunction : -# 1843| void block_assignment::foo() -# 1843| Block 0 -# 1843| v1843_1(void) = EnterFunction : -# 1843| mu1843_2(unknown) = AliasedDefinition : -# 1843| mu1843_3(unknown) = InitializeNonLocal : -# 1844| r1844_1(glval) = VariableAddress[v] : -# 1844| mu1844_2(B) = Uninitialized[v] : &:r1844_1 -# 1844| r1844_3(glval) = FunctionAddress[B] : -# 1844| r1844_4(A *) = Constant[0] : -# 1844| v1844_5(void) = Call[B] : func:r1844_3, this:r1844_1, 0:r1844_4 -# 1844| mu1844_6(unknown) = ^CallSideEffect : ~m? -# 1844| v1844_7(void) = ^BufferReadSideEffect[0] : &:r1844_4, ~m? -# 1844| mu1844_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1844_1 -# 1844| mu1844_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1844_4 -# 1845| r1845_1(glval) = VariableAddress[v] : -# 1845| r1845_2(glval) = FunctionAddress[operator=] : -# 1845| r1845_3(glval) = VariableAddress[#temp1845:13] : -# 1845| mu1845_4(B) = Uninitialized[#temp1845:13] : &:r1845_3 -# 1845| r1845_5(glval) = FunctionAddress[B] : -# 1845| r1845_6(A *) = Constant[0] : -# 1845| v1845_7(void) = Call[B] : func:r1845_5, this:r1845_3, 0:r1845_6 -# 1845| mu1845_8(unknown) = ^CallSideEffect : ~m? -# 1845| v1845_9(void) = ^BufferReadSideEffect[0] : &:r1845_6, ~m? -# 1845| mu1845_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_3 -# 1845| mu1845_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_6 -# 1845| r1845_12(B &) = CopyValue : r1845_3 -# 1845| r1845_13(B &) = Call[operator=] : func:r1845_2, this:r1845_1, 0:r1845_12 -# 1845| mu1845_14(unknown) = ^CallSideEffect : ~m? -# 1845| v1845_15(void) = ^IndirectReadSideEffect[-1] : &:r1845_1, ~m? -# 1845| v1845_16(void) = ^BufferReadSideEffect[0] : &:r1845_12, ~m? -# 1845| mu1845_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1845_1 -# 1845| mu1845_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1845_12 -# 1845| r1845_19(glval) = CopyValue : r1845_13 -# 1846| v1846_1(void) = NoOp : -# 1843| v1843_4(void) = ReturnVoid : -# 1843| v1843_5(void) = AliasedUse : ~m? -# 1843| v1843_6(void) = ExitFunction : +# 1845| void block_assignment::foo() +# 1845| Block 0 +# 1845| v1845_1(void) = EnterFunction : +# 1845| mu1845_2(unknown) = AliasedDefinition : +# 1845| mu1845_3(unknown) = InitializeNonLocal : +# 1846| r1846_1(glval) = VariableAddress[v] : +# 1846| mu1846_2(B) = Uninitialized[v] : &:r1846_1 +# 1846| r1846_3(glval) = FunctionAddress[B] : +# 1846| r1846_4(A *) = Constant[0] : +# 1846| v1846_5(void) = Call[B] : func:r1846_3, this:r1846_1, 0:r1846_4 +# 1846| mu1846_6(unknown) = ^CallSideEffect : ~m? +# 1846| v1846_7(void) = ^BufferReadSideEffect[0] : &:r1846_4, ~m? +# 1846| mu1846_8(B) = ^IndirectMayWriteSideEffect[-1] : &:r1846_1 +# 1846| mu1846_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1846_4 +# 1847| r1847_1(glval) = VariableAddress[v] : +# 1847| r1847_2(glval) = FunctionAddress[operator=] : +# 1847| r1847_3(glval) = VariableAddress[#temp1847:13] : +# 1847| mu1847_4(B) = Uninitialized[#temp1847:13] : &:r1847_3 +# 1847| r1847_5(glval) = FunctionAddress[B] : +# 1847| r1847_6(A *) = Constant[0] : +# 1847| v1847_7(void) = Call[B] : func:r1847_5, this:r1847_3, 0:r1847_6 +# 1847| mu1847_8(unknown) = ^CallSideEffect : ~m? +# 1847| v1847_9(void) = ^BufferReadSideEffect[0] : &:r1847_6, ~m? +# 1847| mu1847_10(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_3 +# 1847| mu1847_11(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_6 +# 1847| r1847_12(B &) = CopyValue : r1847_3 +# 1847| r1847_13(B &) = Call[operator=] : func:r1847_2, this:r1847_1, 0:r1847_12 +# 1847| mu1847_14(unknown) = ^CallSideEffect : ~m? +# 1847| v1847_15(void) = ^IndirectReadSideEffect[-1] : &:r1847_1, ~m? +# 1847| v1847_16(void) = ^BufferReadSideEffect[0] : &:r1847_12, ~m? +# 1847| mu1847_17(B) = ^IndirectMayWriteSideEffect[-1] : &:r1847_1 +# 1847| mu1847_18(unknown) = ^BufferMayWriteSideEffect[0] : &:r1847_12 +# 1847| r1847_19(glval) = CopyValue : r1847_13 +# 1848| v1848_1(void) = NoOp : +# 1845| v1845_4(void) = ReturnVoid : +# 1845| v1845_5(void) = AliasedUse : ~m? +# 1845| v1845_6(void) = ExitFunction : -# 1849| void magicvars() -# 1849| Block 0 -# 1849| v1849_1(void) = EnterFunction : -# 1849| mu1849_2(unknown) = AliasedDefinition : -# 1849| mu1849_3(unknown) = InitializeNonLocal : -# 1850| r1850_1(glval) = VariableAddress[pf] : -# 1850| r1850_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : -# 1850| r1850_3(char *) = Convert : r1850_2 -# 1850| mu1850_4(char *) = Store[pf] : &:r1850_1, r1850_3 -# 1851| r1851_1(glval) = VariableAddress[strfunc] : -# 1851| r1851_2(glval) = VariableAddress[__func__] : -# 1851| r1851_3(char *) = Convert : r1851_2 -# 1851| mu1851_4(char *) = Store[strfunc] : &:r1851_1, r1851_3 -# 1852| v1852_1(void) = NoOp : -# 1849| v1849_4(void) = ReturnVoid : -# 1849| v1849_5(void) = AliasedUse : ~m? -# 1849| v1849_6(void) = ExitFunction : +# 1851| void magicvars() +# 1851| Block 0 +# 1851| v1851_1(void) = EnterFunction : +# 1851| mu1851_2(unknown) = AliasedDefinition : +# 1851| mu1851_3(unknown) = InitializeNonLocal : +# 1852| r1852_1(glval) = VariableAddress[pf] : +# 1852| r1852_2(glval) = VariableAddress[__PRETTY_FUNCTION__] : +# 1852| r1852_3(char *) = Convert : r1852_2 +# 1852| mu1852_4(char *) = Store[pf] : &:r1852_1, r1852_3 +# 1853| r1853_1(glval) = VariableAddress[strfunc] : +# 1853| r1853_2(glval) = VariableAddress[__func__] : +# 1853| r1853_3(char *) = Convert : r1853_2 +# 1853| mu1853_4(char *) = Store[strfunc] : &:r1853_1, r1853_3 +# 1854| v1854_1(void) = NoOp : +# 1851| v1851_4(void) = ReturnVoid : +# 1851| v1851_5(void) = AliasedUse : ~m? +# 1851| v1851_6(void) = ExitFunction : -# 1862| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) -# 1862| Block 0 -# 1862| v1862_1(void) = EnterFunction : -# 1862| mu1862_2(unknown) = AliasedDefinition : -# 1862| mu1862_3(unknown) = InitializeNonLocal : -# 1862| r1862_4(glval) = VariableAddress[#this] : -# 1862| mu1862_5(glval>) = InitializeParameter[#this] : &:r1862_4 -# 1862| r1862_6(glval>) = Load[#this] : &:r1862_4, ~m? -# 1862| mu1862_7(Bar1) = InitializeIndirection[#this] : &:r1862_6 -# 1862| r1862_8(glval) = VariableAddress[p] : -# 1862| mu1862_9(S *) = InitializeParameter[p] : &:r1862_8 -# 1862| r1862_10(S *) = Load[p] : &:r1862_8, ~m? -# 1862| mu1862_11(unknown) = InitializeIndirection[p] : &:r1862_10 -# 1864| r1864_1(glval) = VariableAddress[#return] : -# 1864| r1864_2(glval) = VariableAddress[p] : -# 1864| r1864_3(S *) = Load[p] : &:r1864_2, ~m? -# 1864| r1864_4(void *) = Convert : r1864_3 -# 1864| mu1864_5(void *) = Store[#return] : &:r1864_1, r1864_4 -# 1862| v1862_12(void) = ReturnIndirection[#this] : &:r1862_6, ~m? -# 1862| v1862_13(void) = ReturnIndirection[p] : &:r1862_10, ~m? -# 1862| r1862_14(glval) = VariableAddress[#return] : -# 1862| v1862_15(void) = ReturnValue : &:r1862_14, ~m? -# 1862| v1862_16(void) = AliasedUse : ~m? -# 1862| v1862_17(void) = ExitFunction : +# 1864| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer) +# 1864| Block 0 +# 1864| v1864_1(void) = EnterFunction : +# 1864| mu1864_2(unknown) = AliasedDefinition : +# 1864| mu1864_3(unknown) = InitializeNonLocal : +# 1864| r1864_4(glval) = VariableAddress[#this] : +# 1864| mu1864_5(glval>) = InitializeParameter[#this] : &:r1864_4 +# 1864| r1864_6(glval>) = Load[#this] : &:r1864_4, ~m? +# 1864| mu1864_7(Bar1) = InitializeIndirection[#this] : &:r1864_6 +# 1864| r1864_8(glval) = VariableAddress[p] : +# 1864| mu1864_9(S *) = InitializeParameter[p] : &:r1864_8 +# 1864| r1864_10(S *) = Load[p] : &:r1864_8, ~m? +# 1864| mu1864_11(unknown) = InitializeIndirection[p] : &:r1864_10 +# 1866| r1866_1(glval) = VariableAddress[#return] : +# 1866| r1866_2(glval) = VariableAddress[p] : +# 1866| r1866_3(S *) = Load[p] : &:r1866_2, ~m? +# 1866| r1866_4(void *) = Convert : r1866_3 +# 1866| mu1866_5(void *) = Store[#return] : &:r1866_1, r1866_4 +# 1864| v1864_12(void) = ReturnIndirection[#this] : &:r1864_6, ~m? +# 1864| v1864_13(void) = ReturnIndirection[p] : &:r1864_10, ~m? +# 1864| r1864_14(glval) = VariableAddress[#return] : +# 1864| v1864_15(void) = ReturnValue : &:r1864_14, ~m? +# 1864| v1864_16(void) = AliasedUse : ~m? +# 1864| v1864_17(void) = ExitFunction : -# 1868| void missing_declaration_entries::test1() -# 1868| Block 0 -# 1868| v1868_1(void) = EnterFunction : -# 1868| mu1868_2(unknown) = AliasedDefinition : -# 1868| mu1868_3(unknown) = InitializeNonLocal : -# 1869| r1869_1(glval>) = VariableAddress[b] : -# 1869| mu1869_2(Bar1) = Uninitialized[b] : &:r1869_1 -# 1870| r1870_1(glval>) = VariableAddress[b] : -# 1870| r1870_2(glval) = FunctionAddress[missing_type_decl_entry] : -# 1870| r1870_3(S *) = Constant[0] : -# 1870| r1870_4(void *) = Call[missing_type_decl_entry] : func:r1870_2, this:r1870_1, 0:r1870_3 -# 1870| mu1870_5(unknown) = ^CallSideEffect : ~m? -# 1870| v1870_6(void) = ^IndirectReadSideEffect[-1] : &:r1870_1, ~m? -# 1870| v1870_7(void) = ^BufferReadSideEffect[0] : &:r1870_3, ~m? -# 1870| mu1870_8(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1870_1 -# 1870| mu1870_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1870_3 -# 1871| v1871_1(void) = NoOp : -# 1868| v1868_4(void) = ReturnVoid : -# 1868| v1868_5(void) = AliasedUse : ~m? -# 1868| v1868_6(void) = ExitFunction : +# 1870| void missing_declaration_entries::test1() +# 1870| Block 0 +# 1870| v1870_1(void) = EnterFunction : +# 1870| mu1870_2(unknown) = AliasedDefinition : +# 1870| mu1870_3(unknown) = InitializeNonLocal : +# 1871| r1871_1(glval>) = VariableAddress[b] : +# 1871| mu1871_2(Bar1) = Uninitialized[b] : &:r1871_1 +# 1872| r1872_1(glval>) = VariableAddress[b] : +# 1872| r1872_2(glval) = FunctionAddress[missing_type_decl_entry] : +# 1872| r1872_3(S *) = Constant[0] : +# 1872| r1872_4(void *) = Call[missing_type_decl_entry] : func:r1872_2, this:r1872_1, 0:r1872_3 +# 1872| mu1872_5(unknown) = ^CallSideEffect : ~m? +# 1872| v1872_6(void) = ^IndirectReadSideEffect[-1] : &:r1872_1, ~m? +# 1872| v1872_7(void) = ^BufferReadSideEffect[0] : &:r1872_3, ~m? +# 1872| mu1872_8(Bar1) = ^IndirectMayWriteSideEffect[-1] : &:r1872_1 +# 1872| mu1872_9(unknown) = ^BufferMayWriteSideEffect[0] : &:r1872_3 +# 1873| v1873_1(void) = NoOp : +# 1870| v1870_4(void) = ReturnVoid : +# 1870| v1870_5(void) = AliasedUse : ~m? +# 1870| v1870_6(void) = ExitFunction : -# 1875| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() -# 1875| Block 0 -# 1875| v1875_1(void) = EnterFunction : -# 1875| mu1875_2(unknown) = AliasedDefinition : -# 1875| mu1875_3(unknown) = InitializeNonLocal : -# 1875| r1875_4(glval) = VariableAddress[#this] : -# 1875| mu1875_5(glval>) = InitializeParameter[#this] : &:r1875_4 -# 1875| r1875_6(glval>) = Load[#this] : &:r1875_4, ~m? -# 1875| mu1875_7(Bar2) = InitializeIndirection[#this] : &:r1875_6 -# 1876| r1876_1(glval) = VariableAddress[x] : -# 1876| mu1876_2(int[10]) = Uninitialized[x] : &:r1876_1 -# 1876| r1876_3(glval) = VariableAddress[y] : -# 1876| mu1876_4(int[10]) = Uninitialized[y] : &:r1876_3 -# 1877| r1877_1(int) = Constant[10] : -# 1877| r1877_2(glval) = VariableAddress[x] : -# 1877| r1877_3(int *) = Convert : r1877_2 -# 1877| r1877_4(glval) = CopyValue : r1877_3 -# 1877| mu1877_5(int) = Store[?] : &:r1877_4, r1877_1 -# 1878| r1878_1(int) = Constant[10] : -# 1878| r1878_2(glval) = VariableAddress[y] : -# 1878| r1878_3(int *) = Convert : r1878_2 -# 1878| r1878_4(glval) = CopyValue : r1878_3 -# 1878| mu1878_5(int) = Store[?] : &:r1878_4, r1878_1 -# 1879| r1879_1(glval) = VariableAddress[#return] : +# 1877| int missing_declaration_entries::Bar2::two_missing_variable_declaration_entries() +# 1877| Block 0 +# 1877| v1877_1(void) = EnterFunction : +# 1877| mu1877_2(unknown) = AliasedDefinition : +# 1877| mu1877_3(unknown) = InitializeNonLocal : +# 1877| r1877_4(glval) = VariableAddress[#this] : +# 1877| mu1877_5(glval>) = InitializeParameter[#this] : &:r1877_4 +# 1877| r1877_6(glval>) = Load[#this] : &:r1877_4, ~m? +# 1877| mu1877_7(Bar2) = InitializeIndirection[#this] : &:r1877_6 +# 1878| r1878_1(glval) = VariableAddress[x] : +# 1878| mu1878_2(int[10]) = Uninitialized[x] : &:r1878_1 +# 1878| r1878_3(glval) = VariableAddress[y] : +# 1878| mu1878_4(int[10]) = Uninitialized[y] : &:r1878_3 +# 1879| r1879_1(int) = Constant[10] : # 1879| r1879_2(glval) = VariableAddress[x] : # 1879| r1879_3(int *) = Convert : r1879_2 -# 1879| r1879_4(int) = Load[?] : &:r1879_3, ~m? -# 1879| r1879_5(glval) = VariableAddress[y] : -# 1879| r1879_6(int *) = Convert : r1879_5 -# 1879| r1879_7(int) = Load[?] : &:r1879_6, ~m? -# 1879| r1879_8(int) = Add : r1879_4, r1879_7 -# 1879| mu1879_9(int) = Store[#return] : &:r1879_1, r1879_8 -# 1875| v1875_8(void) = ReturnIndirection[#this] : &:r1875_6, ~m? -# 1875| r1875_9(glval) = VariableAddress[#return] : -# 1875| v1875_10(void) = ReturnValue : &:r1875_9, ~m? -# 1875| v1875_11(void) = AliasedUse : ~m? -# 1875| v1875_12(void) = ExitFunction : +# 1879| r1879_4(glval) = CopyValue : r1879_3 +# 1879| mu1879_5(int) = Store[?] : &:r1879_4, r1879_1 +# 1880| r1880_1(int) = Constant[10] : +# 1880| r1880_2(glval) = VariableAddress[y] : +# 1880| r1880_3(int *) = Convert : r1880_2 +# 1880| r1880_4(glval) = CopyValue : r1880_3 +# 1880| mu1880_5(int) = Store[?] : &:r1880_4, r1880_1 +# 1881| r1881_1(glval) = VariableAddress[#return] : +# 1881| r1881_2(glval) = VariableAddress[x] : +# 1881| r1881_3(int *) = Convert : r1881_2 +# 1881| r1881_4(int) = Load[?] : &:r1881_3, ~m? +# 1881| r1881_5(glval) = VariableAddress[y] : +# 1881| r1881_6(int *) = Convert : r1881_5 +# 1881| r1881_7(int) = Load[?] : &:r1881_6, ~m? +# 1881| r1881_8(int) = Add : r1881_4, r1881_7 +# 1881| mu1881_9(int) = Store[#return] : &:r1881_1, r1881_8 +# 1877| v1877_8(void) = ReturnIndirection[#this] : &:r1877_6, ~m? +# 1877| r1877_9(glval) = VariableAddress[#return] : +# 1877| v1877_10(void) = ReturnValue : &:r1877_9, ~m? +# 1877| v1877_11(void) = AliasedUse : ~m? +# 1877| v1877_12(void) = ExitFunction : -# 1883| void missing_declaration_entries::test2() -# 1883| Block 0 -# 1883| v1883_1(void) = EnterFunction : -# 1883| mu1883_2(unknown) = AliasedDefinition : -# 1883| mu1883_3(unknown) = InitializeNonLocal : -# 1884| r1884_1(glval>) = VariableAddress[b] : -# 1884| mu1884_2(Bar2) = Uninitialized[b] : &:r1884_1 -# 1885| r1885_1(glval>) = VariableAddress[b] : -# 1885| r1885_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : -# 1885| r1885_3(int) = Call[two_missing_variable_declaration_entries] : func:r1885_2, this:r1885_1 -# 1885| mu1885_4(unknown) = ^CallSideEffect : ~m? -# 1885| v1885_5(void) = ^IndirectReadSideEffect[-1] : &:r1885_1, ~m? -# 1885| mu1885_6(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1885_1 -# 1886| v1886_1(void) = NoOp : -# 1883| v1883_4(void) = ReturnVoid : -# 1883| v1883_5(void) = AliasedUse : ~m? -# 1883| v1883_6(void) = ExitFunction : +# 1885| void missing_declaration_entries::test2() +# 1885| Block 0 +# 1885| v1885_1(void) = EnterFunction : +# 1885| mu1885_2(unknown) = AliasedDefinition : +# 1885| mu1885_3(unknown) = InitializeNonLocal : +# 1886| r1886_1(glval>) = VariableAddress[b] : +# 1886| mu1886_2(Bar2) = Uninitialized[b] : &:r1886_1 +# 1887| r1887_1(glval>) = VariableAddress[b] : +# 1887| r1887_2(glval) = FunctionAddress[two_missing_variable_declaration_entries] : +# 1887| r1887_3(int) = Call[two_missing_variable_declaration_entries] : func:r1887_2, this:r1887_1 +# 1887| mu1887_4(unknown) = ^CallSideEffect : ~m? +# 1887| v1887_5(void) = ^IndirectReadSideEffect[-1] : &:r1887_1, ~m? +# 1887| mu1887_6(Bar2) = ^IndirectMayWriteSideEffect[-1] : &:r1887_1 +# 1888| v1888_1(void) = NoOp : +# 1885| v1885_4(void) = ReturnVoid : +# 1885| v1885_5(void) = AliasedUse : ~m? +# 1885| v1885_6(void) = ExitFunction : -# 1889| char global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| mu1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(char) = Constant[42] : -# 1889| mu1889_5(char) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| v1889_6(void) = ReturnVoid : -# 1889| v1889_7(void) = AliasedUse : ~m? -# 1889| v1889_8(void) = ExitFunction : - -# 1889| int global_template -# 1889| Block 0 -# 1889| v1889_1(void) = EnterFunction : -# 1889| mu1889_2(unknown) = AliasedDefinition : -# 1889| r1889_3(glval) = VariableAddress[global_template] : -# 1889| r1889_4(int) = Constant[42] : -# 1889| mu1889_5(int) = Store[global_template] : &:r1889_3, r1889_4 -# 1889| v1889_6(void) = ReturnVoid : -# 1889| v1889_7(void) = AliasedUse : ~m? -# 1889| v1889_8(void) = ExitFunction : - -# 1891| int test_global_template_int() +# 1891| char global_template # 1891| Block 0 # 1891| v1891_1(void) = EnterFunction : # 1891| mu1891_2(unknown) = AliasedDefinition : -# 1891| mu1891_3(unknown) = InitializeNonLocal : -# 1892| r1892_1(glval) = VariableAddress[local_int] : -# 1892| r1892_2(glval) = VariableAddress[global_template] : -# 1892| r1892_3(int) = Load[global_template] : &:r1892_2, ~m? -# 1892| mu1892_4(int) = Store[local_int] : &:r1892_1, r1892_3 -# 1893| r1893_1(glval) = VariableAddress[local_char] : -# 1893| r1893_2(glval) = VariableAddress[global_template] : -# 1893| r1893_3(char) = Load[global_template] : &:r1893_2, ~m? -# 1893| mu1893_4(char) = Store[local_char] : &:r1893_1, r1893_3 -# 1894| r1894_1(glval) = VariableAddress[#return] : -# 1894| r1894_2(glval) = VariableAddress[local_int] : -# 1894| r1894_3(int) = Load[local_int] : &:r1894_2, ~m? -# 1894| r1894_4(glval) = VariableAddress[local_char] : -# 1894| r1894_5(char) = Load[local_char] : &:r1894_4, ~m? -# 1894| r1894_6(int) = Convert : r1894_5 -# 1894| r1894_7(int) = Add : r1894_3, r1894_6 -# 1894| mu1894_8(int) = Store[#return] : &:r1894_1, r1894_7 -# 1891| r1891_4(glval) = VariableAddress[#return] : -# 1891| v1891_5(void) = ReturnValue : &:r1891_4, ~m? -# 1891| v1891_6(void) = AliasedUse : ~m? -# 1891| v1891_7(void) = ExitFunction : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(char) = Constant[42] : +# 1891| mu1891_5(char) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| v1891_6(void) = ReturnVoid : +# 1891| v1891_7(void) = AliasedUse : ~m? +# 1891| v1891_8(void) = ExitFunction : -# 1899| int noreturnTest(int) -# 1899| Block 0 -# 1899| v1899_1(void) = EnterFunction : -# 1899| mu1899_2(unknown) = AliasedDefinition : -# 1899| mu1899_3(unknown) = InitializeNonLocal : -# 1899| r1899_4(glval) = VariableAddress[x] : -# 1899| mu1899_5(int) = InitializeParameter[x] : &:r1899_4 -# 1900| r1900_1(glval) = VariableAddress[x] : -# 1900| r1900_2(int) = Load[x] : &:r1900_1, ~m? -# 1900| r1900_3(int) = Constant[10] : -# 1900| r1900_4(bool) = CompareLT : r1900_2, r1900_3 -# 1900| v1900_5(void) = ConditionalBranch : r1900_4 +# 1891| int global_template +# 1891| Block 0 +# 1891| v1891_1(void) = EnterFunction : +# 1891| mu1891_2(unknown) = AliasedDefinition : +# 1891| r1891_3(glval) = VariableAddress[global_template] : +# 1891| r1891_4(int) = Constant[42] : +# 1891| mu1891_5(int) = Store[global_template] : &:r1891_3, r1891_4 +# 1891| v1891_6(void) = ReturnVoid : +# 1891| v1891_7(void) = AliasedUse : ~m? +# 1891| v1891_8(void) = ExitFunction : + +# 1893| int test_global_template_int() +# 1893| Block 0 +# 1893| v1893_1(void) = EnterFunction : +# 1893| mu1893_2(unknown) = AliasedDefinition : +# 1893| mu1893_3(unknown) = InitializeNonLocal : +# 1894| r1894_1(glval) = VariableAddress[local_int] : +# 1894| r1894_2(glval) = VariableAddress[global_template] : +# 1894| r1894_3(int) = Load[global_template] : &:r1894_2, ~m? +# 1894| mu1894_4(int) = Store[local_int] : &:r1894_1, r1894_3 +# 1895| r1895_1(glval) = VariableAddress[local_char] : +# 1895| r1895_2(glval) = VariableAddress[global_template] : +# 1895| r1895_3(char) = Load[global_template] : &:r1895_2, ~m? +# 1895| mu1895_4(char) = Store[local_char] : &:r1895_1, r1895_3 +# 1896| r1896_1(glval) = VariableAddress[#return] : +# 1896| r1896_2(glval) = VariableAddress[local_int] : +# 1896| r1896_3(int) = Load[local_int] : &:r1896_2, ~m? +# 1896| r1896_4(glval) = VariableAddress[local_char] : +# 1896| r1896_5(char) = Load[local_char] : &:r1896_4, ~m? +# 1896| r1896_6(int) = Convert : r1896_5 +# 1896| r1896_7(int) = Add : r1896_3, r1896_6 +# 1896| mu1896_8(int) = Store[#return] : &:r1896_1, r1896_7 +# 1893| r1893_4(glval) = VariableAddress[#return] : +# 1893| v1893_5(void) = ReturnValue : &:r1893_4, ~m? +# 1893| v1893_6(void) = AliasedUse : ~m? +# 1893| v1893_7(void) = ExitFunction : + +# 1901| int noreturnTest(int) +# 1901| Block 0 +# 1901| v1901_1(void) = EnterFunction : +# 1901| mu1901_2(unknown) = AliasedDefinition : +# 1901| mu1901_3(unknown) = InitializeNonLocal : +# 1901| r1901_4(glval) = VariableAddress[x] : +# 1901| mu1901_5(int) = InitializeParameter[x] : &:r1901_4 +# 1902| r1902_1(glval) = VariableAddress[x] : +# 1902| r1902_2(int) = Load[x] : &:r1902_1, ~m? +# 1902| r1902_3(int) = Constant[10] : +# 1902| r1902_4(bool) = CompareLT : r1902_2, r1902_3 +# 1902| v1902_5(void) = ConditionalBranch : r1902_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 1899| Block 1 -# 1899| r1899_6(glval) = VariableAddress[#return] : -# 1899| v1899_7(void) = ReturnValue : &:r1899_6, ~m? -# 1899| v1899_8(void) = AliasedUse : ~m? -# 1899| v1899_9(void) = ExitFunction : +# 1901| Block 1 +# 1901| r1901_6(glval) = VariableAddress[#return] : +# 1901| v1901_7(void) = ReturnValue : &:r1901_6, ~m? +# 1901| v1901_8(void) = AliasedUse : ~m? +# 1901| v1901_9(void) = ExitFunction : -# 1901| Block 2 -# 1901| r1901_1(glval) = VariableAddress[#return] : -# 1901| r1901_2(glval) = VariableAddress[x] : -# 1901| r1901_3(int) = Load[x] : &:r1901_2, ~m? -# 1901| mu1901_4(int) = Store[#return] : &:r1901_1, r1901_3 +# 1903| Block 2 +# 1903| r1903_1(glval) = VariableAddress[#return] : +# 1903| r1903_2(glval) = VariableAddress[x] : +# 1903| r1903_3(int) = Load[x] : &:r1903_2, ~m? +# 1903| mu1903_4(int) = Store[#return] : &:r1903_1, r1903_3 #-----| Goto -> Block 1 -# 1903| Block 3 -# 1903| r1903_1(glval) = FunctionAddress[noreturnFunc] : -# 1903| v1903_2(void) = Call[noreturnFunc] : func:r1903_1 -# 1903| mu1903_3(unknown) = ^CallSideEffect : ~m? -# 1899| v1899_10(void) = Unreached : +# 1905| Block 3 +# 1905| r1905_1(glval) = FunctionAddress[noreturnFunc] : +# 1905| v1905_2(void) = Call[noreturnFunc] : func:r1905_1 +# 1905| mu1905_3(unknown) = ^CallSideEffect : ~m? +# 1901| v1901_10(void) = Unreached : -# 1905| Block 4 -# 1905| r1905_1(glval) = VariableAddress[#return] : -# 1905| mu1905_2(int) = Uninitialized[#return] : &:r1905_1 +# 1907| Block 4 +# 1907| r1907_1(glval) = VariableAddress[#return] : +# 1907| mu1907_2(int) = Uninitialized[#return] : &:r1907_1 #-----| Goto -> Block 1 -# 1907| int noreturnTest2(int) -# 1907| Block 0 -# 1907| v1907_1(void) = EnterFunction : -# 1907| mu1907_2(unknown) = AliasedDefinition : -# 1907| mu1907_3(unknown) = InitializeNonLocal : -# 1907| r1907_4(glval) = VariableAddress[x] : -# 1907| mu1907_5(int) = InitializeParameter[x] : &:r1907_4 -# 1908| r1908_1(glval) = VariableAddress[x] : -# 1908| r1908_2(int) = Load[x] : &:r1908_1, ~m? -# 1908| r1908_3(int) = Constant[10] : -# 1908| r1908_4(bool) = CompareLT : r1908_2, r1908_3 -# 1908| v1908_5(void) = ConditionalBranch : r1908_4 +# 1909| int noreturnTest2(int) +# 1909| Block 0 +# 1909| v1909_1(void) = EnterFunction : +# 1909| mu1909_2(unknown) = AliasedDefinition : +# 1909| mu1909_3(unknown) = InitializeNonLocal : +# 1909| r1909_4(glval) = VariableAddress[x] : +# 1909| mu1909_5(int) = InitializeParameter[x] : &:r1909_4 +# 1910| r1910_1(glval) = VariableAddress[x] : +# 1910| r1910_2(int) = Load[x] : &:r1910_1, ~m? +# 1910| r1910_3(int) = Constant[10] : +# 1910| r1910_4(bool) = CompareLT : r1910_2, r1910_3 +# 1910| v1910_5(void) = ConditionalBranch : r1910_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 1909| Block 1 -# 1909| r1909_1(glval) = FunctionAddress[noreturnFunc] : -# 1909| v1909_2(void) = Call[noreturnFunc] : func:r1909_1 -# 1909| mu1909_3(unknown) = ^CallSideEffect : ~m? -# 1907| v1907_6(void) = Unreached : +# 1911| Block 1 +# 1911| r1911_1(glval) = FunctionAddress[noreturnFunc] : +# 1911| v1911_2(void) = Call[noreturnFunc] : func:r1911_1 +# 1911| mu1911_3(unknown) = ^CallSideEffect : ~m? +# 1909| v1909_6(void) = Unreached : -# 1911| Block 2 -# 1911| r1911_1(glval) = VariableAddress[#return] : -# 1911| r1911_2(glval) = VariableAddress[x] : -# 1911| r1911_3(int) = Load[x] : &:r1911_2, ~m? -# 1911| mu1911_4(int) = Store[#return] : &:r1911_1, r1911_3 -# 1907| r1907_7(glval) = VariableAddress[#return] : -# 1907| v1907_8(void) = ReturnValue : &:r1907_7, ~m? -# 1907| v1907_9(void) = AliasedUse : ~m? -# 1907| v1907_10(void) = ExitFunction : +# 1913| Block 2 +# 1913| r1913_1(glval) = VariableAddress[#return] : +# 1913| r1913_2(glval) = VariableAddress[x] : +# 1913| r1913_3(int) = Load[x] : &:r1913_2, ~m? +# 1913| mu1913_4(int) = Store[#return] : &:r1913_1, r1913_3 +# 1909| r1909_7(glval) = VariableAddress[#return] : +# 1909| v1909_8(void) = ReturnValue : &:r1909_7, ~m? +# 1909| v1909_9(void) = AliasedUse : ~m? +# 1909| v1909_10(void) = ExitFunction : -# 1914| int static_function(int) -# 1914| Block 0 -# 1914| v1914_1(void) = EnterFunction : -# 1914| mu1914_2(unknown) = AliasedDefinition : -# 1914| mu1914_3(unknown) = InitializeNonLocal : -# 1914| r1914_4(glval) = VariableAddress[x] : -# 1914| mu1914_5(int) = InitializeParameter[x] : &:r1914_4 -# 1915| r1915_1(glval) = VariableAddress[#return] : -# 1915| r1915_2(glval) = VariableAddress[x] : -# 1915| r1915_3(int) = Load[x] : &:r1915_2, ~m? -# 1915| mu1915_4(int) = Store[#return] : &:r1915_1, r1915_3 -# 1914| r1914_6(glval) = VariableAddress[#return] : -# 1914| v1914_7(void) = ReturnValue : &:r1914_6, ~m? -# 1914| v1914_8(void) = AliasedUse : ~m? -# 1914| v1914_9(void) = ExitFunction : +# 1916| int static_function(int) +# 1916| Block 0 +# 1916| v1916_1(void) = EnterFunction : +# 1916| mu1916_2(unknown) = AliasedDefinition : +# 1916| mu1916_3(unknown) = InitializeNonLocal : +# 1916| r1916_4(glval) = VariableAddress[x] : +# 1916| mu1916_5(int) = InitializeParameter[x] : &:r1916_4 +# 1917| r1917_1(glval) = VariableAddress[#return] : +# 1917| r1917_2(glval) = VariableAddress[x] : +# 1917| r1917_3(int) = Load[x] : &:r1917_2, ~m? +# 1917| mu1917_4(int) = Store[#return] : &:r1917_1, r1917_3 +# 1916| r1916_6(glval) = VariableAddress[#return] : +# 1916| v1916_7(void) = ReturnValue : &:r1916_6, ~m? +# 1916| v1916_8(void) = AliasedUse : ~m? +# 1916| v1916_9(void) = ExitFunction : -# 1918| void test_static_functions_with_assignments() -# 1918| Block 0 -# 1918| v1918_1(void) = EnterFunction : -# 1918| mu1918_2(unknown) = AliasedDefinition : -# 1918| mu1918_3(unknown) = InitializeNonLocal : -# 1919| r1919_1(glval) = VariableAddress[c] : -# 1919| mu1919_2(C) = Uninitialized[c] : &:r1919_1 -# 1919| r1919_3(glval) = FunctionAddress[C] : -# 1919| v1919_4(void) = Call[C] : func:r1919_3, this:r1919_1 -# 1919| mu1919_5(unknown) = ^CallSideEffect : ~m? -# 1919| mu1919_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1919_1 -# 1920| r1920_1(glval) = VariableAddress[x] : -# 1920| mu1920_2(int) = Uninitialized[x] : &:r1920_1 +# 1920| void test_static_functions_with_assignments() +# 1920| Block 0 +# 1920| v1920_1(void) = EnterFunction : +# 1920| mu1920_2(unknown) = AliasedDefinition : +# 1920| mu1920_3(unknown) = InitializeNonLocal : # 1921| r1921_1(glval) = VariableAddress[c] : -# 1921| r1921_2(glval) = FunctionAddress[StaticMemberFunction] : -# 1921| r1921_3(int) = Constant[10] : -# 1921| r1921_4(int) = Call[StaticMemberFunction] : func:r1921_2, 0:r1921_3 +# 1921| mu1921_2(C) = Uninitialized[c] : &:r1921_1 +# 1921| r1921_3(glval) = FunctionAddress[C] : +# 1921| v1921_4(void) = Call[C] : func:r1921_3, this:r1921_1 # 1921| mu1921_5(unknown) = ^CallSideEffect : ~m? -# 1921| r1921_6(glval) = VariableAddress[x] : -# 1921| mu1921_7(int) = Store[x] : &:r1921_6, r1921_4 -# 1922| r1922_1(glval) = VariableAddress[y] : -# 1922| mu1922_2(int) = Uninitialized[y] : &:r1922_1 -# 1923| r1923_1(glval) = FunctionAddress[StaticMemberFunction] : -# 1923| r1923_2(int) = Constant[10] : -# 1923| r1923_3(int) = Call[StaticMemberFunction] : func:r1923_1, 0:r1923_2 -# 1923| mu1923_4(unknown) = ^CallSideEffect : ~m? -# 1923| r1923_5(glval) = VariableAddress[y] : -# 1923| mu1923_6(int) = Store[y] : &:r1923_5, r1923_3 -# 1924| r1924_1(glval) = VariableAddress[z] : -# 1924| mu1924_2(int) = Uninitialized[z] : &:r1924_1 -# 1925| r1925_1(glval) = FunctionAddress[static_function] : +# 1921| mu1921_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1921_1 +# 1922| r1922_1(glval) = VariableAddress[x] : +# 1922| mu1922_2(int) = Uninitialized[x] : &:r1922_1 +# 1923| r1923_1(glval) = VariableAddress[c] : +# 1923| r1923_2(glval) = FunctionAddress[StaticMemberFunction] : +# 1923| r1923_3(int) = Constant[10] : +# 1923| r1923_4(int) = Call[StaticMemberFunction] : func:r1923_2, 0:r1923_3 +# 1923| mu1923_5(unknown) = ^CallSideEffect : ~m? +# 1923| r1923_6(glval) = VariableAddress[x] : +# 1923| mu1923_7(int) = Store[x] : &:r1923_6, r1923_4 +# 1924| r1924_1(glval) = VariableAddress[y] : +# 1924| mu1924_2(int) = Uninitialized[y] : &:r1924_1 +# 1925| r1925_1(glval) = FunctionAddress[StaticMemberFunction] : # 1925| r1925_2(int) = Constant[10] : -# 1925| r1925_3(int) = Call[static_function] : func:r1925_1, 0:r1925_2 +# 1925| r1925_3(int) = Call[StaticMemberFunction] : func:r1925_1, 0:r1925_2 # 1925| mu1925_4(unknown) = ^CallSideEffect : ~m? -# 1925| r1925_5(glval) = VariableAddress[z] : -# 1925| mu1925_6(int) = Store[z] : &:r1925_5, r1925_3 -# 1926| v1926_1(void) = NoOp : -# 1918| v1918_4(void) = ReturnVoid : -# 1918| v1918_5(void) = AliasedUse : ~m? -# 1918| v1918_6(void) = ExitFunction : +# 1925| r1925_5(glval) = VariableAddress[y] : +# 1925| mu1925_6(int) = Store[y] : &:r1925_5, r1925_3 +# 1926| r1926_1(glval) = VariableAddress[z] : +# 1926| mu1926_2(int) = Uninitialized[z] : &:r1926_1 +# 1927| r1927_1(glval) = FunctionAddress[static_function] : +# 1927| r1927_2(int) = Constant[10] : +# 1927| r1927_3(int) = Call[static_function] : func:r1927_1, 0:r1927_2 +# 1927| mu1927_4(unknown) = ^CallSideEffect : ~m? +# 1927| r1927_5(glval) = VariableAddress[z] : +# 1927| mu1927_6(int) = Store[z] : &:r1927_5, r1927_3 +# 1928| v1928_1(void) = NoOp : +# 1920| v1920_4(void) = ReturnVoid : +# 1920| v1920_5(void) = AliasedUse : ~m? +# 1920| v1920_6(void) = ExitFunction : -# 1928| void test_double_assign() -# 1928| Block 0 -# 1928| v1928_1(void) = EnterFunction : -# 1928| mu1928_2(unknown) = AliasedDefinition : -# 1928| mu1928_3(unknown) = InitializeNonLocal : -# 1929| r1929_1(glval) = VariableAddress[i] : -# 1929| mu1929_2(int) = Uninitialized[i] : &:r1929_1 -# 1929| r1929_3(glval) = VariableAddress[j] : -# 1929| mu1929_4(int) = Uninitialized[j] : &:r1929_3 -# 1930| r1930_1(int) = Constant[40] : -# 1930| r1930_2(glval) = VariableAddress[j] : -# 1930| mu1930_3(int) = Store[j] : &:r1930_2, r1930_1 -# 1930| r1930_4(int) = Load[j] : &:r1930_2, ~m? -# 1930| r1930_5(glval) = VariableAddress[i] : -# 1930| mu1930_6(int) = Store[i] : &:r1930_5, r1930_4 -# 1931| v1931_1(void) = NoOp : -# 1928| v1928_4(void) = ReturnVoid : -# 1928| v1928_5(void) = AliasedUse : ~m? -# 1928| v1928_6(void) = ExitFunction : +# 1930| void test_double_assign() +# 1930| Block 0 +# 1930| v1930_1(void) = EnterFunction : +# 1930| mu1930_2(unknown) = AliasedDefinition : +# 1930| mu1930_3(unknown) = InitializeNonLocal : +# 1931| r1931_1(glval) = VariableAddress[i] : +# 1931| mu1931_2(int) = Uninitialized[i] : &:r1931_1 +# 1931| r1931_3(glval) = VariableAddress[j] : +# 1931| mu1931_4(int) = Uninitialized[j] : &:r1931_3 +# 1932| r1932_1(int) = Constant[40] : +# 1932| r1932_2(glval) = VariableAddress[j] : +# 1932| mu1932_3(int) = Store[j] : &:r1932_2, r1932_1 +# 1932| r1932_4(int) = Load[j] : &:r1932_2, ~m? +# 1932| r1932_5(glval) = VariableAddress[i] : +# 1932| mu1932_6(int) = Store[i] : &:r1932_5, r1932_4 +# 1933| v1933_1(void) = NoOp : +# 1930| v1930_4(void) = ReturnVoid : +# 1930| v1930_5(void) = AliasedUse : ~m? +# 1930| v1930_6(void) = ExitFunction : -# 1933| void test_assign_with_assign_operation() -# 1933| Block 0 -# 1933| v1933_1(void) = EnterFunction : -# 1933| mu1933_2(unknown) = AliasedDefinition : -# 1933| mu1933_3(unknown) = InitializeNonLocal : -# 1934| r1934_1(glval) = VariableAddress[i] : -# 1934| mu1934_2(int) = Uninitialized[i] : &:r1934_1 -# 1934| r1934_3(glval) = VariableAddress[j] : -# 1934| r1934_4(int) = Constant[0] : -# 1934| mu1934_5(int) = Store[j] : &:r1934_3, r1934_4 -# 1935| r1935_1(int) = Constant[40] : -# 1935| r1935_2(glval) = VariableAddress[j] : -# 1935| r1935_3(int) = Load[j] : &:r1935_2, ~m? -# 1935| r1935_4(int) = Add : r1935_3, r1935_1 -# 1935| mu1935_5(int) = Store[j] : &:r1935_2, r1935_4 -# 1935| r1935_6(int) = Load[j] : &:r1935_2, ~m? -# 1935| r1935_7(glval) = VariableAddress[i] : -# 1935| mu1935_8(int) = Store[i] : &:r1935_7, r1935_6 -# 1936| v1936_1(void) = NoOp : -# 1933| v1933_4(void) = ReturnVoid : -# 1933| v1933_5(void) = AliasedUse : ~m? -# 1933| v1933_6(void) = ExitFunction : +# 1935| void test_assign_with_assign_operation() +# 1935| Block 0 +# 1935| v1935_1(void) = EnterFunction : +# 1935| mu1935_2(unknown) = AliasedDefinition : +# 1935| mu1935_3(unknown) = InitializeNonLocal : +# 1936| r1936_1(glval) = VariableAddress[i] : +# 1936| mu1936_2(int) = Uninitialized[i] : &:r1936_1 +# 1936| r1936_3(glval) = VariableAddress[j] : +# 1936| r1936_4(int) = Constant[0] : +# 1936| mu1936_5(int) = Store[j] : &:r1936_3, r1936_4 +# 1937| r1937_1(int) = Constant[40] : +# 1937| r1937_2(glval) = VariableAddress[j] : +# 1937| r1937_3(int) = Load[j] : &:r1937_2, ~m? +# 1937| r1937_4(int) = Add : r1937_3, r1937_1 +# 1937| mu1937_5(int) = Store[j] : &:r1937_2, r1937_4 +# 1937| r1937_6(int) = Load[j] : &:r1937_2, ~m? +# 1937| r1937_7(glval) = VariableAddress[i] : +# 1937| mu1937_8(int) = Store[i] : &:r1937_7, r1937_6 +# 1938| v1938_1(void) = NoOp : +# 1935| v1935_4(void) = ReturnVoid : +# 1935| v1935_5(void) = AliasedUse : ~m? +# 1935| v1935_6(void) = ExitFunction : -# 1942| D& D::ReferenceStaticMemberFunction() -# 1942| Block 0 -# 1942| v1942_1(void) = EnterFunction : -# 1942| mu1942_2(unknown) = AliasedDefinition : -# 1942| mu1942_3(unknown) = InitializeNonLocal : -# 1943| r1943_1(glval) = VariableAddress[#return] : -# 1943| r1943_2(glval) = VariableAddress[x] : -# 1943| r1943_3(D &) = CopyValue : r1943_2 -# 1943| mu1943_4(D &) = Store[#return] : &:r1943_1, r1943_3 -# 1942| r1942_4(glval) = VariableAddress[#return] : -# 1942| v1942_5(void) = ReturnValue : &:r1942_4, ~m? -# 1942| v1942_6(void) = AliasedUse : ~m? -# 1942| v1942_7(void) = ExitFunction : +# 1944| D& D::ReferenceStaticMemberFunction() +# 1944| Block 0 +# 1944| v1944_1(void) = EnterFunction : +# 1944| mu1944_2(unknown) = AliasedDefinition : +# 1944| mu1944_3(unknown) = InitializeNonLocal : +# 1945| r1945_1(glval) = VariableAddress[#return] : +# 1945| r1945_2(glval) = VariableAddress[x] : +# 1945| r1945_3(D &) = CopyValue : r1945_2 +# 1945| mu1945_4(D &) = Store[#return] : &:r1945_1, r1945_3 +# 1944| r1944_4(glval) = VariableAddress[#return] : +# 1944| v1944_5(void) = ReturnValue : &:r1944_4, ~m? +# 1944| v1944_6(void) = AliasedUse : ~m? +# 1944| v1944_7(void) = ExitFunction : -# 1945| D D::ObjectStaticMemberFunction() -# 1945| Block 0 -# 1945| v1945_1(void) = EnterFunction : -# 1945| mu1945_2(unknown) = AliasedDefinition : -# 1945| mu1945_3(unknown) = InitializeNonLocal : -# 1946| r1946_1(glval) = VariableAddress[#return] : -# 1946| r1946_2(glval) = VariableAddress[x] : -# 1946| r1946_3(D) = Load[x] : &:r1946_2, ~m? -# 1946| mu1946_4(D) = Store[#return] : &:r1946_1, r1946_3 -# 1945| r1945_4(glval) = VariableAddress[#return] : -# 1945| v1945_5(void) = ReturnValue : &:r1945_4, ~m? -# 1945| v1945_6(void) = AliasedUse : ~m? -# 1945| v1945_7(void) = ExitFunction : +# 1947| D D::ObjectStaticMemberFunction() +# 1947| Block 0 +# 1947| v1947_1(void) = EnterFunction : +# 1947| mu1947_2(unknown) = AliasedDefinition : +# 1947| mu1947_3(unknown) = InitializeNonLocal : +# 1948| r1948_1(glval) = VariableAddress[#return] : +# 1948| r1948_2(glval) = VariableAddress[x] : +# 1948| r1948_3(D) = Load[x] : &:r1948_2, ~m? +# 1948| mu1948_4(D) = Store[#return] : &:r1948_1, r1948_3 +# 1947| r1947_4(glval) = VariableAddress[#return] : +# 1947| v1947_5(void) = ReturnValue : &:r1947_4, ~m? +# 1947| v1947_6(void) = AliasedUse : ~m? +# 1947| v1947_7(void) = ExitFunction : -# 1950| void test_static_member_functions_with_reference_return() -# 1950| Block 0 -# 1950| v1950_1(void) = EnterFunction : -# 1950| mu1950_2(unknown) = AliasedDefinition : -# 1950| mu1950_3(unknown) = InitializeNonLocal : -# 1951| r1951_1(glval) = VariableAddress[d] : -# 1951| mu1951_2(D) = Uninitialized[d] : &:r1951_1 +# 1952| void test_static_member_functions_with_reference_return() +# 1952| Block 0 +# 1952| v1952_1(void) = EnterFunction : +# 1952| mu1952_2(unknown) = AliasedDefinition : +# 1952| mu1952_3(unknown) = InitializeNonLocal : # 1953| r1953_1(glval) = VariableAddress[d] : -# 1953| r1953_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1953| r1953_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1953_2 -# 1953| mu1953_4(unknown) = ^CallSideEffect : ~m? -# 1953| r1953_5(glval) = CopyValue : r1953_3 -# 1954| r1954_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1954| r1954_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1954_1 -# 1954| mu1954_3(unknown) = ^CallSideEffect : ~m? -# 1954| r1954_4(glval) = CopyValue : r1954_2 +# 1953| mu1953_2(D) = Uninitialized[d] : &:r1953_1 # 1955| r1955_1(glval) = VariableAddress[d] : -# 1955| r1955_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1955| r1955_3(D) = Call[ObjectStaticMemberFunction] : func:r1955_2 +# 1955| r1955_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1955| r1955_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1955_2 # 1955| mu1955_4(unknown) = ^CallSideEffect : ~m? -# 1956| r1956_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1956| r1956_2(D) = Call[ObjectStaticMemberFunction] : func:r1956_1 +# 1955| r1955_5(glval) = CopyValue : r1955_3 +# 1956| r1956_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1956| r1956_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1956_1 # 1956| mu1956_3(unknown) = ^CallSideEffect : ~m? -# 1958| r1958_1(glval) = VariableAddress[x] : -# 1958| mu1958_2(D) = Uninitialized[x] : &:r1958_1 -# 1959| r1959_1(glval) = VariableAddress[d] : -# 1959| r1959_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1959| r1959_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1959_2 -# 1959| mu1959_4(unknown) = ^CallSideEffect : ~m? -# 1959| r1959_5(D) = Load[?] : &:r1959_3, ~m? -# 1959| r1959_6(glval) = VariableAddress[x] : -# 1959| mu1959_7(D) = Store[x] : &:r1959_6, r1959_5 -# 1960| r1960_1(glval) = VariableAddress[y] : -# 1960| mu1960_2(D) = Uninitialized[y] : &:r1960_1 -# 1961| r1961_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : -# 1961| r1961_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_1 -# 1961| mu1961_3(unknown) = ^CallSideEffect : ~m? -# 1961| r1961_4(D) = Load[?] : &:r1961_2, ~m? -# 1961| r1961_5(glval) = VariableAddress[y] : -# 1961| mu1961_6(D) = Store[y] : &:r1961_5, r1961_4 -# 1962| r1962_1(glval) = VariableAddress[j] : -# 1962| mu1962_2(D) = Uninitialized[j] : &:r1962_1 -# 1963| r1963_1(glval) = VariableAddress[d] : -# 1963| r1963_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1963| r1963_3(D) = Call[ObjectStaticMemberFunction] : func:r1963_2 -# 1963| mu1963_4(unknown) = ^CallSideEffect : ~m? -# 1963| r1963_5(glval) = VariableAddress[j] : -# 1963| mu1963_6(D) = Store[j] : &:r1963_5, r1963_3 -# 1964| r1964_1(glval) = VariableAddress[k] : -# 1964| mu1964_2(D) = Uninitialized[k] : &:r1964_1 -# 1965| r1965_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : -# 1965| r1965_2(D) = Call[ObjectStaticMemberFunction] : func:r1965_1 -# 1965| mu1965_3(unknown) = ^CallSideEffect : ~m? -# 1965| r1965_4(glval) = VariableAddress[k] : -# 1965| mu1965_5(D) = Store[k] : &:r1965_4, r1965_2 -# 1966| v1966_1(void) = NoOp : -# 1950| v1950_4(void) = ReturnVoid : -# 1950| v1950_5(void) = AliasedUse : ~m? -# 1950| v1950_6(void) = ExitFunction : +# 1956| r1956_4(glval) = CopyValue : r1956_2 +# 1957| r1957_1(glval) = VariableAddress[d] : +# 1957| r1957_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1957| r1957_3(D) = Call[ObjectStaticMemberFunction] : func:r1957_2 +# 1957| mu1957_4(unknown) = ^CallSideEffect : ~m? +# 1958| r1958_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1958| r1958_2(D) = Call[ObjectStaticMemberFunction] : func:r1958_1 +# 1958| mu1958_3(unknown) = ^CallSideEffect : ~m? +# 1960| r1960_1(glval) = VariableAddress[x] : +# 1960| mu1960_2(D) = Uninitialized[x] : &:r1960_1 +# 1961| r1961_1(glval) = VariableAddress[d] : +# 1961| r1961_2(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1961| r1961_3(D &) = Call[ReferenceStaticMemberFunction] : func:r1961_2 +# 1961| mu1961_4(unknown) = ^CallSideEffect : ~m? +# 1961| r1961_5(D) = Load[?] : &:r1961_3, ~m? +# 1961| r1961_6(glval) = VariableAddress[x] : +# 1961| mu1961_7(D) = Store[x] : &:r1961_6, r1961_5 +# 1962| r1962_1(glval) = VariableAddress[y] : +# 1962| mu1962_2(D) = Uninitialized[y] : &:r1962_1 +# 1963| r1963_1(glval) = FunctionAddress[ReferenceStaticMemberFunction] : +# 1963| r1963_2(D &) = Call[ReferenceStaticMemberFunction] : func:r1963_1 +# 1963| mu1963_3(unknown) = ^CallSideEffect : ~m? +# 1963| r1963_4(D) = Load[?] : &:r1963_2, ~m? +# 1963| r1963_5(glval) = VariableAddress[y] : +# 1963| mu1963_6(D) = Store[y] : &:r1963_5, r1963_4 +# 1964| r1964_1(glval) = VariableAddress[j] : +# 1964| mu1964_2(D) = Uninitialized[j] : &:r1964_1 +# 1965| r1965_1(glval) = VariableAddress[d] : +# 1965| r1965_2(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1965| r1965_3(D) = Call[ObjectStaticMemberFunction] : func:r1965_2 +# 1965| mu1965_4(unknown) = ^CallSideEffect : ~m? +# 1965| r1965_5(glval) = VariableAddress[j] : +# 1965| mu1965_6(D) = Store[j] : &:r1965_5, r1965_3 +# 1966| r1966_1(glval) = VariableAddress[k] : +# 1966| mu1966_2(D) = Uninitialized[k] : &:r1966_1 +# 1967| r1967_1(glval) = FunctionAddress[ObjectStaticMemberFunction] : +# 1967| r1967_2(D) = Call[ObjectStaticMemberFunction] : func:r1967_1 +# 1967| mu1967_3(unknown) = ^CallSideEffect : ~m? +# 1967| r1967_4(glval) = VariableAddress[k] : +# 1967| mu1967_5(D) = Store[k] : &:r1967_4, r1967_2 +# 1968| v1968_1(void) = NoOp : +# 1952| v1952_4(void) = ReturnVoid : +# 1952| v1952_5(void) = AliasedUse : ~m? +# 1952| v1952_6(void) = ExitFunction : -# 1968| void test_volatile() -# 1968| Block 0 -# 1968| v1968_1(void) = EnterFunction : -# 1968| mu1968_2(unknown) = AliasedDefinition : -# 1968| mu1968_3(unknown) = InitializeNonLocal : -# 1969| r1969_1(glval) = VariableAddress[x] : -# 1969| mu1969_2(int) = Uninitialized[x] : &:r1969_1 -# 1970| r1970_1(glval) = VariableAddress[x] : -# 1970| r1970_2(int) = Load[x] : &:r1970_1, ~m? -# 1971| v1971_1(void) = NoOp : -# 1968| v1968_4(void) = ReturnVoid : -# 1968| v1968_5(void) = AliasedUse : ~m? -# 1968| v1968_6(void) = ExitFunction : +# 1970| void test_volatile() +# 1970| Block 0 +# 1970| v1970_1(void) = EnterFunction : +# 1970| mu1970_2(unknown) = AliasedDefinition : +# 1970| mu1970_3(unknown) = InitializeNonLocal : +# 1971| r1971_1(glval) = VariableAddress[x] : +# 1971| mu1971_2(int) = Uninitialized[x] : &:r1971_1 +# 1972| r1972_1(glval) = VariableAddress[x] : +# 1972| r1972_2(int) = Load[x] : &:r1972_1, ~m? +# 1973| v1973_1(void) = NoOp : +# 1970| v1970_4(void) = ReturnVoid : +# 1970| v1970_5(void) = AliasedUse : ~m? +# 1970| v1970_6(void) = ExitFunction : -# 1979| void value_category_test() -# 1979| Block 0 -# 1979| v1979_1(void) = EnterFunction : -# 1979| mu1979_2(unknown) = AliasedDefinition : -# 1979| mu1979_3(unknown) = InitializeNonLocal : -# 1980| r1980_1(glval) = VariableAddress[c] : -# 1980| mu1980_2(ValCat) = Uninitialized[c] : &:r1980_1 +# 1981| void value_category_test() +# 1981| Block 0 +# 1981| v1981_1(void) = EnterFunction : +# 1981| mu1981_2(unknown) = AliasedDefinition : +# 1981| mu1981_3(unknown) = InitializeNonLocal : +# 1982| r1982_1(glval) = VariableAddress[c] : +# 1982| mu1982_2(ValCat) = Uninitialized[c] : &:r1982_1 #-----| r0_1(glval) = VariableAddress[#temp0:0] : #-----| mu0_2(ValCat) = Uninitialized[#temp0:0] : &:r0_1 #-----| r0_3(ValCat) = Load[#temp0:0] : &:r0_1, ~m? -# 1982| r1982_1(glval) = VariableAddress[c] : -# 1982| r1982_2(glval) = FunctionAddress[lvalue] : -# 1982| r1982_3(ValCat &) = Call[lvalue] : func:r1982_2 -# 1982| mu1982_4(unknown) = ^CallSideEffect : ~m? -# 1982| r1982_5(glval) = CopyValue : r1982_3 -# 1982| mu1982_6(ValCat) = Store[?] : &:r1982_5, r0_3 +# 1984| r1984_1(glval) = VariableAddress[c] : +# 1984| r1984_2(glval) = FunctionAddress[lvalue] : +# 1984| r1984_3(ValCat &) = Call[lvalue] : func:r1984_2 +# 1984| mu1984_4(unknown) = ^CallSideEffect : ~m? +# 1984| r1984_5(glval) = CopyValue : r1984_3 +# 1984| mu1984_6(ValCat) = Store[?] : &:r1984_5, r0_3 #-----| r0_4(glval) = VariableAddress[#temp0:0] : #-----| mu0_5(ValCat) = Uninitialized[#temp0:0] : &:r0_4 #-----| r0_6(ValCat) = Load[#temp0:0] : &:r0_4, ~m? -# 1983| r1983_1(glval) = VariableAddress[c] : -# 1983| r1983_2(glval) = FunctionAddress[xvalue] : -# 1983| r1983_3(ValCat &&) = Call[xvalue] : func:r1983_2 -# 1983| mu1983_4(unknown) = ^CallSideEffect : ~m? -# 1983| r1983_5(glval) = CopyValue : r1983_3 -# 1983| mu1983_6(ValCat) = Store[?] : &:r1983_5, r0_6 +# 1985| r1985_1(glval) = VariableAddress[c] : +# 1985| r1985_2(glval) = FunctionAddress[xvalue] : +# 1985| r1985_3(ValCat &&) = Call[xvalue] : func:r1985_2 +# 1985| mu1985_4(unknown) = ^CallSideEffect : ~m? +# 1985| r1985_5(glval) = CopyValue : r1985_3 +# 1985| mu1985_6(ValCat) = Store[?] : &:r1985_5, r0_6 #-----| r0_7(glval) = VariableAddress[#temp0:0] : #-----| mu0_8(ValCat) = Uninitialized[#temp0:0] : &:r0_7 #-----| r0_9(ValCat) = Load[#temp0:0] : &:r0_7, ~m? -# 1984| r1984_1(glval) = VariableAddress[#temp1984:5] : -# 1984| r1984_2(glval) = VariableAddress[c] : -# 1984| r1984_3(glval) = FunctionAddress[prvalue] : -# 1984| r1984_4(ValCat) = Call[prvalue] : func:r1984_3 -# 1984| mu1984_5(unknown) = ^CallSideEffect : ~m? -# 1984| mu1984_6(ValCat) = Store[#temp1984:5] : &:r1984_1, r1984_4 -# 1984| mu1984_7(ValCat) = Store[#temp1984:5] : &:r1984_1, r0_9 +# 1986| r1986_1(glval) = VariableAddress[#temp1986:5] : +# 1986| r1986_2(glval) = VariableAddress[c] : +# 1986| r1986_3(glval) = FunctionAddress[prvalue] : +# 1986| r1986_4(ValCat) = Call[prvalue] : func:r1986_3 +# 1986| mu1986_5(unknown) = ^CallSideEffect : ~m? +# 1986| mu1986_6(ValCat) = Store[#temp1986:5] : &:r1986_1, r1986_4 +# 1986| mu1986_7(ValCat) = Store[#temp1986:5] : &:r1986_1, r0_9 #-----| r0_10(glval) = VariableAddress[#temp0:0] : #-----| mu0_11(ValCat) = Uninitialized[#temp0:0] : &:r0_10 #-----| r0_12(ValCat) = Load[#temp0:0] : &:r0_10, ~m? -# 1985| r1985_1(glval) = FunctionAddress[lvalue] : -# 1985| r1985_2(ValCat &) = Call[lvalue] : func:r1985_1 -# 1985| mu1985_3(unknown) = ^CallSideEffect : ~m? -# 1985| r1985_4(glval) = CopyValue : r1985_2 -# 1985| mu1985_5(ValCat) = Store[?] : &:r1985_4, r0_12 +# 1987| r1987_1(glval) = FunctionAddress[lvalue] : +# 1987| r1987_2(ValCat &) = Call[lvalue] : func:r1987_1 +# 1987| mu1987_3(unknown) = ^CallSideEffect : ~m? +# 1987| r1987_4(glval) = CopyValue : r1987_2 +# 1987| mu1987_5(ValCat) = Store[?] : &:r1987_4, r0_12 #-----| r0_13(glval) = VariableAddress[#temp0:0] : #-----| mu0_14(ValCat) = Uninitialized[#temp0:0] : &:r0_13 #-----| r0_15(ValCat) = Load[#temp0:0] : &:r0_13, ~m? -# 1986| r1986_1(glval) = FunctionAddress[xvalue] : -# 1986| r1986_2(ValCat &&) = Call[xvalue] : func:r1986_1 -# 1986| mu1986_3(unknown) = ^CallSideEffect : ~m? -# 1986| r1986_4(glval) = CopyValue : r1986_2 -# 1986| mu1986_5(ValCat) = Store[?] : &:r1986_4, r0_15 +# 1988| r1988_1(glval) = FunctionAddress[xvalue] : +# 1988| r1988_2(ValCat &&) = Call[xvalue] : func:r1988_1 +# 1988| mu1988_3(unknown) = ^CallSideEffect : ~m? +# 1988| r1988_4(glval) = CopyValue : r1988_2 +# 1988| mu1988_5(ValCat) = Store[?] : &:r1988_4, r0_15 #-----| r0_16(glval) = VariableAddress[#temp0:0] : #-----| mu0_17(ValCat) = Uninitialized[#temp0:0] : &:r0_16 #-----| r0_18(ValCat) = Load[#temp0:0] : &:r0_16, ~m? -# 1987| r1987_1(glval) = VariableAddress[#temp1987:5] : -# 1987| r1987_2(glval) = FunctionAddress[prvalue] : -# 1987| r1987_3(ValCat) = Call[prvalue] : func:r1987_2 -# 1987| mu1987_4(unknown) = ^CallSideEffect : ~m? -# 1987| mu1987_5(ValCat) = Store[#temp1987:5] : &:r1987_1, r1987_3 -# 1987| mu1987_6(ValCat) = Store[#temp1987:5] : &:r1987_1, r0_18 -# 1988| v1988_1(void) = NoOp : -# 1979| v1979_4(void) = ReturnVoid : -# 1979| v1979_5(void) = AliasedUse : ~m? -# 1979| v1979_6(void) = ExitFunction : +# 1989| r1989_1(glval) = VariableAddress[#temp1989:5] : +# 1989| r1989_2(glval) = FunctionAddress[prvalue] : +# 1989| r1989_3(ValCat) = Call[prvalue] : func:r1989_2 +# 1989| mu1989_4(unknown) = ^CallSideEffect : ~m? +# 1989| mu1989_5(ValCat) = Store[#temp1989:5] : &:r1989_1, r1989_3 +# 1989| mu1989_6(ValCat) = Store[#temp1989:5] : &:r1989_1, r0_18 +# 1990| v1990_1(void) = NoOp : +# 1981| v1981_4(void) = ReturnVoid : +# 1981| v1981_5(void) = AliasedUse : ~m? +# 1981| v1981_6(void) = ExitFunction : -# 1990| void SetStaticFuncPtr() -# 1990| Block 0 -# 1990| v1990_1(void) = EnterFunction : -# 1990| mu1990_2(unknown) = AliasedDefinition : -# 1990| mu1990_3(unknown) = InitializeNonLocal : -# 1991| r1991_1(glval) = VariableAddress[c] : -# 1991| mu1991_2(C) = Uninitialized[c] : &:r1991_1 -# 1991| r1991_3(glval) = FunctionAddress[C] : -# 1991| v1991_4(void) = Call[C] : func:r1991_3, this:r1991_1 -# 1991| mu1991_5(unknown) = ^CallSideEffect : ~m? -# 1991| mu1991_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1991_1 -# 1992| r1992_1(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1992| r1992_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1992| mu1992_3(..(*)(..)) = Store[pfn] : &:r1992_1, r1992_2 +# 1992| void SetStaticFuncPtr() +# 1992| Block 0 +# 1992| v1992_1(void) = EnterFunction : +# 1992| mu1992_2(unknown) = AliasedDefinition : +# 1992| mu1992_3(unknown) = InitializeNonLocal : # 1993| r1993_1(glval) = VariableAddress[c] : -# 1993| r1993_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : -# 1993| r1993_3(glval<..(*)(..)>) = VariableAddress[pfn] : -# 1993| mu1993_4(..(*)(..)) = Store[pfn] : &:r1993_3, r1993_2 -# 1994| v1994_1(void) = NoOp : -# 1990| v1990_4(void) = ReturnVoid : -# 1990| v1990_5(void) = AliasedUse : ~m? -# 1990| v1990_6(void) = ExitFunction : +# 1993| mu1993_2(C) = Uninitialized[c] : &:r1993_1 +# 1993| r1993_3(glval) = FunctionAddress[C] : +# 1993| v1993_4(void) = Call[C] : func:r1993_3, this:r1993_1 +# 1993| mu1993_5(unknown) = ^CallSideEffect : ~m? +# 1993| mu1993_6(C) = ^IndirectMayWriteSideEffect[-1] : &:r1993_1 +# 1994| r1994_1(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1994| r1994_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1994| mu1994_3(..(*)(..)) = Store[pfn] : &:r1994_1, r1994_2 +# 1995| r1995_1(glval) = VariableAddress[c] : +# 1995| r1995_2(..(*)(..)) = FunctionAddress[StaticMemberFunction] : +# 1995| r1995_3(glval<..(*)(..)>) = VariableAddress[pfn] : +# 1995| mu1995_4(..(*)(..)) = Store[pfn] : &:r1995_3, r1995_2 +# 1996| v1996_1(void) = NoOp : +# 1992| v1992_4(void) = ReturnVoid : +# 1992| v1992_5(void) = AliasedUse : ~m? +# 1992| v1992_6(void) = ExitFunction : -# 1996| void TernaryTestInt(bool, int, int, int) -# 1996| Block 0 -# 1996| v1996_1(void) = EnterFunction : -# 1996| mu1996_2(unknown) = AliasedDefinition : -# 1996| mu1996_3(unknown) = InitializeNonLocal : -# 1996| r1996_4(glval) = VariableAddress[a] : -# 1996| mu1996_5(bool) = InitializeParameter[a] : &:r1996_4 -# 1996| r1996_6(glval) = VariableAddress[x] : -# 1996| mu1996_7(int) = InitializeParameter[x] : &:r1996_6 -# 1996| r1996_8(glval) = VariableAddress[y] : -# 1996| mu1996_9(int) = InitializeParameter[y] : &:r1996_8 -# 1996| r1996_10(glval) = VariableAddress[z] : -# 1996| mu1996_11(int) = InitializeParameter[z] : &:r1996_10 -# 1997| r1997_1(glval) = VariableAddress[a] : -# 1997| r1997_2(bool) = Load[a] : &:r1997_1, ~m? -# 1997| v1997_3(void) = ConditionalBranch : r1997_2 +# 1998| void TernaryTestInt(bool, int, int, int) +# 1998| Block 0 +# 1998| v1998_1(void) = EnterFunction : +# 1998| mu1998_2(unknown) = AliasedDefinition : +# 1998| mu1998_3(unknown) = InitializeNonLocal : +# 1998| r1998_4(glval) = VariableAddress[a] : +# 1998| mu1998_5(bool) = InitializeParameter[a] : &:r1998_4 +# 1998| r1998_6(glval) = VariableAddress[x] : +# 1998| mu1998_7(int) = InitializeParameter[x] : &:r1998_6 +# 1998| r1998_8(glval) = VariableAddress[y] : +# 1998| mu1998_9(int) = InitializeParameter[y] : &:r1998_8 +# 1998| r1998_10(glval) = VariableAddress[z] : +# 1998| mu1998_11(int) = InitializeParameter[z] : &:r1998_10 +# 1999| r1999_1(glval) = VariableAddress[a] : +# 1999| r1999_2(bool) = Load[a] : &:r1999_1, ~m? +# 1999| v1999_3(void) = ConditionalBranch : r1999_2 #-----| False -> Block 3 #-----| True -> Block 2 -# 1997| Block 1 -# 1997| r1997_4(glval) = VariableAddress[#temp1997:9] : -# 1997| r1997_5(int) = Load[#temp1997:9] : &:r1997_4, ~m? -# 1997| r1997_6(glval) = VariableAddress[z] : -# 1997| mu1997_7(int) = Store[z] : &:r1997_6, r1997_5 -# 1998| r1998_1(glval) = VariableAddress[a] : -# 1998| r1998_2(bool) = Load[a] : &:r1998_1, ~m? -# 1998| v1998_3(void) = ConditionalBranch : r1998_2 -#-----| False -> Block 6 -#-----| True -> Block 5 - -# 1997| Block 2 -# 1997| r1997_8(glval) = VariableAddress[x] : -# 1997| r1997_9(int) = Load[x] : &:r1997_8, ~m? -# 1997| r1997_10(glval) = VariableAddress[#temp1997:9] : -# 1997| mu1997_11(int) = Store[#temp1997:9] : &:r1997_10, r1997_9 -#-----| Goto -> Block 1 - -# 1997| Block 3 -# 1997| r1997_12(glval) = VariableAddress[y] : -# 1997| r1997_13(int) = Load[y] : &:r1997_12, ~m? -# 1997| r1997_14(glval) = VariableAddress[#temp1997:9] : -# 1997| mu1997_15(int) = Store[#temp1997:9] : &:r1997_14, r1997_13 -#-----| Goto -> Block 1 - -# 1998| Block 4 -# 1998| r1998_4(glval) = VariableAddress[#temp1998:9] : -# 1998| r1998_5(int) = Load[#temp1998:9] : &:r1998_4, ~m? -# 1998| r1998_6(glval) = VariableAddress[z] : -# 1998| mu1998_7(int) = Store[z] : &:r1998_6, r1998_5 -# 1999| r1999_1(glval) = VariableAddress[a] : -# 1999| r1999_2(bool) = Load[a] : &:r1999_1, ~m? -# 1999| v1999_3(void) = ConditionalBranch : r1999_2 -#-----| False -> Block 9 -#-----| True -> Block 8 - -# 1998| Block 5 -# 1998| r1998_8(glval) = VariableAddress[x] : -# 1998| r1998_9(int) = Load[x] : &:r1998_8, ~m? -# 1998| r1998_10(glval) = VariableAddress[#temp1998:9] : -# 1998| mu1998_11(int) = Store[#temp1998:9] : &:r1998_10, r1998_9 -#-----| Goto -> Block 4 - -# 1998| Block 6 -# 1998| r1998_12(int) = Constant[5] : -# 1998| r1998_13(glval) = VariableAddress[#temp1998:9] : -# 1998| mu1998_14(int) = Store[#temp1998:9] : &:r1998_13, r1998_12 -#-----| Goto -> Block 4 - -# 1999| Block 7 +# 1999| Block 1 # 1999| r1999_4(glval) = VariableAddress[#temp1999:9] : # 1999| r1999_5(int) = Load[#temp1999:9] : &:r1999_4, ~m? # 1999| r1999_6(glval) = VariableAddress[z] : # 1999| mu1999_7(int) = Store[z] : &:r1999_6, r1999_5 -# 2000| r2000_1(int) = Constant[7] : -# 2000| r2000_2(glval) = VariableAddress[a] : -# 2000| r2000_3(bool) = Load[a] : &:r2000_2, ~m? -# 2000| v2000_4(void) = ConditionalBranch : r2000_3 -#-----| False -> Block 12 -#-----| True -> Block 11 - -# 1999| Block 8 -# 1999| r1999_8(int) = Constant[3] : -# 1999| r1999_9(glval) = VariableAddress[#temp1999:9] : -# 1999| mu1999_10(int) = Store[#temp1999:9] : &:r1999_9, r1999_8 -#-----| Goto -> Block 7 - -# 1999| Block 9 -# 1999| r1999_11(int) = Constant[5] : -# 1999| r1999_12(glval) = VariableAddress[#temp1999:9] : -# 1999| mu1999_13(int) = Store[#temp1999:9] : &:r1999_12, r1999_11 -#-----| Goto -> Block 7 - -# 2000| Block 10 -# 2000| r2000_5(glval) = VariableAddress[#temp2000:6] : -# 2000| r2000_6(glval) = Load[#temp2000:6] : &:r2000_5, ~m? -# 2000| mu2000_7(int) = Store[?] : &:r2000_6, r2000_1 -# 2001| v2001_1(void) = NoOp : -# 1996| v1996_12(void) = ReturnVoid : -# 1996| v1996_13(void) = AliasedUse : ~m? -# 1996| v1996_14(void) = ExitFunction : - -# 2000| Block 11 -# 2000| r2000_8(glval) = VariableAddress[x] : -# 2000| r2000_9(glval) = VariableAddress[#temp2000:6] : -# 2000| mu2000_10(glval) = Store[#temp2000:6] : &:r2000_9, r2000_8 -#-----| Goto -> Block 10 - -# 2000| Block 12 -# 2000| r2000_11(glval) = VariableAddress[y] : -# 2000| r2000_12(glval) = VariableAddress[#temp2000:6] : -# 2000| mu2000_13(glval) = Store[#temp2000:6] : &:r2000_12, r2000_11 -#-----| Goto -> Block 10 - -# 2006| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) -# 2006| Block 0 -# 2006| v2006_1(void) = EnterFunction : -# 2006| mu2006_2(unknown) = AliasedDefinition : -# 2006| mu2006_3(unknown) = InitializeNonLocal : -# 2006| r2006_4(glval) = VariableAddress[a] : -# 2006| mu2006_5(bool) = InitializeParameter[a] : &:r2006_4 -# 2006| r2006_6(glval) = VariableAddress[x] : -# 2006| mu2006_7(TernaryPodObj) = InitializeParameter[x] : &:r2006_6 -# 2006| r2006_8(glval) = VariableAddress[y] : -# 2006| mu2006_9(TernaryPodObj) = InitializeParameter[y] : &:r2006_8 -# 2006| r2006_10(glval) = VariableAddress[z] : -# 2006| mu2006_11(TernaryPodObj) = InitializeParameter[z] : &:r2006_10 -# 2007| r2007_1(glval) = VariableAddress[a] : -# 2007| r2007_2(bool) = Load[a] : &:r2007_1, ~m? -# 2007| v2007_3(void) = ConditionalBranch : r2007_2 -#-----| False -> Block 3 -#-----| True -> Block 2 - -# 2007| Block 1 -# 2007| r2007_4(glval) = VariableAddress[#temp2007:9] : -# 2007| r2007_5(TernaryPodObj) = Load[#temp2007:9] : &:r2007_4, ~m? -# 2007| r2007_6(glval) = VariableAddress[z] : -# 2007| mu2007_7(TernaryPodObj) = Store[z] : &:r2007_6, r2007_5 -# 2008| r2008_1(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_2(glval) = VariableAddress[a] : -# 2008| r2008_3(bool) = Load[a] : &:r2008_2, ~m? -# 2008| v2008_4(void) = ConditionalBranch : r2008_3 +# 2000| r2000_1(glval) = VariableAddress[a] : +# 2000| r2000_2(bool) = Load[a] : &:r2000_1, ~m? +# 2000| v2000_3(void) = ConditionalBranch : r2000_2 #-----| False -> Block 6 #-----| True -> Block 5 -# 2007| Block 2 -# 2007| r2007_8(glval) = VariableAddress[x] : -# 2007| r2007_9(TernaryPodObj) = Load[x] : &:r2007_8, ~m? -# 2007| r2007_10(glval) = VariableAddress[#temp2007:9] : -# 2007| mu2007_11(TernaryPodObj) = Store[#temp2007:9] : &:r2007_10, r2007_9 +# 1999| Block 2 +# 1999| r1999_8(glval) = VariableAddress[x] : +# 1999| r1999_9(int) = Load[x] : &:r1999_8, ~m? +# 1999| r1999_10(glval) = VariableAddress[#temp1999:9] : +# 1999| mu1999_11(int) = Store[#temp1999:9] : &:r1999_10, r1999_9 #-----| Goto -> Block 1 -# 2007| Block 3 -# 2007| r2007_12(glval) = VariableAddress[y] : -# 2007| r2007_13(TernaryPodObj) = Load[y] : &:r2007_12, ~m? -# 2007| r2007_14(glval) = VariableAddress[#temp2007:9] : -# 2007| mu2007_15(TernaryPodObj) = Store[#temp2007:9] : &:r2007_14, r2007_13 +# 1999| Block 3 +# 1999| r1999_12(glval) = VariableAddress[y] : +# 1999| r1999_13(int) = Load[y] : &:r1999_12, ~m? +# 1999| r1999_14(glval) = VariableAddress[#temp1999:9] : +# 1999| mu1999_15(int) = Store[#temp1999:9] : &:r1999_14, r1999_13 #-----| Goto -> Block 1 -# 2008| Block 4 -# 2008| r2008_5(glval) = VariableAddress[#temp2008:9] : -# 2008| r2008_6(TernaryPodObj) = Load[#temp2008:9] : &:r2008_5, ~m? -# 2008| mu2008_7(TernaryPodObj) = Store[#temp2008:9] : &:r2008_1, r2008_6 -# 2008| r2008_8(TernaryPodObj) = Load[#temp2008:9] : &:r2008_1, ~m? -# 2008| r2008_9(glval) = VariableAddress[z] : -# 2008| mu2008_10(TernaryPodObj) = Store[z] : &:r2008_9, r2008_8 -# 2009| r2009_1(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_2(glval) = VariableAddress[a] : -# 2009| r2009_3(bool) = Load[a] : &:r2009_2, ~m? -# 2009| v2009_4(void) = ConditionalBranch : r2009_3 +# 2000| Block 4 +# 2000| r2000_4(glval) = VariableAddress[#temp2000:9] : +# 2000| r2000_5(int) = Load[#temp2000:9] : &:r2000_4, ~m? +# 2000| r2000_6(glval) = VariableAddress[z] : +# 2000| mu2000_7(int) = Store[z] : &:r2000_6, r2000_5 +# 2001| r2001_1(glval) = VariableAddress[a] : +# 2001| r2001_2(bool) = Load[a] : &:r2001_1, ~m? +# 2001| v2001_3(void) = ConditionalBranch : r2001_2 #-----| False -> Block 9 #-----| True -> Block 8 -# 2008| Block 5 -# 2008| r2008_11(glval) = VariableAddress[#temp2008:13] : -# 2008| r2008_12(glval) = VariableAddress[x] : -# 2008| r2008_13(TernaryPodObj) = Load[x] : &:r2008_12, ~m? -# 2008| mu2008_14(TernaryPodObj) = Store[#temp2008:13] : &:r2008_11, r2008_13 -# 2008| r2008_15(TernaryPodObj) = Load[#temp2008:13] : &:r2008_11, ~m? -# 2008| r2008_16(glval) = VariableAddress[#temp2008:9] : -# 2008| mu2008_17(TernaryPodObj) = Store[#temp2008:9] : &:r2008_16, r2008_15 +# 2000| Block 5 +# 2000| r2000_8(glval) = VariableAddress[x] : +# 2000| r2000_9(int) = Load[x] : &:r2000_8, ~m? +# 2000| r2000_10(glval) = VariableAddress[#temp2000:9] : +# 2000| mu2000_11(int) = Store[#temp2000:9] : &:r2000_10, r2000_9 #-----| Goto -> Block 4 -# 2008| Block 6 -# 2008| r2008_18(glval) = VariableAddress[#temp2008:17] : -# 2008| r2008_19(TernaryPodObj) = Constant[0] : -# 2008| mu2008_20(TernaryPodObj) = Store[#temp2008:17] : &:r2008_18, r2008_19 -# 2008| r2008_21(TernaryPodObj) = Load[#temp2008:17] : &:r2008_18, ~m? -# 2008| r2008_22(glval) = VariableAddress[#temp2008:9] : -# 2008| mu2008_23(TernaryPodObj) = Store[#temp2008:9] : &:r2008_22, r2008_21 +# 2000| Block 6 +# 2000| r2000_12(int) = Constant[5] : +# 2000| r2000_13(glval) = VariableAddress[#temp2000:9] : +# 2000| mu2000_14(int) = Store[#temp2000:9] : &:r2000_13, r2000_12 #-----| Goto -> Block 4 -# 2009| Block 7 -# 2009| r2009_5(glval) = VariableAddress[#temp2009:9] : -# 2009| r2009_6(TernaryPodObj) = Load[#temp2009:9] : &:r2009_5, ~m? -# 2009| mu2009_7(TernaryPodObj) = Store[#temp2009:9] : &:r2009_1, r2009_6 -# 2009| r2009_8(TernaryPodObj) = Load[#temp2009:9] : &:r2009_1, ~m? -# 2009| r2009_9(glval) = VariableAddress[z] : -# 2009| mu2009_10(TernaryPodObj) = Store[z] : &:r2009_9, r2009_8 -# 2010| r2010_1(glval) = VariableAddress[#temp2010:23] : -# 2010| r2010_2(TernaryPodObj) = Constant[0] : -# 2010| mu2010_3(TernaryPodObj) = Store[#temp2010:23] : &:r2010_1, r2010_2 -# 2010| r2010_4(TernaryPodObj) = Load[#temp2010:23] : &:r2010_1, ~m? -# 2010| r2010_5(glval) = VariableAddress[a] : -# 2010| r2010_6(bool) = Load[a] : &:r2010_5, ~m? -# 2010| v2010_7(void) = ConditionalBranch : r2010_6 +# 2001| Block 7 +# 2001| r2001_4(glval) = VariableAddress[#temp2001:9] : +# 2001| r2001_5(int) = Load[#temp2001:9] : &:r2001_4, ~m? +# 2001| r2001_6(glval) = VariableAddress[z] : +# 2001| mu2001_7(int) = Store[z] : &:r2001_6, r2001_5 +# 2002| r2002_1(int) = Constant[7] : +# 2002| r2002_2(glval) = VariableAddress[a] : +# 2002| r2002_3(bool) = Load[a] : &:r2002_2, ~m? +# 2002| v2002_4(void) = ConditionalBranch : r2002_3 #-----| False -> Block 12 #-----| True -> Block 11 -# 2009| Block 8 -# 2009| r2009_11(glval) = VariableAddress[#temp2009:13] : -# 2009| r2009_12(TernaryPodObj) = Constant[0] : -# 2009| mu2009_13(TernaryPodObj) = Store[#temp2009:13] : &:r2009_11, r2009_12 -# 2009| r2009_14(TernaryPodObj) = Load[#temp2009:13] : &:r2009_11, ~m? -# 2009| r2009_15(glval) = VariableAddress[#temp2009:9] : -# 2009| mu2009_16(TernaryPodObj) = Store[#temp2009:9] : &:r2009_15, r2009_14 +# 2001| Block 8 +# 2001| r2001_8(int) = Constant[3] : +# 2001| r2001_9(glval) = VariableAddress[#temp2001:9] : +# 2001| mu2001_10(int) = Store[#temp2001:9] : &:r2001_9, r2001_8 #-----| Goto -> Block 7 -# 2009| Block 9 -# 2009| r2009_17(glval) = VariableAddress[#temp2009:31] : -# 2009| r2009_18(TernaryPodObj) = Constant[0] : -# 2009| mu2009_19(TernaryPodObj) = Store[#temp2009:31] : &:r2009_17, r2009_18 -# 2009| r2009_20(TernaryPodObj) = Load[#temp2009:31] : &:r2009_17, ~m? -# 2009| r2009_21(glval) = VariableAddress[#temp2009:9] : -# 2009| mu2009_22(TernaryPodObj) = Store[#temp2009:9] : &:r2009_21, r2009_20 +# 2001| Block 9 +# 2001| r2001_11(int) = Constant[5] : +# 2001| r2001_12(glval) = VariableAddress[#temp2001:9] : +# 2001| mu2001_13(int) = Store[#temp2001:9] : &:r2001_12, r2001_11 #-----| Goto -> Block 7 -# 2010| Block 10 -# 2010| r2010_8(glval) = VariableAddress[#temp2010:10] : -# 2010| r2010_9(TernaryPodObj) = Load[#temp2010:10] : &:r2010_8, ~m? -# 2010| r2010_10(glval) = VariableAddress[z] : -# 2010| mu2010_11(TernaryPodObj) = Store[z] : &:r2010_10, r2010_9 -# 2010| r2010_12(glval) = CopyValue : r2010_10 -# 2010| mu2010_13(TernaryPodObj) = Store[?] : &:r2010_12, r2010_4 -# 2011| v2011_1(void) = NoOp : -# 2006| v2006_12(void) = ReturnVoid : -# 2006| v2006_13(void) = AliasedUse : ~m? -# 2006| v2006_14(void) = ExitFunction : +# 2002| Block 10 +# 2002| r2002_5(glval) = VariableAddress[#temp2002:6] : +# 2002| r2002_6(glval) = Load[#temp2002:6] : &:r2002_5, ~m? +# 2002| mu2002_7(int) = Store[?] : &:r2002_6, r2002_1 +# 2003| v2003_1(void) = NoOp : +# 1998| v1998_12(void) = ReturnVoid : +# 1998| v1998_13(void) = AliasedUse : ~m? +# 1998| v1998_14(void) = ExitFunction : -# 2010| Block 11 -# 2010| r2010_14(glval) = VariableAddress[x] : -# 2010| r2010_15(TernaryPodObj) = Load[x] : &:r2010_14, ~m? -# 2010| r2010_16(glval) = VariableAddress[#temp2010:10] : -# 2010| mu2010_17(TernaryPodObj) = Store[#temp2010:10] : &:r2010_16, r2010_15 +# 2002| Block 11 +# 2002| r2002_8(glval) = VariableAddress[x] : +# 2002| r2002_9(glval) = VariableAddress[#temp2002:6] : +# 2002| mu2002_10(glval) = Store[#temp2002:6] : &:r2002_9, r2002_8 #-----| Goto -> Block 10 -# 2010| Block 12 -# 2010| r2010_18(glval) = VariableAddress[y] : -# 2010| r2010_19(TernaryPodObj) = Load[y] : &:r2010_18, ~m? -# 2010| r2010_20(glval) = VariableAddress[#temp2010:10] : -# 2010| mu2010_21(TernaryPodObj) = Store[#temp2010:10] : &:r2010_20, r2010_19 +# 2002| Block 12 +# 2002| r2002_11(glval) = VariableAddress[y] : +# 2002| r2002_12(glval) = VariableAddress[#temp2002:6] : +# 2002| mu2002_13(glval) = Store[#temp2002:6] : &:r2002_12, r2002_11 #-----| Goto -> Block 10 -# 2013| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| mu2013_2(unknown) = AliasedDefinition : -# 2013| mu2013_3(unknown) = InitializeNonLocal : -# 2013| r2013_4(glval) = VariableAddress[#this] : -# 2013| mu2013_5(glval) = InitializeParameter[#this] : &:r2013_4 -# 2013| r2013_6(glval) = Load[#this] : &:r2013_4, ~m? -# 2013| mu2013_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_6 +# 2008| void TernaryTestPodObj(bool, TernaryPodObj, TernaryPodObj, TernaryPodObj) +# 2008| Block 0 +# 2008| v2008_1(void) = EnterFunction : +# 2008| mu2008_2(unknown) = AliasedDefinition : +# 2008| mu2008_3(unknown) = InitializeNonLocal : +# 2008| r2008_4(glval) = VariableAddress[a] : +# 2008| mu2008_5(bool) = InitializeParameter[a] : &:r2008_4 +# 2008| r2008_6(glval) = VariableAddress[x] : +# 2008| mu2008_7(TernaryPodObj) = InitializeParameter[x] : &:r2008_6 +# 2008| r2008_8(glval) = VariableAddress[y] : +# 2008| mu2008_9(TernaryPodObj) = InitializeParameter[y] : &:r2008_8 +# 2008| r2008_10(glval) = VariableAddress[z] : +# 2008| mu2008_11(TernaryPodObj) = InitializeParameter[z] : &:r2008_10 +# 2009| r2009_1(glval) = VariableAddress[a] : +# 2009| r2009_2(bool) = Load[a] : &:r2009_1, ~m? +# 2009| v2009_3(void) = ConditionalBranch : r2009_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2009| Block 1 +# 2009| r2009_4(glval) = VariableAddress[#temp2009:9] : +# 2009| r2009_5(TernaryPodObj) = Load[#temp2009:9] : &:r2009_4, ~m? +# 2009| r2009_6(glval) = VariableAddress[z] : +# 2009| mu2009_7(TernaryPodObj) = Store[z] : &:r2009_6, r2009_5 +# 2010| r2010_1(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_2(glval) = VariableAddress[a] : +# 2010| r2010_3(bool) = Load[a] : &:r2010_2, ~m? +# 2010| v2010_4(void) = ConditionalBranch : r2010_3 +#-----| False -> Block 6 +#-----| True -> Block 5 + +# 2009| Block 2 +# 2009| r2009_8(glval) = VariableAddress[x] : +# 2009| r2009_9(TernaryPodObj) = Load[x] : &:r2009_8, ~m? +# 2009| r2009_10(glval) = VariableAddress[#temp2009:9] : +# 2009| mu2009_11(TernaryPodObj) = Store[#temp2009:9] : &:r2009_10, r2009_9 +#-----| Goto -> Block 1 + +# 2009| Block 3 +# 2009| r2009_12(glval) = VariableAddress[y] : +# 2009| r2009_13(TernaryPodObj) = Load[y] : &:r2009_12, ~m? +# 2009| r2009_14(glval) = VariableAddress[#temp2009:9] : +# 2009| mu2009_15(TernaryPodObj) = Store[#temp2009:9] : &:r2009_14, r2009_13 +#-----| Goto -> Block 1 + +# 2010| Block 4 +# 2010| r2010_5(glval) = VariableAddress[#temp2010:9] : +# 2010| r2010_6(TernaryPodObj) = Load[#temp2010:9] : &:r2010_5, ~m? +# 2010| mu2010_7(TernaryPodObj) = Store[#temp2010:9] : &:r2010_1, r2010_6 +# 2010| r2010_8(TernaryPodObj) = Load[#temp2010:9] : &:r2010_1, ~m? +# 2010| r2010_9(glval) = VariableAddress[z] : +# 2010| mu2010_10(TernaryPodObj) = Store[z] : &:r2010_9, r2010_8 +# 2011| r2011_1(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_2(glval) = VariableAddress[a] : +# 2011| r2011_3(bool) = Load[a] : &:r2011_2, ~m? +# 2011| v2011_4(void) = ConditionalBranch : r2011_3 +#-----| False -> Block 9 +#-----| True -> Block 8 + +# 2010| Block 5 +# 2010| r2010_11(glval) = VariableAddress[#temp2010:13] : +# 2010| r2010_12(glval) = VariableAddress[x] : +# 2010| r2010_13(TernaryPodObj) = Load[x] : &:r2010_12, ~m? +# 2010| mu2010_14(TernaryPodObj) = Store[#temp2010:13] : &:r2010_11, r2010_13 +# 2010| r2010_15(TernaryPodObj) = Load[#temp2010:13] : &:r2010_11, ~m? +# 2010| r2010_16(glval) = VariableAddress[#temp2010:9] : +# 2010| mu2010_17(TernaryPodObj) = Store[#temp2010:9] : &:r2010_16, r2010_15 +#-----| Goto -> Block 4 + +# 2010| Block 6 +# 2010| r2010_18(glval) = VariableAddress[#temp2010:17] : +# 2010| r2010_19(TernaryPodObj) = Constant[0] : +# 2010| mu2010_20(TernaryPodObj) = Store[#temp2010:17] : &:r2010_18, r2010_19 +# 2010| r2010_21(TernaryPodObj) = Load[#temp2010:17] : &:r2010_18, ~m? +# 2010| r2010_22(glval) = VariableAddress[#temp2010:9] : +# 2010| mu2010_23(TernaryPodObj) = Store[#temp2010:9] : &:r2010_22, r2010_21 +#-----| Goto -> Block 4 + +# 2011| Block 7 +# 2011| r2011_5(glval) = VariableAddress[#temp2011:9] : +# 2011| r2011_6(TernaryPodObj) = Load[#temp2011:9] : &:r2011_5, ~m? +# 2011| mu2011_7(TernaryPodObj) = Store[#temp2011:9] : &:r2011_1, r2011_6 +# 2011| r2011_8(TernaryPodObj) = Load[#temp2011:9] : &:r2011_1, ~m? +# 2011| r2011_9(glval) = VariableAddress[z] : +# 2011| mu2011_10(TernaryPodObj) = Store[z] : &:r2011_9, r2011_8 +# 2012| r2012_1(glval) = VariableAddress[#temp2012:23] : +# 2012| r2012_2(TernaryPodObj) = Constant[0] : +# 2012| mu2012_3(TernaryPodObj) = Store[#temp2012:23] : &:r2012_1, r2012_2 +# 2012| r2012_4(TernaryPodObj) = Load[#temp2012:23] : &:r2012_1, ~m? +# 2012| r2012_5(glval) = VariableAddress[a] : +# 2012| r2012_6(bool) = Load[a] : &:r2012_5, ~m? +# 2012| v2012_7(void) = ConditionalBranch : r2012_6 +#-----| False -> Block 12 +#-----| True -> Block 11 + +# 2011| Block 8 +# 2011| r2011_11(glval) = VariableAddress[#temp2011:13] : +# 2011| r2011_12(TernaryPodObj) = Constant[0] : +# 2011| mu2011_13(TernaryPodObj) = Store[#temp2011:13] : &:r2011_11, r2011_12 +# 2011| r2011_14(TernaryPodObj) = Load[#temp2011:13] : &:r2011_11, ~m? +# 2011| r2011_15(glval) = VariableAddress[#temp2011:9] : +# 2011| mu2011_16(TernaryPodObj) = Store[#temp2011:9] : &:r2011_15, r2011_14 +#-----| Goto -> Block 7 + +# 2011| Block 9 +# 2011| r2011_17(glval) = VariableAddress[#temp2011:31] : +# 2011| r2011_18(TernaryPodObj) = Constant[0] : +# 2011| mu2011_19(TernaryPodObj) = Store[#temp2011:31] : &:r2011_17, r2011_18 +# 2011| r2011_20(TernaryPodObj) = Load[#temp2011:31] : &:r2011_17, ~m? +# 2011| r2011_21(glval) = VariableAddress[#temp2011:9] : +# 2011| mu2011_22(TernaryPodObj) = Store[#temp2011:9] : &:r2011_21, r2011_20 +#-----| Goto -> Block 7 + +# 2012| Block 10 +# 2012| r2012_8(glval) = VariableAddress[#temp2012:10] : +# 2012| r2012_9(TernaryPodObj) = Load[#temp2012:10] : &:r2012_8, ~m? +# 2012| r2012_10(glval) = VariableAddress[z] : +# 2012| mu2012_11(TernaryPodObj) = Store[z] : &:r2012_10, r2012_9 +# 2012| r2012_12(glval) = CopyValue : r2012_10 +# 2012| mu2012_13(TernaryPodObj) = Store[?] : &:r2012_12, r2012_4 +# 2013| v2013_1(void) = NoOp : +# 2008| v2008_12(void) = ReturnVoid : +# 2008| v2008_13(void) = AliasedUse : ~m? +# 2008| v2008_14(void) = ExitFunction : + +# 2012| Block 11 +# 2012| r2012_14(glval) = VariableAddress[x] : +# 2012| r2012_15(TernaryPodObj) = Load[x] : &:r2012_14, ~m? +# 2012| r2012_16(glval) = VariableAddress[#temp2012:10] : +# 2012| mu2012_17(TernaryPodObj) = Store[#temp2012:10] : &:r2012_16, r2012_15 +#-----| Goto -> Block 10 + +# 2012| Block 12 +# 2012| r2012_18(glval) = VariableAddress[y] : +# 2012| r2012_19(TernaryPodObj) = Load[y] : &:r2012_18, ~m? +# 2012| r2012_20(glval) = VariableAddress[#temp2012:10] : +# 2012| mu2012_21(TernaryPodObj) = Store[#temp2012:10] : &:r2012_20, r2012_19 +#-----| Goto -> Block 10 + +# 2015| TernaryNonPodObj& TernaryNonPodObj::operator=(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| mu2015_2(unknown) = AliasedDefinition : +# 2015| mu2015_3(unknown) = InitializeNonLocal : +# 2015| r2015_4(glval) = VariableAddress[#this] : +# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 +# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? +# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? @@ -10939,713 +10939,1232 @@ ir.cpp: #-----| r0_8(glval) = CopyValue : r0_7 #-----| r0_9(TernaryNonPodObj &) = CopyValue : r0_8 #-----| mu0_10(TernaryNonPodObj &) = Store[#return] : &:r0_5, r0_9 -# 2013| v2013_8(void) = ReturnIndirection[#this] : &:r2013_6, ~m? +# 2015| v2015_8(void) = ReturnIndirection[#this] : &:r2015_6, ~m? #-----| v0_11(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2013| r2013_9(glval) = VariableAddress[#return] : -# 2013| v2013_10(void) = ReturnValue : &:r2013_9, ~m? -# 2013| v2013_11(void) = AliasedUse : ~m? -# 2013| v2013_12(void) = ExitFunction : +# 2015| r2015_9(glval) = VariableAddress[#return] : +# 2015| v2015_10(void) = ReturnValue : &:r2015_9, ~m? +# 2015| v2015_11(void) = AliasedUse : ~m? +# 2015| v2015_12(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj() -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| mu2013_2(unknown) = AliasedDefinition : -# 2013| mu2013_3(unknown) = InitializeNonLocal : -# 2013| r2013_4(glval) = VariableAddress[#this] : -# 2013| mu2013_5(glval) = InitializeParameter[#this] : &:r2013_4 -# 2013| r2013_6(glval) = Load[#this] : &:r2013_4, ~m? -# 2013| mu2013_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_6 -# 2013| v2013_8(void) = NoOp : -# 2013| v2013_9(void) = ReturnIndirection[#this] : &:r2013_6, ~m? -# 2013| v2013_10(void) = ReturnVoid : -# 2013| v2013_11(void) = AliasedUse : ~m? -# 2013| v2013_12(void) = ExitFunction : +# 2015| void TernaryNonPodObj::TernaryNonPodObj() +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| mu2015_2(unknown) = AliasedDefinition : +# 2015| mu2015_3(unknown) = InitializeNonLocal : +# 2015| r2015_4(glval) = VariableAddress[#this] : +# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 +# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? +# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 +# 2015| v2015_8(void) = NoOp : +# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_6, ~m? +# 2015| v2015_10(void) = ReturnVoid : +# 2015| v2015_11(void) = AliasedUse : ~m? +# 2015| v2015_12(void) = ExitFunction : -# 2013| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) -# 2013| Block 0 -# 2013| v2013_1(void) = EnterFunction : -# 2013| mu2013_2(unknown) = AliasedDefinition : -# 2013| mu2013_3(unknown) = InitializeNonLocal : -# 2013| r2013_4(glval) = VariableAddress[#this] : -# 2013| mu2013_5(glval) = InitializeParameter[#this] : &:r2013_4 -# 2013| r2013_6(glval) = Load[#this] : &:r2013_4, ~m? -# 2013| mu2013_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2013_6 +# 2015| void TernaryNonPodObj::TernaryNonPodObj(TernaryNonPodObj const&) +# 2015| Block 0 +# 2015| v2015_1(void) = EnterFunction : +# 2015| mu2015_2(unknown) = AliasedDefinition : +# 2015| mu2015_3(unknown) = InitializeNonLocal : +# 2015| r2015_4(glval) = VariableAddress[#this] : +# 2015| mu2015_5(glval) = InitializeParameter[#this] : &:r2015_4 +# 2015| r2015_6(glval) = Load[#this] : &:r2015_4, ~m? +# 2015| mu2015_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2015_6 #-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : #-----| mu0_2(TernaryNonPodObj &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 #-----| r0_3(TernaryNonPodObj &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? #-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 -# 2013| v2013_8(void) = NoOp : -# 2013| v2013_9(void) = ReturnIndirection[#this] : &:r2013_6, ~m? +# 2015| v2015_8(void) = NoOp : +# 2015| v2015_9(void) = ReturnIndirection[#this] : &:r2015_6, ~m? #-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? -# 2013| v2013_10(void) = ReturnVoid : -# 2013| v2013_11(void) = AliasedUse : ~m? -# 2013| v2013_12(void) = ExitFunction : +# 2015| v2015_10(void) = ReturnVoid : +# 2015| v2015_11(void) = AliasedUse : ~m? +# 2015| v2015_12(void) = ExitFunction : -# 2014| void TernaryNonPodObj::~TernaryNonPodObj() -# 2014| Block 0 -# 2014| v2014_1(void) = EnterFunction : -# 2014| mu2014_2(unknown) = AliasedDefinition : -# 2014| mu2014_3(unknown) = InitializeNonLocal : -# 2014| r2014_4(glval) = VariableAddress[#this] : -# 2014| mu2014_5(glval) = InitializeParameter[#this] : &:r2014_4 -# 2014| r2014_6(glval) = Load[#this] : &:r2014_4, ~m? -# 2014| mu2014_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2014_6 -# 2014| v2014_8(void) = NoOp : -# 2014| v2014_9(void) = ReturnIndirection[#this] : &:r2014_6, ~m? -# 2014| v2014_10(void) = ReturnVoid : -# 2014| v2014_11(void) = AliasedUse : ~m? -# 2014| v2014_12(void) = ExitFunction : +# 2016| void TernaryNonPodObj::~TernaryNonPodObj() +# 2016| Block 0 +# 2016| v2016_1(void) = EnterFunction : +# 2016| mu2016_2(unknown) = AliasedDefinition : +# 2016| mu2016_3(unknown) = InitializeNonLocal : +# 2016| r2016_4(glval) = VariableAddress[#this] : +# 2016| mu2016_5(glval) = InitializeParameter[#this] : &:r2016_4 +# 2016| r2016_6(glval) = Load[#this] : &:r2016_4, ~m? +# 2016| mu2016_7(TernaryNonPodObj) = InitializeIndirection[#this] : &:r2016_6 +# 2016| v2016_8(void) = NoOp : +# 2016| v2016_9(void) = ReturnIndirection[#this] : &:r2016_6, ~m? +# 2016| v2016_10(void) = ReturnVoid : +# 2016| v2016_11(void) = AliasedUse : ~m? +# 2016| v2016_12(void) = ExitFunction : -# 2017| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) -# 2017| Block 0 -# 2017| v2017_1(void) = EnterFunction : -# 2017| mu2017_2(unknown) = AliasedDefinition : -# 2017| mu2017_3(unknown) = InitializeNonLocal : -# 2017| r2017_4(glval) = VariableAddress[a] : -# 2017| mu2017_5(bool) = InitializeParameter[a] : &:r2017_4 -# 2017| r2017_6(glval) = VariableAddress[x] : -# 2017| mu2017_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2017_6 -# 2017| r2017_8(glval) = VariableAddress[y] : -# 2017| mu2017_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2017_8 -# 2017| r2017_10(glval) = VariableAddress[z] : -# 2017| mu2017_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2017_10 -# 2018| r2018_1(glval) = VariableAddress[z] : -# 2018| r2018_2(glval) = FunctionAddress[operator=] : -# 2018| r2018_3(glval) = VariableAddress[a] : -# 2018| r2018_4(bool) = Load[a] : &:r2018_3, ~m? -# 2018| v2018_5(void) = ConditionalBranch : r2018_4 +# 2019| void TernaryTestNonPodObj(bool, TernaryNonPodObj, TernaryNonPodObj, TernaryNonPodObj) +# 2019| Block 0 +# 2019| v2019_1(void) = EnterFunction : +# 2019| mu2019_2(unknown) = AliasedDefinition : +# 2019| mu2019_3(unknown) = InitializeNonLocal : +# 2019| r2019_4(glval) = VariableAddress[a] : +# 2019| mu2019_5(bool) = InitializeParameter[a] : &:r2019_4 +# 2019| r2019_6(glval) = VariableAddress[x] : +# 2019| mu2019_7(TernaryNonPodObj) = InitializeParameter[x] : &:r2019_6 +# 2019| r2019_8(glval) = VariableAddress[y] : +# 2019| mu2019_9(TernaryNonPodObj) = InitializeParameter[y] : &:r2019_8 +# 2019| r2019_10(glval) = VariableAddress[z] : +# 2019| mu2019_11(TernaryNonPodObj) = InitializeParameter[z] : &:r2019_10 +# 2020| r2020_1(glval) = VariableAddress[z] : +# 2020| r2020_2(glval) = FunctionAddress[operator=] : +# 2020| r2020_3(glval) = VariableAddress[a] : +# 2020| r2020_4(bool) = Load[a] : &:r2020_3, ~m? +# 2020| v2020_5(void) = ConditionalBranch : r2020_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2018| Block 1 -# 2018| r2018_6(glval) = VariableAddress[#temp2018:9] : -# 2018| r2018_7(glval) = Load[#temp2018:9] : &:r2018_6, ~m? -# 2018| r2018_8(glval) = Convert : r2018_7 -# 2018| r2018_9(TernaryNonPodObj &) = CopyValue : r2018_8 -# 2018| r2018_10(TernaryNonPodObj &) = Call[operator=] : func:r2018_2, this:r2018_1, 0:r2018_9 -# 2018| mu2018_11(unknown) = ^CallSideEffect : ~m? -# 2018| v2018_12(void) = ^IndirectReadSideEffect[-1] : &:r2018_1, ~m? -# 2018| v2018_13(void) = ^BufferReadSideEffect[0] : &:r2018_9, ~m? -# 2018| mu2018_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2018_1 -# 2018| r2018_15(glval) = CopyValue : r2018_10 -# 2019| r2019_1(glval) = VariableAddress[z] : -# 2019| r2019_2(glval) = FunctionAddress[operator=] : -# 2019| r2019_3(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_4(glval) = VariableAddress[a] : -# 2019| r2019_5(bool) = Load[a] : &:r2019_4, ~m? -# 2019| v2019_6(void) = ConditionalBranch : r2019_5 +# 2020| Block 1 +# 2020| r2020_6(glval) = VariableAddress[#temp2020:9] : +# 2020| r2020_7(glval) = Load[#temp2020:9] : &:r2020_6, ~m? +# 2020| r2020_8(glval) = Convert : r2020_7 +# 2020| r2020_9(TernaryNonPodObj &) = CopyValue : r2020_8 +# 2020| r2020_10(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_9 +# 2020| mu2020_11(unknown) = ^CallSideEffect : ~m? +# 2020| v2020_12(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, ~m? +# 2020| v2020_13(void) = ^BufferReadSideEffect[0] : &:r2020_9, ~m? +# 2020| mu2020_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 +# 2020| r2020_15(glval) = CopyValue : r2020_10 +# 2021| r2021_1(glval) = VariableAddress[z] : +# 2021| r2021_2(glval) = FunctionAddress[operator=] : +# 2021| r2021_3(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_4(glval) = VariableAddress[a] : +# 2021| r2021_5(bool) = Load[a] : &:r2021_4, ~m? +# 2021| v2021_6(void) = ConditionalBranch : r2021_5 #-----| False -> Block 6 #-----| True -> Block 5 -# 2018| Block 2 -# 2018| r2018_16(glval) = VariableAddress[x] : -# 2018| r2018_17(glval) = VariableAddress[#temp2018:9] : -# 2018| mu2018_18(glval) = Store[#temp2018:9] : &:r2018_17, r2018_16 +# 2020| Block 2 +# 2020| r2020_16(glval) = VariableAddress[x] : +# 2020| r2020_17(glval) = VariableAddress[#temp2020:9] : +# 2020| mu2020_18(glval) = Store[#temp2020:9] : &:r2020_17, r2020_16 #-----| Goto -> Block 1 -# 2018| Block 3 -# 2018| r2018_19(glval) = VariableAddress[y] : -# 2018| r2018_20(glval) = VariableAddress[#temp2018:9] : -# 2018| mu2018_21(glval) = Store[#temp2018:9] : &:r2018_20, r2018_19 +# 2020| Block 3 +# 2020| r2020_19(glval) = VariableAddress[y] : +# 2020| r2020_20(glval) = VariableAddress[#temp2020:9] : +# 2020| mu2020_21(glval) = Store[#temp2020:9] : &:r2020_20, r2020_19 #-----| Goto -> Block 1 -# 2019| Block 4 -# 2019| r2019_7(glval) = VariableAddress[#temp2019:9] : -# 2019| r2019_8(TernaryNonPodObj) = Load[#temp2019:9] : &:r2019_7, ~m? -# 2019| mu2019_9(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_3, r2019_8 -# 2019| r2019_10(glval) = Convert : r2019_3 -# 2019| r2019_11(TernaryNonPodObj &) = CopyValue : r2019_10 -# 2019| r2019_12(TernaryNonPodObj &) = Call[operator=] : func:r2019_2, this:r2019_1, 0:r2019_11 -# 2019| mu2019_13(unknown) = ^CallSideEffect : ~m? -# 2019| v2019_14(void) = ^IndirectReadSideEffect[-1] : &:r2019_1, ~m? -# 2019| v2019_15(void) = ^BufferReadSideEffect[0] : &:r2019_11, ~m? -# 2019| mu2019_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_1 -# 2019| r2019_17(glval) = CopyValue : r2019_12 -# 2020| r2020_1(glval) = VariableAddress[z] : -# 2020| r2020_2(glval) = FunctionAddress[operator=] : -# 2020| r2020_3(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_4(glval) = VariableAddress[a] : -# 2020| r2020_5(bool) = Load[a] : &:r2020_4, ~m? -# 2020| v2020_6(void) = ConditionalBranch : r2020_5 +# 2021| Block 4 +# 2021| r2021_7(glval) = VariableAddress[#temp2021:9] : +# 2021| r2021_8(TernaryNonPodObj) = Load[#temp2021:9] : &:r2021_7, ~m? +# 2021| mu2021_9(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_3, r2021_8 +# 2021| r2021_10(glval) = Convert : r2021_3 +# 2021| r2021_11(TernaryNonPodObj &) = CopyValue : r2021_10 +# 2021| r2021_12(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_11 +# 2021| mu2021_13(unknown) = ^CallSideEffect : ~m? +# 2021| v2021_14(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? +# 2021| v2021_15(void) = ^BufferReadSideEffect[0] : &:r2021_11, ~m? +# 2021| mu2021_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 +# 2021| r2021_17(glval) = CopyValue : r2021_12 +# 2022| r2022_1(glval) = VariableAddress[z] : +# 2022| r2022_2(glval) = FunctionAddress[operator=] : +# 2022| r2022_3(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_4(glval) = VariableAddress[a] : +# 2022| r2022_5(bool) = Load[a] : &:r2022_4, ~m? +# 2022| v2022_6(void) = ConditionalBranch : r2022_5 #-----| False -> Block 9 #-----| True -> Block 8 -# 2019| Block 5 -# 2019| r2019_18(glval) = VariableAddress[#temp2019:13] : -# 2019| mu2019_19(TernaryNonPodObj) = Uninitialized[#temp2019:13] : &:r2019_18 -# 2019| r2019_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| r2019_21(glval) = VariableAddress[x] : -# 2019| r2019_22(glval) = Convert : r2019_21 -# 2019| r2019_23(TernaryNonPodObj &) = CopyValue : r2019_22 -# 2019| v2019_24(void) = Call[TernaryNonPodObj] : func:r2019_20, this:r2019_18, 0:r2019_23 -# 2019| mu2019_25(unknown) = ^CallSideEffect : ~m? -# 2019| v2019_26(void) = ^BufferReadSideEffect[0] : &:r2019_23, ~m? -# 2019| mu2019_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_18 -# 2019| r2019_28(TernaryNonPodObj) = Load[#temp2019:13] : &:r2019_18, ~m? -# 2019| r2019_29(glval) = VariableAddress[#temp2019:9] : -# 2019| mu2019_30(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_29, r2019_28 +# 2021| Block 5 +# 2021| r2021_18(glval) = VariableAddress[#temp2021:13] : +# 2021| mu2021_19(TernaryNonPodObj) = Uninitialized[#temp2021:13] : &:r2021_18 +# 2021| r2021_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| r2021_21(glval) = VariableAddress[x] : +# 2021| r2021_22(glval) = Convert : r2021_21 +# 2021| r2021_23(TernaryNonPodObj &) = CopyValue : r2021_22 +# 2021| v2021_24(void) = Call[TernaryNonPodObj] : func:r2021_20, this:r2021_18, 0:r2021_23 +# 2021| mu2021_25(unknown) = ^CallSideEffect : ~m? +# 2021| v2021_26(void) = ^BufferReadSideEffect[0] : &:r2021_23, ~m? +# 2021| mu2021_27(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_18 +# 2021| r2021_28(TernaryNonPodObj) = Load[#temp2021:13] : &:r2021_18, ~m? +# 2021| r2021_29(glval) = VariableAddress[#temp2021:9] : +# 2021| mu2021_30(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_29, r2021_28 #-----| Goto -> Block 4 -# 2019| Block 6 -# 2019| r2019_31(glval) = VariableAddress[#temp2019:17] : -# 2019| mu2019_32(TernaryNonPodObj) = Uninitialized[#temp2019:17] : &:r2019_31 -# 2019| r2019_33(glval) = FunctionAddress[TernaryNonPodObj] : -# 2019| v2019_34(void) = Call[TernaryNonPodObj] : func:r2019_33, this:r2019_31 -# 2019| mu2019_35(unknown) = ^CallSideEffect : ~m? -# 2019| mu2019_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2019_31 -# 2019| r2019_37(TernaryNonPodObj) = Load[#temp2019:17] : &:r2019_31, ~m? -# 2019| r2019_38(glval) = VariableAddress[#temp2019:9] : -# 2019| mu2019_39(TernaryNonPodObj) = Store[#temp2019:9] : &:r2019_38, r2019_37 +# 2021| Block 6 +# 2021| r2021_31(glval) = VariableAddress[#temp2021:17] : +# 2021| mu2021_32(TernaryNonPodObj) = Uninitialized[#temp2021:17] : &:r2021_31 +# 2021| r2021_33(glval) = FunctionAddress[TernaryNonPodObj] : +# 2021| v2021_34(void) = Call[TernaryNonPodObj] : func:r2021_33, this:r2021_31 +# 2021| mu2021_35(unknown) = ^CallSideEffect : ~m? +# 2021| mu2021_36(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_31 +# 2021| r2021_37(TernaryNonPodObj) = Load[#temp2021:17] : &:r2021_31, ~m? +# 2021| r2021_38(glval) = VariableAddress[#temp2021:9] : +# 2021| mu2021_39(TernaryNonPodObj) = Store[#temp2021:9] : &:r2021_38, r2021_37 #-----| Goto -> Block 4 -# 2020| Block 7 -# 2020| r2020_7(glval) = VariableAddress[#temp2020:9] : -# 2020| r2020_8(TernaryNonPodObj) = Load[#temp2020:9] : &:r2020_7, ~m? -# 2020| mu2020_9(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_3, r2020_8 -# 2020| r2020_10(glval) = Convert : r2020_3 -# 2020| r2020_11(TernaryNonPodObj &) = CopyValue : r2020_10 -# 2020| r2020_12(TernaryNonPodObj &) = Call[operator=] : func:r2020_2, this:r2020_1, 0:r2020_11 -# 2020| mu2020_13(unknown) = ^CallSideEffect : ~m? -# 2020| v2020_14(void) = ^IndirectReadSideEffect[-1] : &:r2020_1, ~m? -# 2020| v2020_15(void) = ^BufferReadSideEffect[0] : &:r2020_11, ~m? -# 2020| mu2020_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_1 -# 2020| r2020_17(glval) = CopyValue : r2020_12 -# 2021| r2021_1(glval) = VariableAddress[z] : -# 2021| r2021_2(glval) = FunctionAddress[operator=] : -# 2021| r2021_3(glval) = VariableAddress[a] : -# 2021| r2021_4(bool) = Load[a] : &:r2021_3, ~m? -# 2021| v2021_5(void) = ConditionalBranch : r2021_4 +# 2022| Block 7 +# 2022| r2022_7(glval) = VariableAddress[#temp2022:9] : +# 2022| r2022_8(TernaryNonPodObj) = Load[#temp2022:9] : &:r2022_7, ~m? +# 2022| mu2022_9(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_3, r2022_8 +# 2022| r2022_10(glval) = Convert : r2022_3 +# 2022| r2022_11(TernaryNonPodObj &) = CopyValue : r2022_10 +# 2022| r2022_12(TernaryNonPodObj &) = Call[operator=] : func:r2022_2, this:r2022_1, 0:r2022_11 +# 2022| mu2022_13(unknown) = ^CallSideEffect : ~m? +# 2022| v2022_14(void) = ^IndirectReadSideEffect[-1] : &:r2022_1, ~m? +# 2022| v2022_15(void) = ^BufferReadSideEffect[0] : &:r2022_11, ~m? +# 2022| mu2022_16(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_1 +# 2022| r2022_17(glval) = CopyValue : r2022_12 +# 2023| r2023_1(glval) = VariableAddress[z] : +# 2023| r2023_2(glval) = FunctionAddress[operator=] : +# 2023| r2023_3(glval) = VariableAddress[a] : +# 2023| r2023_4(bool) = Load[a] : &:r2023_3, ~m? +# 2023| v2023_5(void) = ConditionalBranch : r2023_4 #-----| False -> Block 12 #-----| True -> Block 11 -# 2020| Block 8 -# 2020| r2020_18(glval) = VariableAddress[#temp2020:13] : -# 2020| mu2020_19(TernaryNonPodObj) = Uninitialized[#temp2020:13] : &:r2020_18 -# 2020| r2020_20(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_21(void) = Call[TernaryNonPodObj] : func:r2020_20, this:r2020_18 -# 2020| mu2020_22(unknown) = ^CallSideEffect : ~m? -# 2020| mu2020_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_18 -# 2020| r2020_24(TernaryNonPodObj) = Load[#temp2020:13] : &:r2020_18, ~m? -# 2020| r2020_25(glval) = VariableAddress[#temp2020:9] : -# 2020| mu2020_26(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_25, r2020_24 +# 2022| Block 8 +# 2022| r2022_18(glval) = VariableAddress[#temp2022:13] : +# 2022| mu2022_19(TernaryNonPodObj) = Uninitialized[#temp2022:13] : &:r2022_18 +# 2022| r2022_20(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_21(void) = Call[TernaryNonPodObj] : func:r2022_20, this:r2022_18 +# 2022| mu2022_22(unknown) = ^CallSideEffect : ~m? +# 2022| mu2022_23(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_18 +# 2022| r2022_24(TernaryNonPodObj) = Load[#temp2022:13] : &:r2022_18, ~m? +# 2022| r2022_25(glval) = VariableAddress[#temp2022:9] : +# 2022| mu2022_26(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_25, r2022_24 #-----| Goto -> Block 7 -# 2020| Block 9 -# 2020| r2020_27(glval) = VariableAddress[#temp2020:34] : -# 2020| mu2020_28(TernaryNonPodObj) = Uninitialized[#temp2020:34] : &:r2020_27 -# 2020| r2020_29(glval) = FunctionAddress[TernaryNonPodObj] : -# 2020| v2020_30(void) = Call[TernaryNonPodObj] : func:r2020_29, this:r2020_27 -# 2020| mu2020_31(unknown) = ^CallSideEffect : ~m? -# 2020| mu2020_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2020_27 -# 2020| r2020_33(TernaryNonPodObj) = Load[#temp2020:34] : &:r2020_27, ~m? -# 2020| r2020_34(glval) = VariableAddress[#temp2020:9] : -# 2020| mu2020_35(TernaryNonPodObj) = Store[#temp2020:9] : &:r2020_34, r2020_33 +# 2022| Block 9 +# 2022| r2022_27(glval) = VariableAddress[#temp2022:34] : +# 2022| mu2022_28(TernaryNonPodObj) = Uninitialized[#temp2022:34] : &:r2022_27 +# 2022| r2022_29(glval) = FunctionAddress[TernaryNonPodObj] : +# 2022| v2022_30(void) = Call[TernaryNonPodObj] : func:r2022_29, this:r2022_27 +# 2022| mu2022_31(unknown) = ^CallSideEffect : ~m? +# 2022| mu2022_32(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2022_27 +# 2022| r2022_33(TernaryNonPodObj) = Load[#temp2022:34] : &:r2022_27, ~m? +# 2022| r2022_34(glval) = VariableAddress[#temp2022:9] : +# 2022| mu2022_35(TernaryNonPodObj) = Store[#temp2022:9] : &:r2022_34, r2022_33 #-----| Goto -> Block 7 -# 2021| Block 10 -# 2021| r2021_6(glval) = VariableAddress[#temp2021:10] : -# 2021| r2021_7(glval) = Load[#temp2021:10] : &:r2021_6, ~m? -# 2021| r2021_8(glval) = Convert : r2021_7 -# 2021| r2021_9(TernaryNonPodObj &) = CopyValue : r2021_8 -# 2021| r2021_10(TernaryNonPodObj &) = Call[operator=] : func:r2021_2, this:r2021_1, 0:r2021_9 -# 2021| mu2021_11(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_12(void) = ^IndirectReadSideEffect[-1] : &:r2021_1, ~m? -# 2021| v2021_13(void) = ^BufferReadSideEffect[0] : &:r2021_9, ~m? -# 2021| mu2021_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_1 -# 2021| r2021_15(glval) = CopyValue : r2021_10 -# 2021| r2021_16(glval) = FunctionAddress[operator=] : -# 2021| r2021_17(glval) = VariableAddress[#temp2021:23] : -# 2021| mu2021_18(TernaryNonPodObj) = Uninitialized[#temp2021:23] : &:r2021_17 -# 2021| r2021_19(glval) = FunctionAddress[TernaryNonPodObj] : -# 2021| v2021_20(void) = Call[TernaryNonPodObj] : func:r2021_19, this:r2021_17 -# 2021| mu2021_21(unknown) = ^CallSideEffect : ~m? -# 2021| mu2021_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_17 -# 2021| r2021_23(glval) = Convert : r2021_17 -# 2021| r2021_24(TernaryNonPodObj &) = CopyValue : r2021_23 -# 2021| r2021_25(TernaryNonPodObj &) = Call[operator=] : func:r2021_16, this:r2021_15, 0:r2021_24 -# 2021| mu2021_26(unknown) = ^CallSideEffect : ~m? -# 2021| v2021_27(void) = ^IndirectReadSideEffect[-1] : &:r2021_15, ~m? -# 2021| v2021_28(void) = ^BufferReadSideEffect[0] : &:r2021_24, ~m? -# 2021| mu2021_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2021_15 -# 2021| r2021_30(glval) = CopyValue : r2021_25 -# 2022| v2022_1(void) = NoOp : -# 2017| v2017_12(void) = ReturnVoid : -# 2017| v2017_13(void) = AliasedUse : ~m? -# 2017| v2017_14(void) = ExitFunction : +# 2023| Block 10 +# 2023| r2023_6(glval) = VariableAddress[#temp2023:10] : +# 2023| r2023_7(glval) = Load[#temp2023:10] : &:r2023_6, ~m? +# 2023| r2023_8(glval) = Convert : r2023_7 +# 2023| r2023_9(TernaryNonPodObj &) = CopyValue : r2023_8 +# 2023| r2023_10(TernaryNonPodObj &) = Call[operator=] : func:r2023_2, this:r2023_1, 0:r2023_9 +# 2023| mu2023_11(unknown) = ^CallSideEffect : ~m? +# 2023| v2023_12(void) = ^IndirectReadSideEffect[-1] : &:r2023_1, ~m? +# 2023| v2023_13(void) = ^BufferReadSideEffect[0] : &:r2023_9, ~m? +# 2023| mu2023_14(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_1 +# 2023| r2023_15(glval) = CopyValue : r2023_10 +# 2023| r2023_16(glval) = FunctionAddress[operator=] : +# 2023| r2023_17(glval) = VariableAddress[#temp2023:23] : +# 2023| mu2023_18(TernaryNonPodObj) = Uninitialized[#temp2023:23] : &:r2023_17 +# 2023| r2023_19(glval) = FunctionAddress[TernaryNonPodObj] : +# 2023| v2023_20(void) = Call[TernaryNonPodObj] : func:r2023_19, this:r2023_17 +# 2023| mu2023_21(unknown) = ^CallSideEffect : ~m? +# 2023| mu2023_22(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_17 +# 2023| r2023_23(glval) = Convert : r2023_17 +# 2023| r2023_24(TernaryNonPodObj &) = CopyValue : r2023_23 +# 2023| r2023_25(TernaryNonPodObj &) = Call[operator=] : func:r2023_16, this:r2023_15, 0:r2023_24 +# 2023| mu2023_26(unknown) = ^CallSideEffect : ~m? +# 2023| v2023_27(void) = ^IndirectReadSideEffect[-1] : &:r2023_15, ~m? +# 2023| v2023_28(void) = ^BufferReadSideEffect[0] : &:r2023_24, ~m? +# 2023| mu2023_29(TernaryNonPodObj) = ^IndirectMayWriteSideEffect[-1] : &:r2023_15 +# 2023| r2023_30(glval) = CopyValue : r2023_25 +# 2024| v2024_1(void) = NoOp : +# 2019| v2019_12(void) = ReturnVoid : +# 2019| v2019_13(void) = AliasedUse : ~m? +# 2019| v2019_14(void) = ExitFunction : -# 2021| Block 11 -# 2021| r2021_31(glval) = VariableAddress[x] : -# 2021| r2021_32(glval) = VariableAddress[#temp2021:10] : -# 2021| mu2021_33(glval) = Store[#temp2021:10] : &:r2021_32, r2021_31 +# 2023| Block 11 +# 2023| r2023_31(glval) = VariableAddress[x] : +# 2023| r2023_32(glval) = VariableAddress[#temp2023:10] : +# 2023| mu2023_33(glval) = Store[#temp2023:10] : &:r2023_32, r2023_31 #-----| Goto -> Block 10 -# 2021| Block 12 -# 2021| r2021_34(glval) = VariableAddress[y] : -# 2021| r2021_35(glval) = VariableAddress[#temp2021:10] : -# 2021| mu2021_36(glval) = Store[#temp2021:10] : &:r2021_35, r2021_34 +# 2023| Block 12 +# 2023| r2023_34(glval) = VariableAddress[y] : +# 2023| r2023_35(glval) = VariableAddress[#temp2023:10] : +# 2023| mu2023_36(glval) = Store[#temp2023:10] : &:r2023_35, r2023_34 #-----| Goto -> Block 10 -# 2026| unsigned int CommaTest(unsigned int) -# 2026| Block 0 -# 2026| v2026_1(void) = EnterFunction : -# 2026| mu2026_2(unknown) = AliasedDefinition : -# 2026| mu2026_3(unknown) = InitializeNonLocal : -# 2026| r2026_4(glval) = VariableAddress[x] : -# 2026| mu2026_5(unsigned int) = InitializeParameter[x] : &:r2026_4 -# 2027| r2027_1(glval) = VariableAddress[y] : -# 2027| mu2027_2(unsigned int) = Uninitialized[y] : &:r2027_1 -# 2028| r2028_1(glval) = VariableAddress[x] : -# 2028| r2028_2(unsigned int) = Load[x] : &:r2028_1, ~m? -# 2028| r2028_3(unsigned int) = Constant[100] : -# 2028| r2028_4(bool) = CompareLT : r2028_2, r2028_3 -# 2028| v2028_5(void) = ConditionalBranch : r2028_4 +# 2028| unsigned int CommaTest(unsigned int) +# 2028| Block 0 +# 2028| v2028_1(void) = EnterFunction : +# 2028| mu2028_2(unknown) = AliasedDefinition : +# 2028| mu2028_3(unknown) = InitializeNonLocal : +# 2028| r2028_4(glval) = VariableAddress[x] : +# 2028| mu2028_5(unsigned int) = InitializeParameter[x] : &:r2028_4 +# 2029| r2029_1(glval) = VariableAddress[y] : +# 2029| mu2029_2(unsigned int) = Uninitialized[y] : &:r2029_1 +# 2030| r2030_1(glval) = VariableAddress[x] : +# 2030| r2030_2(unsigned int) = Load[x] : &:r2030_1, ~m? +# 2030| r2030_3(unsigned int) = Constant[100] : +# 2030| r2030_4(bool) = CompareLT : r2030_2, r2030_3 +# 2030| v2030_5(void) = ConditionalBranch : r2030_4 #-----| False -> Block 3 #-----| True -> Block 2 -# 2028| Block 1 -# 2028| r2028_6(glval) = VariableAddress[#temp2028:7] : -# 2028| r2028_7(unsigned int) = Load[#temp2028:7] : &:r2028_6, ~m? -# 2028| r2028_8(glval) = VariableAddress[y] : -# 2028| mu2028_9(unsigned int) = Store[y] : &:r2028_8, r2028_7 -# 2031| r2031_1(glval) = VariableAddress[#return] : -# 2031| mu2031_2(unsigned int) = Uninitialized[#return] : &:r2031_1 -# 2026| r2026_6(glval) = VariableAddress[#return] : -# 2026| v2026_7(void) = ReturnValue : &:r2026_6, ~m? -# 2026| v2026_8(void) = AliasedUse : ~m? -# 2026| v2026_9(void) = ExitFunction : +# 2030| Block 1 +# 2030| r2030_6(glval) = VariableAddress[#temp2030:7] : +# 2030| r2030_7(unsigned int) = Load[#temp2030:7] : &:r2030_6, ~m? +# 2030| r2030_8(glval) = VariableAddress[y] : +# 2030| mu2030_9(unsigned int) = Store[y] : &:r2030_8, r2030_7 +# 2033| r2033_1(glval) = VariableAddress[#return] : +# 2033| mu2033_2(unsigned int) = Uninitialized[#return] : &:r2033_1 +# 2028| r2028_6(glval) = VariableAddress[#return] : +# 2028| v2028_7(void) = ReturnValue : &:r2028_6, ~m? +# 2028| v2028_8(void) = AliasedUse : ~m? +# 2028| v2028_9(void) = ExitFunction : -# 2029| Block 2 -# 2029| r2029_1(glval) = FunctionAddress[CommaTestHelper] : -# 2029| r2029_2(glval) = VariableAddress[x] : -# 2029| r2029_3(unsigned int) = Load[x] : &:r2029_2, ~m? -# 2029| v2029_4(void) = Call[CommaTestHelper] : func:r2029_1, 0:r2029_3 -# 2029| mu2029_5(unknown) = ^CallSideEffect : ~m? -# 2029| r2029_6(glval) = VariableAddress[x] : -# 2029| r2029_7(unsigned int) = Load[x] : &:r2029_6, ~m? -# 2029| r2029_8(unsigned int) = CopyValue : r2029_7 -# 2028| r2028_10(glval) = VariableAddress[#temp2028:7] : -# 2028| mu2028_11(unsigned int) = Store[#temp2028:7] : &:r2028_10, r2029_8 +# 2031| Block 2 +# 2031| r2031_1(glval) = FunctionAddress[CommaTestHelper] : +# 2031| r2031_2(glval) = VariableAddress[x] : +# 2031| r2031_3(unsigned int) = Load[x] : &:r2031_2, ~m? +# 2031| v2031_4(void) = Call[CommaTestHelper] : func:r2031_1, 0:r2031_3 +# 2031| mu2031_5(unknown) = ^CallSideEffect : ~m? +# 2031| r2031_6(glval) = VariableAddress[x] : +# 2031| r2031_7(unsigned int) = Load[x] : &:r2031_6, ~m? +# 2031| r2031_8(unsigned int) = CopyValue : r2031_7 +# 2030| r2030_10(glval) = VariableAddress[#temp2030:7] : +# 2030| mu2030_11(unsigned int) = Store[#temp2030:7] : &:r2030_10, r2031_8 #-----| Goto -> Block 1 -# 2030| Block 3 -# 2030| r2030_1(glval) = FunctionAddress[CommaTestHelper] : -# 2030| r2030_2(glval) = VariableAddress[x] : -# 2030| r2030_3(unsigned int) = Load[x] : &:r2030_2, ~m? -# 2030| v2030_4(void) = Call[CommaTestHelper] : func:r2030_1, 0:r2030_3 -# 2030| mu2030_5(unknown) = ^CallSideEffect : ~m? -# 2030| r2030_6(int) = Constant[10] : -# 2030| r2030_7(int) = CopyValue : r2030_6 -# 2030| r2030_8(unsigned int) = Convert : r2030_7 -# 2028| r2028_12(glval) = VariableAddress[#temp2028:7] : -# 2028| mu2028_13(unsigned int) = Store[#temp2028:7] : &:r2028_12, r2030_8 +# 2032| Block 3 +# 2032| r2032_1(glval) = FunctionAddress[CommaTestHelper] : +# 2032| r2032_2(glval) = VariableAddress[x] : +# 2032| r2032_3(unsigned int) = Load[x] : &:r2032_2, ~m? +# 2032| v2032_4(void) = Call[CommaTestHelper] : func:r2032_1, 0:r2032_3 +# 2032| mu2032_5(unknown) = ^CallSideEffect : ~m? +# 2032| r2032_6(int) = Constant[10] : +# 2032| r2032_7(int) = CopyValue : r2032_6 +# 2032| r2032_8(unsigned int) = Convert : r2032_7 +# 2030| r2030_12(glval) = VariableAddress[#temp2030:7] : +# 2030| mu2030_13(unsigned int) = Store[#temp2030:7] : &:r2030_12, r2032_8 #-----| Goto -> Block 1 -# 2033| void NewDeleteMem() -# 2033| Block 0 -# 2033| v2033_1(void) = EnterFunction : -# 2033| mu2033_2(unknown) = AliasedDefinition : -# 2033| mu2033_3(unknown) = InitializeNonLocal : -# 2034| r2034_1(glval) = VariableAddress[x] : -# 2034| r2034_2(glval) = FunctionAddress[operator new] : -# 2034| r2034_3(unsigned long) = Constant[4] : -# 2034| r2034_4(void *) = Call[operator new] : func:r2034_2, 0:r2034_3 -# 2034| mu2034_5(unknown) = ^CallSideEffect : ~m? -# 2034| mu2034_6(unknown) = ^InitializeDynamicAllocation : &:r2034_4 -# 2034| r2034_7(int *) = Convert : r2034_4 -# 2034| mu2034_8(int *) = Store[x] : &:r2034_1, r2034_7 -# 2035| r2035_1(int) = Constant[6] : -# 2035| r2035_2(glval) = VariableAddress[x] : -# 2035| r2035_3(int *) = Load[x] : &:r2035_2, ~m? -# 2035| r2035_4(glval) = CopyValue : r2035_3 -# 2035| mu2035_5(int) = Store[?] : &:r2035_4, r2035_1 -# 2036| r2036_1(glval) = FunctionAddress[operator delete] : -# 2036| r2036_2(glval) = VariableAddress[x] : -# 2036| r2036_3(int *) = Load[x] : &:r2036_2, ~m? -# 2036| v2036_4(void) = Call[operator delete] : func:r2036_1, 0:r2036_3 +# 2035| void NewDeleteMem() +# 2035| Block 0 +# 2035| v2035_1(void) = EnterFunction : +# 2035| mu2035_2(unknown) = AliasedDefinition : +# 2035| mu2035_3(unknown) = InitializeNonLocal : +# 2036| r2036_1(glval) = VariableAddress[x] : +# 2036| r2036_2(glval) = FunctionAddress[operator new] : +# 2036| r2036_3(unsigned long) = Constant[4] : +# 2036| r2036_4(void *) = Call[operator new] : func:r2036_2, 0:r2036_3 # 2036| mu2036_5(unknown) = ^CallSideEffect : ~m? -# 2037| v2037_1(void) = NoOp : -# 2033| v2033_4(void) = ReturnVoid : -# 2033| v2033_5(void) = AliasedUse : ~m? -# 2033| v2033_6(void) = ExitFunction : +# 2036| mu2036_6(unknown) = ^InitializeDynamicAllocation : &:r2036_4 +# 2036| r2036_7(int *) = Convert : r2036_4 +# 2036| mu2036_8(int *) = Store[x] : &:r2036_1, r2036_7 +# 2037| r2037_1(int) = Constant[6] : +# 2037| r2037_2(glval) = VariableAddress[x] : +# 2037| r2037_3(int *) = Load[x] : &:r2037_2, ~m? +# 2037| r2037_4(glval) = CopyValue : r2037_3 +# 2037| mu2037_5(int) = Store[?] : &:r2037_4, r2037_1 +# 2038| r2038_1(glval) = FunctionAddress[operator delete] : +# 2038| r2038_2(glval) = VariableAddress[x] : +# 2038| r2038_3(int *) = Load[x] : &:r2038_2, ~m? +# 2038| v2038_4(void) = Call[operator delete] : func:r2038_1, 0:r2038_3 +# 2038| mu2038_5(unknown) = ^CallSideEffect : ~m? +# 2039| v2039_1(void) = NoOp : +# 2035| v2035_4(void) = ReturnVoid : +# 2035| v2035_5(void) = AliasedUse : ~m? +# 2035| v2035_6(void) = ExitFunction : -# 2039| void Base2::Base2() -# 2039| Block 0 -# 2039| v2039_1(void) = EnterFunction : -# 2039| mu2039_2(unknown) = AliasedDefinition : -# 2039| mu2039_3(unknown) = InitializeNonLocal : -# 2039| r2039_4(glval) = VariableAddress[#this] : -# 2039| mu2039_5(glval) = InitializeParameter[#this] : &:r2039_4 -# 2039| r2039_6(glval) = Load[#this] : &:r2039_4, ~m? -# 2039| mu2039_7(Base2) = InitializeIndirection[#this] : &:r2039_6 -# 2039| v2039_8(void) = NoOp : -# 2039| v2039_9(void) = ReturnIndirection[#this] : &:r2039_6, ~m? -# 2039| v2039_10(void) = ReturnVoid : -# 2039| v2039_11(void) = AliasedUse : ~m? -# 2039| v2039_12(void) = ExitFunction : - -# 2041| void Base2::operator delete(void*) +# 2041| void Base2::Base2() # 2041| Block 0 -# 2041| v2041_1(void) = EnterFunction : -# 2041| mu2041_2(unknown) = AliasedDefinition : -# 2041| mu2041_3(unknown) = InitializeNonLocal : -# 2041| r2041_4(glval) = VariableAddress[p] : -# 2041| mu2041_5(void *) = InitializeParameter[p] : &:r2041_4 -# 2041| r2041_6(void *) = Load[p] : &:r2041_4, ~m? -# 2041| mu2041_7(unknown) = InitializeIndirection[p] : &:r2041_6 -# 2042| v2042_1(void) = NoOp : -# 2041| v2041_8(void) = ReturnIndirection[p] : &:r2041_6, ~m? -# 2041| v2041_9(void) = ReturnVoid : -# 2041| v2041_10(void) = AliasedUse : ~m? -# 2041| v2041_11(void) = ExitFunction : +# 2041| v2041_1(void) = EnterFunction : +# 2041| mu2041_2(unknown) = AliasedDefinition : +# 2041| mu2041_3(unknown) = InitializeNonLocal : +# 2041| r2041_4(glval) = VariableAddress[#this] : +# 2041| mu2041_5(glval) = InitializeParameter[#this] : &:r2041_4 +# 2041| r2041_6(glval) = Load[#this] : &:r2041_4, ~m? +# 2041| mu2041_7(Base2) = InitializeIndirection[#this] : &:r2041_6 +# 2041| v2041_8(void) = NoOp : +# 2041| v2041_9(void) = ReturnIndirection[#this] : &:r2041_6, ~m? +# 2041| v2041_10(void) = ReturnVoid : +# 2041| v2041_11(void) = AliasedUse : ~m? +# 2041| v2041_12(void) = ExitFunction : -# 2043| void Base2::~Base2() +# 2043| void Base2::operator delete(void*) # 2043| Block 0 -# 2043| v2043_1(void) = EnterFunction : -# 2043| mu2043_2(unknown) = AliasedDefinition : -# 2043| mu2043_3(unknown) = InitializeNonLocal : -# 2043| r2043_4(glval) = VariableAddress[#this] : -# 2043| mu2043_5(glval) = InitializeParameter[#this] : &:r2043_4 -# 2043| r2043_6(glval) = Load[#this] : &:r2043_4, ~m? -# 2043| mu2043_7(Base2) = InitializeIndirection[#this] : &:r2043_6 -# 2043| v2043_8(void) = NoOp : -# 2043| v2043_9(void) = ReturnIndirection[#this] : &:r2043_6, ~m? -# 2043| v2043_10(void) = ReturnVoid : -# 2043| v2043_11(void) = AliasedUse : ~m? -# 2043| v2043_12(void) = ExitFunction : +# 2043| v2043_1(void) = EnterFunction : +# 2043| mu2043_2(unknown) = AliasedDefinition : +# 2043| mu2043_3(unknown) = InitializeNonLocal : +# 2043| r2043_4(glval) = VariableAddress[p] : +# 2043| mu2043_5(void *) = InitializeParameter[p] : &:r2043_4 +# 2043| r2043_6(void *) = Load[p] : &:r2043_4, ~m? +# 2043| mu2043_7(unknown) = InitializeIndirection[p] : &:r2043_6 +# 2044| v2044_1(void) = NoOp : +# 2043| v2043_8(void) = ReturnIndirection[p] : &:r2043_6, ~m? +# 2043| v2043_9(void) = ReturnVoid : +# 2043| v2043_10(void) = AliasedUse : ~m? +# 2043| v2043_11(void) = ExitFunction : -# 2046| void Derived2::Derived2() -# 2046| Block 0 -# 2046| v2046_1(void) = EnterFunction : -# 2046| mu2046_2(unknown) = AliasedDefinition : -# 2046| mu2046_3(unknown) = InitializeNonLocal : -# 2046| r2046_4(glval) = VariableAddress[#this] : -# 2046| mu2046_5(glval) = InitializeParameter[#this] : &:r2046_4 -# 2046| r2046_6(glval) = Load[#this] : &:r2046_4, ~m? -# 2046| mu2046_7(Derived2) = InitializeIndirection[#this] : &:r2046_6 -# 2046| r2046_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2046_5 -# 2046| r2046_9(glval) = FunctionAddress[Base2] : -# 2046| v2046_10(void) = Call[Base2] : func:r2046_9, this:r2046_8 -# 2046| mu2046_11(unknown) = ^CallSideEffect : ~m? -# 2046| mu2046_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2046_8 -# 2046| v2046_13(void) = NoOp : -# 2046| v2046_14(void) = ReturnIndirection[#this] : &:r2046_6, ~m? -# 2046| v2046_15(void) = ReturnVoid : -# 2046| v2046_16(void) = AliasedUse : ~m? -# 2046| v2046_17(void) = ExitFunction : +# 2045| void Base2::~Base2() +# 2045| Block 0 +# 2045| v2045_1(void) = EnterFunction : +# 2045| mu2045_2(unknown) = AliasedDefinition : +# 2045| mu2045_3(unknown) = InitializeNonLocal : +# 2045| r2045_4(glval) = VariableAddress[#this] : +# 2045| mu2045_5(glval) = InitializeParameter[#this] : &:r2045_4 +# 2045| r2045_6(glval) = Load[#this] : &:r2045_4, ~m? +# 2045| mu2045_7(Base2) = InitializeIndirection[#this] : &:r2045_6 +# 2045| v2045_8(void) = NoOp : +# 2045| v2045_9(void) = ReturnIndirection[#this] : &:r2045_6, ~m? +# 2045| v2045_10(void) = ReturnVoid : +# 2045| v2045_11(void) = AliasedUse : ~m? +# 2045| v2045_12(void) = ExitFunction : -# 2049| void Derived2::~Derived2() -# 2049| Block 0 -# 2049| v2049_1(void) = EnterFunction : -# 2049| mu2049_2(unknown) = AliasedDefinition : -# 2049| mu2049_3(unknown) = InitializeNonLocal : -# 2049| r2049_4(glval) = VariableAddress[#this] : -# 2049| mu2049_5(glval) = InitializeParameter[#this] : &:r2049_4 -# 2049| r2049_6(glval) = Load[#this] : &:r2049_4, ~m? -# 2049| mu2049_7(Derived2) = InitializeIndirection[#this] : &:r2049_6 -# 2049| v2049_8(void) = NoOp : -# 2049| r2049_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2049_5 -# 2049| r2049_10(glval) = FunctionAddress[~Base2] : -# 2049| v2049_11(void) = Call[~Base2] : func:r2049_10, this:r2049_9 -# 2049| mu2049_12(unknown) = ^CallSideEffect : ~m? -# 2049| v2049_13(void) = ReturnIndirection[#this] : &:r2049_6, ~m? -# 2049| v2049_14(void) = ReturnVoid : -# 2049| v2049_15(void) = AliasedUse : ~m? -# 2049| v2049_16(void) = ExitFunction : +# 2048| void Derived2::Derived2() +# 2048| Block 0 +# 2048| v2048_1(void) = EnterFunction : +# 2048| mu2048_2(unknown) = AliasedDefinition : +# 2048| mu2048_3(unknown) = InitializeNonLocal : +# 2048| r2048_4(glval) = VariableAddress[#this] : +# 2048| mu2048_5(glval) = InitializeParameter[#this] : &:r2048_4 +# 2048| r2048_6(glval) = Load[#this] : &:r2048_4, ~m? +# 2048| mu2048_7(Derived2) = InitializeIndirection[#this] : &:r2048_6 +# 2048| r2048_8(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2048_5 +# 2048| r2048_9(glval) = FunctionAddress[Base2] : +# 2048| v2048_10(void) = Call[Base2] : func:r2048_9, this:r2048_8 +# 2048| mu2048_11(unknown) = ^CallSideEffect : ~m? +# 2048| mu2048_12(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2048_8 +# 2048| v2048_13(void) = NoOp : +# 2048| v2048_14(void) = ReturnIndirection[#this] : &:r2048_6, ~m? +# 2048| v2048_15(void) = ReturnVoid : +# 2048| v2048_16(void) = AliasedUse : ~m? +# 2048| v2048_17(void) = ExitFunction : -# 2051| void Derived2::operator delete(void*) +# 2051| void Derived2::~Derived2() # 2051| Block 0 -# 2051| v2051_1(void) = EnterFunction : -# 2051| mu2051_2(unknown) = AliasedDefinition : -# 2051| mu2051_3(unknown) = InitializeNonLocal : -# 2051| r2051_4(glval) = VariableAddress[p] : -# 2051| mu2051_5(void *) = InitializeParameter[p] : &:r2051_4 -# 2051| r2051_6(void *) = Load[p] : &:r2051_4, ~m? -# 2051| mu2051_7(unknown) = InitializeIndirection[p] : &:r2051_6 -# 2052| v2052_1(void) = NoOp : -# 2051| v2051_8(void) = ReturnIndirection[p] : &:r2051_6, ~m? -# 2051| v2051_9(void) = ReturnVoid : -# 2051| v2051_10(void) = AliasedUse : ~m? -# 2051| v2051_11(void) = ExitFunction : +# 2051| v2051_1(void) = EnterFunction : +# 2051| mu2051_2(unknown) = AliasedDefinition : +# 2051| mu2051_3(unknown) = InitializeNonLocal : +# 2051| r2051_4(glval) = VariableAddress[#this] : +# 2051| mu2051_5(glval) = InitializeParameter[#this] : &:r2051_4 +# 2051| r2051_6(glval) = Load[#this] : &:r2051_4, ~m? +# 2051| mu2051_7(Derived2) = InitializeIndirection[#this] : &:r2051_6 +# 2051| v2051_8(void) = NoOp : +# 2051| r2051_9(glval) = ConvertToNonVirtualBase[Derived2 : Base2] : mu2051_5 +# 2051| r2051_10(glval) = FunctionAddress[~Base2] : +# 2051| v2051_11(void) = Call[~Base2] : func:r2051_10, this:r2051_9 +# 2051| mu2051_12(unknown) = ^CallSideEffect : ~m? +# 2051| v2051_13(void) = ReturnIndirection[#this] : &:r2051_6, ~m? +# 2051| v2051_14(void) = ReturnVoid : +# 2051| v2051_15(void) = AliasedUse : ~m? +# 2051| v2051_16(void) = ExitFunction : -# 2056| int virtual_delete() -# 2056| Block 0 -# 2056| v2056_1(void) = EnterFunction : -# 2056| mu2056_2(unknown) = AliasedDefinition : -# 2056| mu2056_3(unknown) = InitializeNonLocal : -# 2058| r2058_1(glval) = VariableAddress[b1] : -# 2058| r2058_2(glval) = FunctionAddress[operator new] : -# 2058| r2058_3(unsigned long) = Constant[8] : -# 2058| r2058_4(void *) = Call[operator new] : func:r2058_2, 0:r2058_3 -# 2058| mu2058_5(unknown) = ^CallSideEffect : ~m? -# 2058| mu2058_6(unknown) = ^InitializeDynamicAllocation : &:r2058_4 -# 2058| r2058_7(Base2 *) = Convert : r2058_4 -# 2058| r2058_8(glval) = FunctionAddress[Base2] : -# 2058| v2058_9(void) = Call[Base2] : func:r2058_8, this:r2058_7 -# 2058| mu2058_10(unknown) = ^CallSideEffect : ~m? -# 2058| mu2058_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2058_7 -# 2058| mu2058_12(Base2 *) = Store[b1] : &:r2058_1, r2058_7 -# 2059| r2059_1(glval) = VirtualDeleteFunctionAddress : -# 2059| r2059_2(glval) = VariableAddress[b1] : -# 2059| r2059_3(Base2 *) = Load[b1] : &:r2059_2, ~m? -# 2059| v2059_4(void) = Call[?] : func:r2059_1, 0:r2059_3 -# 2059| mu2059_5(unknown) = ^CallSideEffect : ~m? -# 2061| r2061_1(glval) = VariableAddress[b2] : -# 2061| r2061_2(glval) = FunctionAddress[operator new] : -# 2061| r2061_3(unsigned long) = Constant[16] : -# 2061| r2061_4(void *) = Call[operator new] : func:r2061_2, 0:r2061_3 +# 2053| void Derived2::operator delete(void*) +# 2053| Block 0 +# 2053| v2053_1(void) = EnterFunction : +# 2053| mu2053_2(unknown) = AliasedDefinition : +# 2053| mu2053_3(unknown) = InitializeNonLocal : +# 2053| r2053_4(glval) = VariableAddress[p] : +# 2053| mu2053_5(void *) = InitializeParameter[p] : &:r2053_4 +# 2053| r2053_6(void *) = Load[p] : &:r2053_4, ~m? +# 2053| mu2053_7(unknown) = InitializeIndirection[p] : &:r2053_6 +# 2054| v2054_1(void) = NoOp : +# 2053| v2053_8(void) = ReturnIndirection[p] : &:r2053_6, ~m? +# 2053| v2053_9(void) = ReturnVoid : +# 2053| v2053_10(void) = AliasedUse : ~m? +# 2053| v2053_11(void) = ExitFunction : + +# 2058| int virtual_delete() +# 2058| Block 0 +# 2058| v2058_1(void) = EnterFunction : +# 2058| mu2058_2(unknown) = AliasedDefinition : +# 2058| mu2058_3(unknown) = InitializeNonLocal : +# 2060| r2060_1(glval) = VariableAddress[b1] : +# 2060| r2060_2(glval) = FunctionAddress[operator new] : +# 2060| r2060_3(unsigned long) = Constant[8] : +# 2060| r2060_4(void *) = Call[operator new] : func:r2060_2, 0:r2060_3 +# 2060| mu2060_5(unknown) = ^CallSideEffect : ~m? +# 2060| mu2060_6(unknown) = ^InitializeDynamicAllocation : &:r2060_4 +# 2060| r2060_7(Base2 *) = Convert : r2060_4 +# 2060| r2060_8(glval) = FunctionAddress[Base2] : +# 2060| v2060_9(void) = Call[Base2] : func:r2060_8, this:r2060_7 +# 2060| mu2060_10(unknown) = ^CallSideEffect : ~m? +# 2060| mu2060_11(Base2) = ^IndirectMayWriteSideEffect[-1] : &:r2060_7 +# 2060| mu2060_12(Base2 *) = Store[b1] : &:r2060_1, r2060_7 +# 2061| r2061_1(glval) = VirtualDeleteFunctionAddress : +# 2061| r2061_2(glval) = VariableAddress[b1] : +# 2061| r2061_3(Base2 *) = Load[b1] : &:r2061_2, ~m? +# 2061| v2061_4(void) = Call[?] : func:r2061_1, 0:r2061_3 # 2061| mu2061_5(unknown) = ^CallSideEffect : ~m? -# 2061| mu2061_6(unknown) = ^InitializeDynamicAllocation : &:r2061_4 -# 2061| r2061_7(Derived2 *) = Convert : r2061_4 -# 2061| r2061_8(glval) = FunctionAddress[Derived2] : -# 2061| v2061_9(void) = Call[Derived2] : func:r2061_8, this:r2061_7 -# 2061| mu2061_10(unknown) = ^CallSideEffect : ~m? -# 2061| mu2061_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2061_7 -# 2061| r2061_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2061_7 -# 2061| mu2061_13(Base2 *) = Store[b2] : &:r2061_1, r2061_12 -# 2062| r2062_1(glval) = VirtualDeleteFunctionAddress : -# 2062| r2062_2(glval) = VariableAddress[b2] : -# 2062| r2062_3(Base2 *) = Load[b2] : &:r2062_2, ~m? -# 2062| v2062_4(void) = Call[?] : func:r2062_1, 0:r2062_3 -# 2062| mu2062_5(unknown) = ^CallSideEffect : ~m? -# 2064| r2064_1(glval) = VariableAddress[d] : -# 2064| r2064_2(glval) = FunctionAddress[operator new] : -# 2064| r2064_3(unsigned long) = Constant[16] : -# 2064| r2064_4(void *) = Call[operator new] : func:r2064_2, 0:r2064_3 +# 2063| r2063_1(glval) = VariableAddress[b2] : +# 2063| r2063_2(glval) = FunctionAddress[operator new] : +# 2063| r2063_3(unsigned long) = Constant[16] : +# 2063| r2063_4(void *) = Call[operator new] : func:r2063_2, 0:r2063_3 +# 2063| mu2063_5(unknown) = ^CallSideEffect : ~m? +# 2063| mu2063_6(unknown) = ^InitializeDynamicAllocation : &:r2063_4 +# 2063| r2063_7(Derived2 *) = Convert : r2063_4 +# 2063| r2063_8(glval) = FunctionAddress[Derived2] : +# 2063| v2063_9(void) = Call[Derived2] : func:r2063_8, this:r2063_7 +# 2063| mu2063_10(unknown) = ^CallSideEffect : ~m? +# 2063| mu2063_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2063_7 +# 2063| r2063_12(Base2 *) = ConvertToNonVirtualBase[Derived2 : Base2] : r2063_7 +# 2063| mu2063_13(Base2 *) = Store[b2] : &:r2063_1, r2063_12 +# 2064| r2064_1(glval) = VirtualDeleteFunctionAddress : +# 2064| r2064_2(glval) = VariableAddress[b2] : +# 2064| r2064_3(Base2 *) = Load[b2] : &:r2064_2, ~m? +# 2064| v2064_4(void) = Call[?] : func:r2064_1, 0:r2064_3 # 2064| mu2064_5(unknown) = ^CallSideEffect : ~m? -# 2064| mu2064_6(unknown) = ^InitializeDynamicAllocation : &:r2064_4 -# 2064| r2064_7(Derived2 *) = Convert : r2064_4 -# 2064| r2064_8(glval) = FunctionAddress[Derived2] : -# 2064| v2064_9(void) = Call[Derived2] : func:r2064_8, this:r2064_7 -# 2064| mu2064_10(unknown) = ^CallSideEffect : ~m? -# 2064| mu2064_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2064_7 -# 2064| mu2064_12(Derived2 *) = Store[d] : &:r2064_1, r2064_7 -# 2065| r2065_1(glval) = VirtualDeleteFunctionAddress : -# 2065| r2065_2(glval) = VariableAddress[d] : -# 2065| r2065_3(Derived2 *) = Load[d] : &:r2065_2, ~m? -# 2065| v2065_4(void) = Call[?] : func:r2065_1, 0:r2065_3 -# 2065| mu2065_5(unknown) = ^CallSideEffect : ~m? -# 2066| r2066_1(glval) = VariableAddress[#return] : -# 2066| mu2066_2(int) = Uninitialized[#return] : &:r2066_1 -# 2056| r2056_4(glval) = VariableAddress[#return] : -# 2056| v2056_5(void) = ReturnValue : &:r2056_4, ~m? -# 2056| v2056_6(void) = AliasedUse : ~m? -# 2056| v2056_7(void) = ExitFunction : +# 2066| r2066_1(glval) = VariableAddress[d] : +# 2066| r2066_2(glval) = FunctionAddress[operator new] : +# 2066| r2066_3(unsigned long) = Constant[16] : +# 2066| r2066_4(void *) = Call[operator new] : func:r2066_2, 0:r2066_3 +# 2066| mu2066_5(unknown) = ^CallSideEffect : ~m? +# 2066| mu2066_6(unknown) = ^InitializeDynamicAllocation : &:r2066_4 +# 2066| r2066_7(Derived2 *) = Convert : r2066_4 +# 2066| r2066_8(glval) = FunctionAddress[Derived2] : +# 2066| v2066_9(void) = Call[Derived2] : func:r2066_8, this:r2066_7 +# 2066| mu2066_10(unknown) = ^CallSideEffect : ~m? +# 2066| mu2066_11(Derived2) = ^IndirectMayWriteSideEffect[-1] : &:r2066_7 +# 2066| mu2066_12(Derived2 *) = Store[d] : &:r2066_1, r2066_7 +# 2067| r2067_1(glval) = VirtualDeleteFunctionAddress : +# 2067| r2067_2(glval) = VariableAddress[d] : +# 2067| r2067_3(Derived2 *) = Load[d] : &:r2067_2, ~m? +# 2067| v2067_4(void) = Call[?] : func:r2067_1, 0:r2067_3 +# 2067| mu2067_5(unknown) = ^CallSideEffect : ~m? +# 2068| r2068_1(glval) = VariableAddress[#return] : +# 2068| mu2068_2(int) = Uninitialized[#return] : &:r2068_1 +# 2058| r2058_4(glval) = VariableAddress[#return] : +# 2058| v2058_5(void) = ReturnValue : &:r2058_4, ~m? +# 2058| v2058_6(void) = AliasedUse : ~m? +# 2058| v2058_7(void) = ExitFunction : -# 2070| void test_constant_folding() -# 2070| Block 0 -# 2070| v2070_1(void) = EnterFunction : -# 2070| mu2070_2(unknown) = AliasedDefinition : -# 2070| mu2070_3(unknown) = InitializeNonLocal : -# 2071| r2071_1(glval) = VariableAddress[x] : -# 2071| r2071_2(int) = Constant[116] : -# 2071| mu2071_3(int) = Store[x] : &:r2071_1, r2071_2 -# 2072| r2072_1(glval) = FunctionAddress[test_constant_folding_use] : -# 2072| r2072_2(int) = Constant[116] : -# 2072| v2072_3(void) = Call[test_constant_folding_use] : func:r2072_1, 0:r2072_2 -# 2072| mu2072_4(unknown) = ^CallSideEffect : ~m? -# 2073| v2073_1(void) = NoOp : -# 2070| v2070_4(void) = ReturnVoid : -# 2070| v2070_5(void) = AliasedUse : ~m? -# 2070| v2070_6(void) = ExitFunction : +# 2072| void test_constant_folding() +# 2072| Block 0 +# 2072| v2072_1(void) = EnterFunction : +# 2072| mu2072_2(unknown) = AliasedDefinition : +# 2072| mu2072_3(unknown) = InitializeNonLocal : +# 2073| r2073_1(glval) = VariableAddress[x] : +# 2073| r2073_2(int) = Constant[116] : +# 2073| mu2073_3(int) = Store[x] : &:r2073_1, r2073_2 +# 2074| r2074_1(glval) = FunctionAddress[test_constant_folding_use] : +# 2074| r2074_2(int) = Constant[116] : +# 2074| v2074_3(void) = Call[test_constant_folding_use] : func:r2074_1, 0:r2074_2 +# 2074| mu2074_4(unknown) = ^CallSideEffect : ~m? +# 2075| v2075_1(void) = NoOp : +# 2072| v2072_4(void) = ReturnVoid : +# 2072| v2072_5(void) = AliasedUse : ~m? +# 2072| v2072_6(void) = ExitFunction : -# 2077| int NonExit() -# 2077| Block 0 -# 2077| v2077_1(void) = EnterFunction : -# 2077| mu2077_2(unknown) = AliasedDefinition : -# 2077| mu2077_3(unknown) = InitializeNonLocal : -# 2078| r2078_1(glval) = VariableAddress[x] : -# 2078| r2078_2(glval) = FunctionAddress[Add] : -# 2078| r2078_3(int) = Constant[3] : -# 2078| r2078_4(int) = Constant[4] : -# 2078| r2078_5(int) = Call[Add] : func:r2078_2, 0:r2078_3, 1:r2078_4 -# 2078| mu2078_6(unknown) = ^CallSideEffect : ~m? -# 2078| mu2078_7(int) = Store[x] : &:r2078_1, r2078_5 -# 2079| r2079_1(glval) = VariableAddress[x] : -# 2079| r2079_2(int) = Load[x] : &:r2079_1, ~m? -# 2079| r2079_3(int) = Constant[7] : -# 2079| r2079_4(bool) = CompareEQ : r2079_2, r2079_3 -# 2079| v2079_5(void) = ConditionalBranch : r2079_4 +# 2079| int NonExit() +# 2079| Block 0 +# 2079| v2079_1(void) = EnterFunction : +# 2079| mu2079_2(unknown) = AliasedDefinition : +# 2079| mu2079_3(unknown) = InitializeNonLocal : +# 2080| r2080_1(glval) = VariableAddress[x] : +# 2080| r2080_2(glval) = FunctionAddress[Add] : +# 2080| r2080_3(int) = Constant[3] : +# 2080| r2080_4(int) = Constant[4] : +# 2080| r2080_5(int) = Call[Add] : func:r2080_2, 0:r2080_3, 1:r2080_4 +# 2080| mu2080_6(unknown) = ^CallSideEffect : ~m? +# 2080| mu2080_7(int) = Store[x] : &:r2080_1, r2080_5 +# 2081| r2081_1(glval) = VariableAddress[x] : +# 2081| r2081_2(int) = Load[x] : &:r2081_1, ~m? +# 2081| r2081_3(int) = Constant[7] : +# 2081| r2081_4(bool) = CompareEQ : r2081_2, r2081_3 +# 2081| v2081_5(void) = ConditionalBranch : r2081_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2080| Block 1 -# 2080| r2080_1(glval) = FunctionAddress[exit] : -# 2080| r2080_2(int) = Constant[3] : -# 2080| v2080_3(void) = Call[exit] : func:r2080_1, 0:r2080_2 -# 2080| mu2080_4(unknown) = ^CallSideEffect : ~m? -# 2077| v2077_4(void) = Unreached : +# 2082| Block 1 +# 2082| r2082_1(glval) = FunctionAddress[exit] : +# 2082| r2082_2(int) = Constant[3] : +# 2082| v2082_3(void) = Call[exit] : func:r2082_1, 0:r2082_2 +# 2082| mu2082_4(unknown) = ^CallSideEffect : ~m? +# 2079| v2079_4(void) = Unreached : -# 2081| Block 2 -# 2081| r2081_1(glval) = FunctionAddress[VoidFunc] : -# 2081| v2081_2(void) = Call[VoidFunc] : func:r2081_1 -# 2081| mu2081_3(unknown) = ^CallSideEffect : ~m? -# 2082| r2082_1(glval) = VariableAddress[#return] : -# 2082| r2082_2(glval) = VariableAddress[x] : -# 2082| r2082_3(int) = Load[x] : &:r2082_2, ~m? -# 2082| mu2082_4(int) = Store[#return] : &:r2082_1, r2082_3 -# 2077| r2077_5(glval) = VariableAddress[#return] : -# 2077| v2077_6(void) = ReturnValue : &:r2077_5, ~m? -# 2077| v2077_7(void) = AliasedUse : ~m? -# 2077| v2077_8(void) = ExitFunction : +# 2083| Block 2 +# 2083| r2083_1(glval) = FunctionAddress[VoidFunc] : +# 2083| v2083_2(void) = Call[VoidFunc] : func:r2083_1 +# 2083| mu2083_3(unknown) = ^CallSideEffect : ~m? +# 2084| r2084_1(glval) = VariableAddress[#return] : +# 2084| r2084_2(glval) = VariableAddress[x] : +# 2084| r2084_3(int) = Load[x] : &:r2084_2, ~m? +# 2084| mu2084_4(int) = Store[#return] : &:r2084_1, r2084_3 +# 2079| r2079_5(glval) = VariableAddress[#return] : +# 2079| v2079_6(void) = ReturnValue : &:r2079_5, ~m? +# 2079| v2079_7(void) = AliasedUse : ~m? +# 2079| v2079_8(void) = ExitFunction : -# 2085| void CallsNonExit() -# 2085| Block 0 -# 2085| v2085_1(void) = EnterFunction : -# 2085| mu2085_2(unknown) = AliasedDefinition : -# 2085| mu2085_3(unknown) = InitializeNonLocal : -# 2086| r2086_1(glval) = FunctionAddress[VoidFunc] : -# 2086| v2086_2(void) = Call[VoidFunc] : func:r2086_1 -# 2086| mu2086_3(unknown) = ^CallSideEffect : ~m? -# 2087| r2087_1(glval) = FunctionAddress[exit] : -# 2087| r2087_2(int) = Constant[3] : -# 2087| v2087_3(void) = Call[exit] : func:r2087_1, 0:r2087_2 -# 2087| mu2087_4(unknown) = ^CallSideEffect : ~m? -# 2085| v2085_4(void) = Unreached : +# 2087| void CallsNonExit() +# 2087| Block 0 +# 2087| v2087_1(void) = EnterFunction : +# 2087| mu2087_2(unknown) = AliasedDefinition : +# 2087| mu2087_3(unknown) = InitializeNonLocal : +# 2088| r2088_1(glval) = FunctionAddress[VoidFunc] : +# 2088| v2088_2(void) = Call[VoidFunc] : func:r2088_1 +# 2088| mu2088_3(unknown) = ^CallSideEffect : ~m? +# 2089| r2089_1(glval) = FunctionAddress[exit] : +# 2089| r2089_2(int) = Constant[3] : +# 2089| v2089_3(void) = Call[exit] : func:r2089_1, 0:r2089_2 +# 2089| mu2089_4(unknown) = ^CallSideEffect : ~m? +# 2087| v2087_4(void) = Unreached : -# 2088| Block 1 -# 2088| v2088_1(void) = NoOp : -# 2085| v2085_5(void) = ReturnVoid : -# 2085| v2085_6(void) = AliasedUse : ~m? -# 2085| v2085_7(void) = ExitFunction : +# 2090| Block 1 +# 2090| v2090_1(void) = NoOp : +# 2087| v2087_5(void) = ReturnVoid : +# 2087| v2087_6(void) = AliasedUse : ~m? +# 2087| v2087_7(void) = ExitFunction : -# 2090| int TransNonExit() -# 2090| Block 0 -# 2090| v2090_1(void) = EnterFunction : -# 2090| mu2090_2(unknown) = AliasedDefinition : -# 2090| mu2090_3(unknown) = InitializeNonLocal : -# 2091| r2091_1(glval) = VariableAddress[x] : -# 2091| r2091_2(glval) = FunctionAddress[Add] : -# 2091| r2091_3(int) = Constant[3] : -# 2091| r2091_4(int) = Constant[4] : -# 2091| r2091_5(int) = Call[Add] : func:r2091_2, 0:r2091_3, 1:r2091_4 -# 2091| mu2091_6(unknown) = ^CallSideEffect : ~m? -# 2091| mu2091_7(int) = Store[x] : &:r2091_1, r2091_5 -# 2092| r2092_1(glval) = VariableAddress[x] : -# 2092| r2092_2(int) = Load[x] : &:r2092_1, ~m? -# 2092| r2092_3(int) = Constant[7] : -# 2092| r2092_4(bool) = CompareEQ : r2092_2, r2092_3 -# 2092| v2092_5(void) = ConditionalBranch : r2092_4 +# 2092| int TransNonExit() +# 2092| Block 0 +# 2092| v2092_1(void) = EnterFunction : +# 2092| mu2092_2(unknown) = AliasedDefinition : +# 2092| mu2092_3(unknown) = InitializeNonLocal : +# 2093| r2093_1(glval) = VariableAddress[x] : +# 2093| r2093_2(glval) = FunctionAddress[Add] : +# 2093| r2093_3(int) = Constant[3] : +# 2093| r2093_4(int) = Constant[4] : +# 2093| r2093_5(int) = Call[Add] : func:r2093_2, 0:r2093_3, 1:r2093_4 +# 2093| mu2093_6(unknown) = ^CallSideEffect : ~m? +# 2093| mu2093_7(int) = Store[x] : &:r2093_1, r2093_5 +# 2094| r2094_1(glval) = VariableAddress[x] : +# 2094| r2094_2(int) = Load[x] : &:r2094_1, ~m? +# 2094| r2094_3(int) = Constant[7] : +# 2094| r2094_4(bool) = CompareEQ : r2094_2, r2094_3 +# 2094| v2094_5(void) = ConditionalBranch : r2094_4 #-----| False -> Block 2 #-----| True -> Block 1 -# 2093| Block 1 -# 2093| r2093_1(glval) = FunctionAddress[CallsNonExit] : -# 2093| v2093_2(void) = Call[CallsNonExit] : func:r2093_1 -# 2093| mu2093_3(unknown) = ^CallSideEffect : ~m? +# 2095| Block 1 +# 2095| r2095_1(glval) = FunctionAddress[CallsNonExit] : +# 2095| v2095_2(void) = Call[CallsNonExit] : func:r2095_1 +# 2095| mu2095_3(unknown) = ^CallSideEffect : ~m? #-----| Goto -> Block 2 -# 2094| Block 2 -# 2094| r2094_1(glval) = FunctionAddress[VoidFunc] : -# 2094| v2094_2(void) = Call[VoidFunc] : func:r2094_1 -# 2094| mu2094_3(unknown) = ^CallSideEffect : ~m? -# 2095| r2095_1(glval) = VariableAddress[#return] : -# 2095| r2095_2(glval) = VariableAddress[x] : -# 2095| r2095_3(int) = Load[x] : &:r2095_2, ~m? -# 2095| mu2095_4(int) = Store[#return] : &:r2095_1, r2095_3 -# 2090| r2090_4(glval) = VariableAddress[#return] : -# 2090| v2090_5(void) = ReturnValue : &:r2090_4, ~m? -# 2090| v2090_6(void) = AliasedUse : ~m? -# 2090| v2090_7(void) = ExitFunction : +# 2096| Block 2 +# 2096| r2096_1(glval) = FunctionAddress[VoidFunc] : +# 2096| v2096_2(void) = Call[VoidFunc] : func:r2096_1 +# 2096| mu2096_3(unknown) = ^CallSideEffect : ~m? +# 2097| r2097_1(glval) = VariableAddress[#return] : +# 2097| r2097_2(glval) = VariableAddress[x] : +# 2097| r2097_3(int) = Load[x] : &:r2097_2, ~m? +# 2097| mu2097_4(int) = Store[#return] : &:r2097_1, r2097_3 +# 2092| r2092_4(glval) = VariableAddress[#return] : +# 2092| v2092_5(void) = ReturnValue : &:r2092_4, ~m? +# 2092| v2092_6(void) = AliasedUse : ~m? +# 2092| v2092_7(void) = ExitFunction : -# 2098| void newArrayCorrectType(size_t) -# 2098| Block 0 -# 2098| v2098_1(void) = EnterFunction : -# 2098| mu2098_2(unknown) = AliasedDefinition : -# 2098| mu2098_3(unknown) = InitializeNonLocal : -# 2098| r2098_4(glval) = VariableAddress[n] : -# 2098| mu2098_5(unsigned long) = InitializeParameter[n] : &:r2098_4 -# 2099| r2099_1(glval) = FunctionAddress[operator new[]] : -# 2099| r2099_2(glval) = VariableAddress[n] : -# 2099| r2099_3(unsigned long) = Load[n] : &:r2099_2, ~m? -# 2099| r2099_4(unsigned long) = Constant[4] : -# 2099| r2099_5(unsigned long) = Mul : r2099_3, r2099_4 -# 2099| r2099_6(void *) = Call[operator new[]] : func:r2099_1, 0:r2099_5 -# 2099| mu2099_7(unknown) = ^CallSideEffect : ~m? -# 2099| mu2099_8(unknown) = ^InitializeDynamicAllocation : &:r2099_6 -# 2099| r2099_9(int *) = Convert : r2099_6 -# 2100| r2100_1(glval) = FunctionAddress[operator new[]] : -# 2100| r2100_2(glval) = VariableAddress[n] : -# 2100| r2100_3(unsigned long) = Load[n] : &:r2100_2, ~m? -# 2100| r2100_4(unsigned long) = Constant[4] : -# 2100| r2100_5(unsigned long) = Mul : r2100_3, r2100_4 -# 2100| r2100_6(float) = Constant[1.0] : -# 2100| r2100_7(void *) = Call[operator new[]] : func:r2100_1, 0:r2100_5, 1:r2100_6 -# 2100| mu2100_8(unknown) = ^CallSideEffect : ~m? -# 2100| mu2100_9(unknown) = ^InitializeDynamicAllocation : &:r2100_7 -# 2100| r2100_10(int *) = Convert : r2100_7 +# 2100| void newArrayCorrectType(size_t) +# 2100| Block 0 +# 2100| v2100_1(void) = EnterFunction : +# 2100| mu2100_2(unknown) = AliasedDefinition : +# 2100| mu2100_3(unknown) = InitializeNonLocal : +# 2100| r2100_4(glval) = VariableAddress[n] : +# 2100| mu2100_5(unsigned long) = InitializeParameter[n] : &:r2100_4 # 2101| r2101_1(glval) = FunctionAddress[operator new[]] : # 2101| r2101_2(glval) = VariableAddress[n] : # 2101| r2101_3(unsigned long) = Load[n] : &:r2101_2, ~m? -# 2101| r2101_4(unsigned long) = Constant[8] : +# 2101| r2101_4(unsigned long) = Constant[4] : # 2101| r2101_5(unsigned long) = Mul : r2101_3, r2101_4 # 2101| r2101_6(void *) = Call[operator new[]] : func:r2101_1, 0:r2101_5 # 2101| mu2101_7(unknown) = ^CallSideEffect : ~m? # 2101| mu2101_8(unknown) = ^InitializeDynamicAllocation : &:r2101_6 -# 2101| r2101_9(String *) = Convert : r2101_6 +# 2101| r2101_9(int *) = Convert : r2101_6 # 2102| r2102_1(glval) = FunctionAddress[operator new[]] : # 2102| r2102_2(glval) = VariableAddress[n] : # 2102| r2102_3(unsigned long) = Load[n] : &:r2102_2, ~m? -# 2102| r2102_4(unsigned long) = Constant[256] : +# 2102| r2102_4(unsigned long) = Constant[4] : # 2102| r2102_5(unsigned long) = Mul : r2102_3, r2102_4 -# 2102| r2102_6(align_val_t) = Constant[128] : +# 2102| r2102_6(float) = Constant[1.0] : # 2102| r2102_7(void *) = Call[operator new[]] : func:r2102_1, 0:r2102_5, 1:r2102_6 # 2102| mu2102_8(unknown) = ^CallSideEffect : ~m? # 2102| mu2102_9(unknown) = ^InitializeDynamicAllocation : &:r2102_7 -# 2102| r2102_10(Overaligned *) = Convert : r2102_7 +# 2102| r2102_10(int *) = Convert : r2102_7 # 2103| r2103_1(glval) = FunctionAddress[operator new[]] : # 2103| r2103_2(glval) = VariableAddress[n] : # 2103| r2103_3(unsigned long) = Load[n] : &:r2103_2, ~m? -# 2103| r2103_4(unsigned long) = Constant[1] : +# 2103| r2103_4(unsigned long) = Constant[8] : # 2103| r2103_5(unsigned long) = Mul : r2103_3, r2103_4 # 2103| r2103_6(void *) = Call[operator new[]] : func:r2103_1, 0:r2103_5 # 2103| mu2103_7(unknown) = ^CallSideEffect : ~m? # 2103| mu2103_8(unknown) = ^InitializeDynamicAllocation : &:r2103_6 -# 2103| r2103_9(DefaultCtorWithDefaultParam *) = Convert : r2103_6 +# 2103| r2103_9(String *) = Convert : r2103_6 # 2104| r2104_1(glval) = FunctionAddress[operator new[]] : # 2104| r2104_2(glval) = VariableAddress[n] : # 2104| r2104_3(unsigned long) = Load[n] : &:r2104_2, ~m? -# 2104| r2104_4(unsigned long) = Constant[4] : +# 2104| r2104_4(unsigned long) = Constant[256] : # 2104| r2104_5(unsigned long) = Mul : r2104_3, r2104_4 -# 2104| r2104_6(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5 -# 2104| mu2104_7(unknown) = ^CallSideEffect : ~m? -# 2104| mu2104_8(unknown) = ^InitializeDynamicAllocation : &:r2104_6 -# 2104| r2104_9(int *) = Convert : r2104_6 -# 2105| v2105_1(void) = NoOp : -# 2098| v2098_6(void) = ReturnVoid : -# 2098| v2098_7(void) = AliasedUse : ~m? -# 2098| v2098_8(void) = ExitFunction : +# 2104| r2104_6(align_val_t) = Constant[128] : +# 2104| r2104_7(void *) = Call[operator new[]] : func:r2104_1, 0:r2104_5, 1:r2104_6 +# 2104| mu2104_8(unknown) = ^CallSideEffect : ~m? +# 2104| mu2104_9(unknown) = ^InitializeDynamicAllocation : &:r2104_7 +# 2104| r2104_10(Overaligned *) = Convert : r2104_7 +# 2105| r2105_1(glval) = FunctionAddress[operator new[]] : +# 2105| r2105_2(glval) = VariableAddress[n] : +# 2105| r2105_3(unsigned long) = Load[n] : &:r2105_2, ~m? +# 2105| r2105_4(unsigned long) = Constant[1] : +# 2105| r2105_5(unsigned long) = Mul : r2105_3, r2105_4 +# 2105| r2105_6(void *) = Call[operator new[]] : func:r2105_1, 0:r2105_5 +# 2105| mu2105_7(unknown) = ^CallSideEffect : ~m? +# 2105| mu2105_8(unknown) = ^InitializeDynamicAllocation : &:r2105_6 +# 2105| r2105_9(DefaultCtorWithDefaultParam *) = Convert : r2105_6 +# 2106| r2106_1(glval) = FunctionAddress[operator new[]] : +# 2106| r2106_2(glval) = VariableAddress[n] : +# 2106| r2106_3(unsigned long) = Load[n] : &:r2106_2, ~m? +# 2106| r2106_4(unsigned long) = Constant[4] : +# 2106| r2106_5(unsigned long) = Mul : r2106_3, r2106_4 +# 2106| r2106_6(void *) = Call[operator new[]] : func:r2106_1, 0:r2106_5 +# 2106| mu2106_7(unknown) = ^CallSideEffect : ~m? +# 2106| mu2106_8(unknown) = ^InitializeDynamicAllocation : &:r2106_6 +# 2106| r2106_9(int *) = Convert : r2106_6 +# 2107| v2107_1(void) = NoOp : +# 2100| v2100_6(void) = ReturnVoid : +# 2100| v2100_7(void) = AliasedUse : ~m? +# 2100| v2100_8(void) = ExitFunction : -# 2109| char* test_strtod(char*) -# 2109| Block 0 -# 2109| v2109_1(void) = EnterFunction : -# 2109| mu2109_2(unknown) = AliasedDefinition : -# 2109| mu2109_3(unknown) = InitializeNonLocal : -# 2109| r2109_4(glval) = VariableAddress[s] : -# 2109| mu2109_5(char *) = InitializeParameter[s] : &:r2109_4 -# 2109| r2109_6(char *) = Load[s] : &:r2109_4, ~m? -# 2109| mu2109_7(unknown) = InitializeIndirection[s] : &:r2109_6 -# 2110| r2110_1(glval) = VariableAddress[end] : -# 2110| mu2110_2(char *) = Uninitialized[end] : &:r2110_1 -# 2111| r2111_1(glval) = VariableAddress[d] : -# 2111| r2111_2(glval) = FunctionAddress[strtod] : -# 2111| r2111_3(glval) = VariableAddress[s] : -# 2111| r2111_4(char *) = Load[s] : &:r2111_3, ~m? -# 2111| r2111_5(char *) = Convert : r2111_4 -# 2111| r2111_6(glval) = VariableAddress[end] : -# 2111| r2111_7(char **) = CopyValue : r2111_6 -# 2111| r2111_8(double) = Call[strtod] : func:r2111_2, 0:r2111_5, 1:r2111_7 -# 2111| v2111_9(void) = ^BufferReadSideEffect[0] : &:r2111_5, ~m? -# 2111| mu2111_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2111_7 -# 2111| mu2111_11(double) = Store[d] : &:r2111_1, r2111_8 -# 2112| r2112_1(glval) = VariableAddress[#return] : -# 2112| r2112_2(glval) = VariableAddress[end] : -# 2112| r2112_3(char *) = Load[end] : &:r2112_2, ~m? -# 2112| mu2112_4(char *) = Store[#return] : &:r2112_1, r2112_3 -# 2109| v2109_8(void) = ReturnIndirection[s] : &:r2109_6, ~m? -# 2109| r2109_9(glval) = VariableAddress[#return] : -# 2109| v2109_10(void) = ReturnValue : &:r2109_9, ~m? -# 2109| v2109_11(void) = AliasedUse : ~m? -# 2109| v2109_12(void) = ExitFunction : +# 2111| char* test_strtod(char*) +# 2111| Block 0 +# 2111| v2111_1(void) = EnterFunction : +# 2111| mu2111_2(unknown) = AliasedDefinition : +# 2111| mu2111_3(unknown) = InitializeNonLocal : +# 2111| r2111_4(glval) = VariableAddress[s] : +# 2111| mu2111_5(char *) = InitializeParameter[s] : &:r2111_4 +# 2111| r2111_6(char *) = Load[s] : &:r2111_4, ~m? +# 2111| mu2111_7(unknown) = InitializeIndirection[s] : &:r2111_6 +# 2112| r2112_1(glval) = VariableAddress[end] : +# 2112| mu2112_2(char *) = Uninitialized[end] : &:r2112_1 +# 2113| r2113_1(glval) = VariableAddress[d] : +# 2113| r2113_2(glval) = FunctionAddress[strtod] : +# 2113| r2113_3(glval) = VariableAddress[s] : +# 2113| r2113_4(char *) = Load[s] : &:r2113_3, ~m? +# 2113| r2113_5(char *) = Convert : r2113_4 +# 2113| r2113_6(glval) = VariableAddress[end] : +# 2113| r2113_7(char **) = CopyValue : r2113_6 +# 2113| r2113_8(double) = Call[strtod] : func:r2113_2, 0:r2113_5, 1:r2113_7 +# 2113| v2113_9(void) = ^BufferReadSideEffect[0] : &:r2113_5, ~m? +# 2113| mu2113_10(char *) = ^IndirectMayWriteSideEffect[1] : &:r2113_7 +# 2113| mu2113_11(double) = Store[d] : &:r2113_1, r2113_8 +# 2114| r2114_1(glval) = VariableAddress[#return] : +# 2114| r2114_2(glval) = VariableAddress[end] : +# 2114| r2114_3(char *) = Load[end] : &:r2114_2, ~m? +# 2114| mu2114_4(char *) = Store[#return] : &:r2114_1, r2114_3 +# 2111| v2111_8(void) = ReturnIndirection[s] : &:r2111_6, ~m? +# 2111| r2111_9(glval) = VariableAddress[#return] : +# 2111| v2111_10(void) = ReturnValue : &:r2111_9, ~m? +# 2111| v2111_11(void) = AliasedUse : ~m? +# 2111| v2111_12(void) = ExitFunction : + +# 2121| void call_as_child_of_ConditionDeclExpr() +# 2121| Block 0 +# 2121| v2121_1(void) = EnterFunction : +# 2121| mu2121_2(unknown) = AliasedDefinition : +# 2121| mu2121_3(unknown) = InitializeNonLocal : +# 2122| r2122_1(glval) = VariableAddress[b] : +# 2122| r2122_2(HasOperatorBool) = Constant[0] : +# 2122| mu2122_3(HasOperatorBool) = Store[b] : &:r2122_1, r2122_2 +# 2122| r2122_4(glval) = VariableAddress[b] : +# 2122| r2122_5(glval) = FunctionAddress[operator bool] : +# 2122| r2122_6(bool) = Call[operator bool] : func:r2122_5, this:r2122_4 +# 2122| mu2122_7(unknown) = ^CallSideEffect : ~m? +# 2122| v2122_8(void) = ^IndirectReadSideEffect[-1] : &:r2122_4, ~m? +# 2122| mu2122_9(HasOperatorBool) = ^IndirectMayWriteSideEffect[-1] : &:r2122_4 +# 2122| r2122_10(bool) = CopyValue : r2122_6 +# 2122| v2122_11(void) = ConditionalBranch : r2122_10 +#-----| False -> Block 2 +#-----| True -> Block 1 + +# 2122| Block 1 +# 2122| v2122_12(void) = NoOp : +#-----| Goto -> Block 2 + +# 2123| Block 2 +# 2123| v2123_1(void) = NoOp : +# 2121| v2121_4(void) = ReturnVoid : +# 2121| v2121_5(void) = AliasedUse : ~m? +# 2121| v2121_6(void) = ExitFunction : + +# 2125| void ClassWithDestructor::ClassWithDestructor(ClassWithDestructor const&) +# 2125| Block 0 +# 2125| v2125_1(void) = EnterFunction : +# 2125| mu2125_2(unknown) = AliasedDefinition : +# 2125| mu2125_3(unknown) = InitializeNonLocal : +# 2125| r2125_4(glval) = VariableAddress[#this] : +# 2125| mu2125_5(glval) = InitializeParameter[#this] : &:r2125_4 +# 2125| r2125_6(glval) = Load[#this] : &:r2125_4, ~m? +# 2125| mu2125_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2125_6 +#-----| r0_1(glval) = VariableAddress[(unnamed parameter 0)] : +#-----| mu0_2(ClassWithDestructor &) = InitializeParameter[(unnamed parameter 0)] : &:r0_1 +#-----| r0_3(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r0_1, ~m? +#-----| mu0_4(unknown) = InitializeIndirection[(unnamed parameter 0)] : &:r0_3 +# 2125| r2125_8(glval) = FieldAddress[x] : mu2125_5 +# 2125| r2125_9(glval) = VariableAddress[(unnamed parameter 0)] : +# 2125| r2125_10(ClassWithDestructor &) = Load[(unnamed parameter 0)] : &:r2125_9, ~m? +# 2125| r2125_11(glval) = CopyValue : r2125_10 +# 2125| r2125_12(glval) = FieldAddress[x] : r2125_11 +# 2125| r2125_13(char *) = Load[?] : &:r2125_12, ~m? +# 2125| mu2125_14(char *) = Store[?] : &:r2125_8, r2125_13 +# 2125| v2125_15(void) = NoOp : +# 2125| v2125_16(void) = ReturnIndirection[#this] : &:r2125_6, ~m? +#-----| v0_5(void) = ReturnIndirection[(unnamed parameter 0)] : &:r0_3, ~m? +# 2125| v2125_17(void) = ReturnVoid : +# 2125| v2125_18(void) = AliasedUse : ~m? +# 2125| v2125_19(void) = ExitFunction : + +# 2128| void ClassWithDestructor::ClassWithDestructor() +# 2128| Block 0 +# 2128| v2128_1(void) = EnterFunction : +# 2128| mu2128_2(unknown) = AliasedDefinition : +# 2128| mu2128_3(unknown) = InitializeNonLocal : +# 2128| r2128_4(glval) = VariableAddress[#this] : +# 2128| mu2128_5(glval) = InitializeParameter[#this] : &:r2128_4 +# 2128| r2128_6(glval) = Load[#this] : &:r2128_4, ~m? +# 2128| mu2128_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2128_6 +# 2128| r2128_8(glval) = FunctionAddress[operator new] : +# 2128| r2128_9(unsigned long) = Constant[1] : +# 2128| r2128_10(void *) = Call[operator new] : func:r2128_8, 0:r2128_9 +# 2128| mu2128_11(unknown) = ^CallSideEffect : ~m? +# 2128| mu2128_12(unknown) = ^InitializeDynamicAllocation : &:r2128_10 +# 2128| r2128_13(char *) = Convert : r2128_10 +# 2128| r2128_14(glval) = VariableAddress[#this] : +# 2128| r2128_15(ClassWithDestructor *) = Load[#this] : &:r2128_14, ~m? +# 2128| r2128_16(glval) = FieldAddress[x] : r2128_15 +# 2128| mu2128_17(char *) = Store[?] : &:r2128_16, r2128_13 +# 2128| v2128_18(void) = NoOp : +# 2128| v2128_19(void) = ReturnIndirection[#this] : &:r2128_6, ~m? +# 2128| v2128_20(void) = ReturnVoid : +# 2128| v2128_21(void) = AliasedUse : ~m? +# 2128| v2128_22(void) = ExitFunction : + +# 2129| void ClassWithDestructor::~ClassWithDestructor() +# 2129| Block 0 +# 2129| v2129_1(void) = EnterFunction : +# 2129| mu2129_2(unknown) = AliasedDefinition : +# 2129| mu2129_3(unknown) = InitializeNonLocal : +# 2129| r2129_4(glval) = VariableAddress[#this] : +# 2129| mu2129_5(glval) = InitializeParameter[#this] : &:r2129_4 +# 2129| r2129_6(glval) = Load[#this] : &:r2129_4, ~m? +# 2129| mu2129_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2129_6 +# 2129| r2129_8(glval) = FunctionAddress[operator delete] : +# 2129| r2129_9(glval) = VariableAddress[#this] : +# 2129| r2129_10(ClassWithDestructor *) = Load[#this] : &:r2129_9, ~m? +# 2129| r2129_11(glval) = FieldAddress[x] : r2129_10 +# 2129| r2129_12(char *) = Load[?] : &:r2129_11, ~m? +# 2129| v2129_13(void) = Call[operator delete] : func:r2129_8, 0:r2129_12 +# 2129| mu2129_14(unknown) = ^CallSideEffect : ~m? +# 2129| v2129_15(void) = NoOp : +# 2129| v2129_16(void) = ReturnIndirection[#this] : &:r2129_6, ~m? +# 2129| v2129_17(void) = ReturnVoid : +# 2129| v2129_18(void) = AliasedUse : ~m? +# 2129| v2129_19(void) = ExitFunction : + +# 2131| void ClassWithDestructor::set_x(char) +# 2131| Block 0 +# 2131| v2131_1(void) = EnterFunction : +# 2131| mu2131_2(unknown) = AliasedDefinition : +# 2131| mu2131_3(unknown) = InitializeNonLocal : +# 2131| r2131_4(glval) = VariableAddress[#this] : +# 2131| mu2131_5(glval) = InitializeParameter[#this] : &:r2131_4 +# 2131| r2131_6(glval) = Load[#this] : &:r2131_4, ~m? +# 2131| mu2131_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2131_6 +# 2131| r2131_8(glval) = VariableAddress[y] : +# 2131| mu2131_9(char) = InitializeParameter[y] : &:r2131_8 +# 2131| r2131_10(glval) = VariableAddress[y] : +# 2131| r2131_11(char) = Load[y] : &:r2131_10, ~m? +# 2131| r2131_12(glval) = VariableAddress[#this] : +# 2131| r2131_13(ClassWithDestructor *) = Load[#this] : &:r2131_12, ~m? +# 2131| r2131_14(glval) = FieldAddress[x] : r2131_13 +# 2131| r2131_15(char *) = Load[?] : &:r2131_14, ~m? +# 2131| r2131_16(glval) = CopyValue : r2131_15 +# 2131| mu2131_17(char) = Store[?] : &:r2131_16, r2131_11 +# 2131| v2131_18(void) = NoOp : +# 2131| v2131_19(void) = ReturnIndirection[#this] : &:r2131_6, ~m? +# 2131| v2131_20(void) = ReturnVoid : +# 2131| v2131_21(void) = AliasedUse : ~m? +# 2131| v2131_22(void) = ExitFunction : + +# 2132| char ClassWithDestructor::get_x() +# 2132| Block 0 +# 2132| v2132_1(void) = EnterFunction : +# 2132| mu2132_2(unknown) = AliasedDefinition : +# 2132| mu2132_3(unknown) = InitializeNonLocal : +# 2132| r2132_4(glval) = VariableAddress[#this] : +# 2132| mu2132_5(glval) = InitializeParameter[#this] : &:r2132_4 +# 2132| r2132_6(glval) = Load[#this] : &:r2132_4, ~m? +# 2132| mu2132_7(ClassWithDestructor) = InitializeIndirection[#this] : &:r2132_6 +# 2132| r2132_8(glval) = VariableAddress[#return] : +# 2132| r2132_9(glval) = VariableAddress[#this] : +# 2132| r2132_10(ClassWithDestructor *) = Load[#this] : &:r2132_9, ~m? +# 2132| r2132_11(glval) = FieldAddress[x] : r2132_10 +# 2132| r2132_12(char *) = Load[?] : &:r2132_11, ~m? +# 2132| r2132_13(char) = Load[?] : &:r2132_12, ~m? +# 2132| mu2132_14(char) = Store[#return] : &:r2132_8, r2132_13 +# 2132| v2132_15(void) = ReturnIndirection[#this] : &:r2132_6, ~m? +# 2132| r2132_16(glval) = VariableAddress[#return] : +# 2132| v2132_17(void) = ReturnValue : &:r2132_16, ~m? +# 2132| v2132_18(void) = AliasedUse : ~m? +# 2132| v2132_19(void) = ExitFunction : + +# 2135| bool initialization_with_destructor_bool +# 2135| Block 0 +# 2135| v2135_1(void) = EnterFunction : +# 2135| mu2135_2(unknown) = AliasedDefinition : +# 2135| r2135_3(glval) = VariableAddress[initialization_with_destructor_bool] : +# 2135| r2135_4(bool) = Constant[1] : +# 2135| mu2135_5(bool) = Store[initialization_with_destructor_bool] : &:r2135_3, r2135_4 +# 2135| v2135_6(void) = ReturnVoid : +# 2135| v2135_7(void) = AliasedUse : ~m? +# 2135| v2135_8(void) = ExitFunction : + +# 2137| void initialization_with_destructor(bool, char) +# 2137| Block 0 +# 2137| v2137_1(void) = EnterFunction : +# 2137| mu2137_2(unknown) = AliasedDefinition : +# 2137| mu2137_3(unknown) = InitializeNonLocal : +# 2137| r2137_4(glval) = VariableAddress[b] : +# 2137| mu2137_5(bool) = InitializeParameter[b] : &:r2137_4 +# 2137| r2137_6(glval) = VariableAddress[c] : +# 2137| mu2137_7(char) = InitializeParameter[c] : &:r2137_6 +# 2138| r2138_1(glval) = VariableAddress[x] : +# 2138| mu2138_2(ClassWithDestructor) = Uninitialized[x] : &:r2138_1 +# 2138| r2138_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2138| v2138_4(void) = Call[ClassWithDestructor] : func:r2138_3, this:r2138_1 +# 2138| mu2138_5(unknown) = ^CallSideEffect : ~m? +# 2138| mu2138_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2138_1 +# 2138| r2138_7(glval) = VariableAddress[b] : +# 2138| r2138_8(bool) = Load[b] : &:r2138_7, ~m? +# 2138| v2138_9(void) = ConditionalBranch : r2138_8 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2137| Block 1 +# 2137| v2137_8(void) = ReturnVoid : +# 2137| v2137_9(void) = AliasedUse : ~m? +# 2137| v2137_10(void) = ExitFunction : + +# 2139| Block 2 +# 2139| r2139_1(glval) = VariableAddress[x] : +# 2139| r2139_2(glval) = FunctionAddress[set_x] : +# 2139| r2139_3(char) = Constant[97] : +# 2139| v2139_4(void) = Call[set_x] : func:r2139_2, this:r2139_1, 0:r2139_3 +# 2139| mu2139_5(unknown) = ^CallSideEffect : ~m? +# 2139| v2139_6(void) = ^IndirectReadSideEffect[-1] : &:r2139_1, ~m? +# 2139| mu2139_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2139_1 +#-----| Goto -> Block 3 + +# 2141| Block 3 +# 2141| r2141_1(glval) = VariableAddress[x] : +# 2141| mu2141_2(ClassWithDestructor) = Uninitialized[x] : &:r2141_1 +# 2141| r2141_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2141| v2141_4(void) = Call[ClassWithDestructor] : func:r2141_3, this:r2141_1 +# 2141| mu2141_5(unknown) = ^CallSideEffect : ~m? +# 2141| mu2141_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2141_1 +# 2141| r2141_7(bool) = Constant[1] : +# 2141| v2141_8(void) = ConditionalBranch : r2141_7 +#-----| False -> Block 5 +#-----| True -> Block 4 + +# 2142| Block 4 +# 2142| r2142_1(glval) = VariableAddress[x] : +# 2142| r2142_2(glval) = FunctionAddress[set_x] : +# 2142| r2142_3(char) = Constant[97] : +# 2142| v2142_4(void) = Call[set_x] : func:r2142_2, this:r2142_1, 0:r2142_3 +# 2142| mu2142_5(unknown) = ^CallSideEffect : ~m? +# 2142| v2142_6(void) = ^IndirectReadSideEffect[-1] : &:r2142_1, ~m? +# 2142| mu2142_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2142_1 +#-----| Goto -> Block 5 + +# 2144| Block 5 +# 2144| r2144_1(glval) = VariableAddress[x] : +# 2144| mu2144_2(ClassWithDestructor) = Uninitialized[x] : &:r2144_1 +# 2144| r2144_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2144| v2144_4(void) = Call[ClassWithDestructor] : func:r2144_3, this:r2144_1 +# 2144| mu2144_5(unknown) = ^CallSideEffect : ~m? +# 2144| mu2144_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2144_1 +# 2144| r2144_7(glval) = VariableAddress[c] : +# 2144| r2144_8(char) = Load[c] : &:r2144_7, ~m? +# 2144| r2144_9(int) = Convert : r2144_8 +# 2144| v2144_10(void) = Switch : r2144_9 +#-----| Case[97] -> Block 6 +#-----| Default -> Block 7 + +# 2145| Block 6 +# 2145| v2145_1(void) = NoOp : +# 2146| r2146_1(glval) = VariableAddress[x] : +# 2146| r2146_2(glval) = FunctionAddress[set_x] : +# 2146| r2146_3(char) = Constant[97] : +# 2146| v2146_4(void) = Call[set_x] : func:r2146_2, this:r2146_1, 0:r2146_3 +# 2146| mu2146_5(unknown) = ^CallSideEffect : ~m? +# 2146| v2146_6(void) = ^IndirectReadSideEffect[-1] : &:r2146_1, ~m? +# 2146| mu2146_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2146_1 +# 2147| v2147_1(void) = NoOp : +#-----| Goto -> Block 8 + +# 2148| Block 7 +# 2148| v2148_1(void) = NoOp : +# 2149| r2149_1(glval) = VariableAddress[x] : +# 2149| r2149_2(glval) = FunctionAddress[set_x] : +# 2149| r2149_3(char) = Constant[98] : +# 2149| v2149_4(void) = Call[set_x] : func:r2149_2, this:r2149_1, 0:r2149_3 +# 2149| mu2149_5(unknown) = ^CallSideEffect : ~m? +# 2149| v2149_6(void) = ^IndirectReadSideEffect[-1] : &:r2149_1, ~m? +# 2149| mu2149_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2149_1 +# 2150| v2150_1(void) = NoOp : +#-----| Goto -> Block 8 + +# 2151| Block 8 +# 2151| v2151_1(void) = NoOp : +# 2153| r2153_1(glval) = VariableAddress[x] : +# 2153| mu2153_2(ClassWithDestructor) = Uninitialized[x] : &:r2153_1 +# 2153| r2153_3(glval) = FunctionAddress[ClassWithDestructor] : +# 2153| v2153_4(void) = Call[ClassWithDestructor] : func:r2153_3, this:r2153_1 +# 2153| mu2153_5(unknown) = ^CallSideEffect : ~m? +# 2153| mu2153_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2153_1 +# 2154| r2154_1(glval>) = VariableAddress[ys] : +# 2154| mu2154_2(vector) = Uninitialized[ys] : &:r2154_1 +# 2154| r2154_3(glval) = FunctionAddress[vector] : +# 2154| r2154_4(glval) = VariableAddress[#temp2154:40] : +# 2154| r2154_5(glval) = VariableAddress[x] : +# 2154| r2154_6(ClassWithDestructor) = Load[x] : &:r2154_5, ~m? +# 2154| mu2154_7(ClassWithDestructor) = Store[#temp2154:40] : &:r2154_4, r2154_6 +# 2154| r2154_8(ClassWithDestructor) = Load[#temp2154:40] : &:r2154_4, ~m? +# 2154| v2154_9(void) = Call[vector] : func:r2154_3, this:r2154_1, 0:r2154_8 +# 2154| mu2154_10(unknown) = ^CallSideEffect : ~m? +# 2154| mu2154_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2154_1 +# 2154| r2154_12(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_13(glval>) = VariableAddress[ys] : +# 2154| r2154_14(vector &) = CopyValue : r2154_13 +# 2154| mu2154_15(vector &) = Store[(__range)] : &:r2154_12, r2154_14 +# 2154| r2154_16(glval) = VariableAddress[(__begin)] : +# 2154| r2154_17(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_18(vector &) = Load[(__range)] : &:r2154_17, ~m? +#-----| r0_1(glval>) = CopyValue : r2154_18 +#-----| r0_2(glval>) = Convert : r0_1 +# 2154| r2154_19(glval) = FunctionAddress[begin] : +# 2154| r2154_20(iterator) = Call[begin] : func:r2154_19, this:r0_2 +# 2154| mu2154_21(unknown) = ^CallSideEffect : ~m? +#-----| v0_3(void) = ^IndirectReadSideEffect[-1] : &:r0_2, ~m? +# 2154| mu2154_22(iterator) = Store[(__begin)] : &:r2154_16, r2154_20 +# 2154| r2154_23(glval) = VariableAddress[(__end)] : +# 2154| r2154_24(glval &>) = VariableAddress[(__range)] : +# 2154| r2154_25(vector &) = Load[(__range)] : &:r2154_24, ~m? +#-----| r0_4(glval>) = CopyValue : r2154_25 +#-----| r0_5(glval>) = Convert : r0_4 +# 2154| r2154_26(glval) = FunctionAddress[end] : +# 2154| r2154_27(iterator) = Call[end] : func:r2154_26, this:r0_5 +# 2154| mu2154_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_6(void) = ^IndirectReadSideEffect[-1] : &:r0_5, ~m? +# 2154| mu2154_29(iterator) = Store[(__end)] : &:r2154_23, r2154_27 +#-----| Goto -> Block 9 + +# 2154| Block 9 +# 2154| r2154_30(glval) = VariableAddress[(__begin)] : +#-----| r0_7(glval) = Convert : r2154_30 +# 2154| r2154_31(glval) = FunctionAddress[operator!=] : +# 2154| r2154_32(glval) = VariableAddress[(__end)] : +# 2154| r2154_33(iterator) = Load[(__end)] : &:r2154_32, ~m? +# 2154| r2154_34(bool) = Call[operator!=] : func:r2154_31, this:r0_7, 0:r2154_33 +# 2154| mu2154_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_8(void) = ^IndirectReadSideEffect[-1] : &:r0_7, ~m? +# 2154| v2154_36(void) = ConditionalBranch : r2154_34 +#-----| False -> Block 11 +#-----| True -> Block 10 + +# 2154| Block 10 +# 2154| r2154_37(glval) = VariableAddress[y] : +# 2154| r2154_38(glval) = VariableAddress[(__begin)] : +#-----| r0_9(glval) = Convert : r2154_38 +# 2154| r2154_39(glval) = FunctionAddress[operator*] : +# 2154| r2154_40(ClassWithDestructor &) = Call[operator*] : func:r2154_39, this:r0_9 +# 2154| mu2154_41(unknown) = ^CallSideEffect : ~m? +#-----| v0_10(void) = ^IndirectReadSideEffect[-1] : &:r0_9, ~m? +# 2154| r2154_42(ClassWithDestructor) = Load[?] : &:r2154_40, ~m? +# 2154| mu2154_43(ClassWithDestructor) = Store[y] : &:r2154_37, r2154_42 +# 2155| r2155_1(glval) = VariableAddress[y] : +# 2155| r2155_2(glval) = FunctionAddress[set_x] : +# 2155| r2155_3(char) = Constant[97] : +# 2155| v2155_4(void) = Call[set_x] : func:r2155_2, this:r2155_1, 0:r2155_3 +# 2155| mu2155_5(unknown) = ^CallSideEffect : ~m? +# 2155| v2155_6(void) = ^IndirectReadSideEffect[-1] : &:r2155_1, ~m? +# 2155| mu2155_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2155_1 +# 2154| r2154_44(glval) = VariableAddress[(__begin)] : +# 2154| r2154_45(glval) = FunctionAddress[operator++] : +# 2154| r2154_46(iterator &) = Call[operator++] : func:r2154_45, this:r2154_44 +# 2154| mu2154_47(unknown) = ^CallSideEffect : ~m? +# 2154| v2154_48(void) = ^IndirectReadSideEffect[-1] : &:r2154_44, ~m? +# 2154| mu2154_49(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2154_44 +# 2154| r2154_50(glval) = CopyValue : r2154_46 +#-----| Goto (back edge) -> Block 9 + +# 2157| Block 11 +# 2157| r2157_1(glval>) = VariableAddress[ys] : +# 2157| mu2157_2(vector) = Uninitialized[ys] : &:r2157_1 +# 2157| r2157_3(glval) = FunctionAddress[vector] : +# 2157| r2157_4(glval) = VariableAddress[#temp2157:40] : +# 2157| r2157_5(glval) = VariableAddress[x] : +# 2157| r2157_6(ClassWithDestructor) = Load[x] : &:r2157_5, ~m? +# 2157| mu2157_7(ClassWithDestructor) = Store[#temp2157:40] : &:r2157_4, r2157_6 +# 2157| r2157_8(ClassWithDestructor) = Load[#temp2157:40] : &:r2157_4, ~m? +# 2157| v2157_9(void) = Call[vector] : func:r2157_3, this:r2157_1, 0:r2157_8 +# 2157| mu2157_10(unknown) = ^CallSideEffect : ~m? +# 2157| mu2157_11(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2157_1 +# 2157| r2157_12(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_13(glval>) = VariableAddress[ys] : +# 2157| r2157_14(vector &) = CopyValue : r2157_13 +# 2157| mu2157_15(vector &) = Store[(__range)] : &:r2157_12, r2157_14 +# 2157| r2157_16(glval) = VariableAddress[(__begin)] : +# 2157| r2157_17(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_18(vector &) = Load[(__range)] : &:r2157_17, ~m? +#-----| r0_11(glval>) = CopyValue : r2157_18 +#-----| r0_12(glval>) = Convert : r0_11 +# 2157| r2157_19(glval) = FunctionAddress[begin] : +# 2157| r2157_20(iterator) = Call[begin] : func:r2157_19, this:r0_12 +# 2157| mu2157_21(unknown) = ^CallSideEffect : ~m? +#-----| v0_13(void) = ^IndirectReadSideEffect[-1] : &:r0_12, ~m? +# 2157| mu2157_22(iterator) = Store[(__begin)] : &:r2157_16, r2157_20 +# 2157| r2157_23(glval) = VariableAddress[(__end)] : +# 2157| r2157_24(glval &>) = VariableAddress[(__range)] : +# 2157| r2157_25(vector &) = Load[(__range)] : &:r2157_24, ~m? +#-----| r0_14(glval>) = CopyValue : r2157_25 +#-----| r0_15(glval>) = Convert : r0_14 +# 2157| r2157_26(glval) = FunctionAddress[end] : +# 2157| r2157_27(iterator) = Call[end] : func:r2157_26, this:r0_15 +# 2157| mu2157_28(unknown) = ^CallSideEffect : ~m? +#-----| v0_16(void) = ^IndirectReadSideEffect[-1] : &:r0_15, ~m? +# 2157| mu2157_29(iterator) = Store[(__end)] : &:r2157_23, r2157_27 +#-----| Goto -> Block 12 + +# 2157| Block 12 +# 2157| r2157_30(glval) = VariableAddress[(__begin)] : +#-----| r0_17(glval) = Convert : r2157_30 +# 2157| r2157_31(glval) = FunctionAddress[operator!=] : +# 2157| r2157_32(glval) = VariableAddress[(__end)] : +# 2157| r2157_33(iterator) = Load[(__end)] : &:r2157_32, ~m? +# 2157| r2157_34(bool) = Call[operator!=] : func:r2157_31, this:r0_17, 0:r2157_33 +# 2157| mu2157_35(unknown) = ^CallSideEffect : ~m? +#-----| v0_18(void) = ^IndirectReadSideEffect[-1] : &:r0_17, ~m? +# 2157| v2157_36(void) = ConditionalBranch : r2157_34 +#-----| False -> Block 16 +#-----| True -> Block 14 + +# 2157| Block 13 +# 2157| r2157_37(glval) = VariableAddress[(__begin)] : +# 2157| r2157_38(glval) = FunctionAddress[operator++] : +# 2157| r2157_39(iterator &) = Call[operator++] : func:r2157_38, this:r2157_37 +# 2157| mu2157_40(unknown) = ^CallSideEffect : ~m? +# 2157| v2157_41(void) = ^IndirectReadSideEffect[-1] : &:r2157_37, ~m? +# 2157| mu2157_42(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2157_37 +# 2157| r2157_43(glval) = CopyValue : r2157_39 +#-----| Goto (back edge) -> Block 12 + +# 2157| Block 14 +# 2157| r2157_44(glval) = VariableAddress[y] : +# 2157| r2157_45(glval) = VariableAddress[(__begin)] : +#-----| r0_19(glval) = Convert : r2157_45 +# 2157| r2157_46(glval) = FunctionAddress[operator*] : +# 2157| r2157_47(ClassWithDestructor &) = Call[operator*] : func:r2157_46, this:r0_19 +# 2157| mu2157_48(unknown) = ^CallSideEffect : ~m? +#-----| v0_20(void) = ^IndirectReadSideEffect[-1] : &:r0_19, ~m? +# 2157| r2157_49(ClassWithDestructor) = Load[?] : &:r2157_47, ~m? +# 2157| mu2157_50(ClassWithDestructor) = Store[y] : &:r2157_44, r2157_49 +# 2158| r2158_1(glval) = VariableAddress[y] : +# 2158| r2158_2(glval) = FunctionAddress[set_x] : +# 2158| r2158_3(char) = Constant[97] : +# 2158| v2158_4(void) = Call[set_x] : func:r2158_2, this:r2158_1, 0:r2158_3 +# 2158| mu2158_5(unknown) = ^CallSideEffect : ~m? +# 2158| v2158_6(void) = ^IndirectReadSideEffect[-1] : &:r2158_1, ~m? +# 2158| mu2158_7(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2158_1 +# 2159| r2159_1(glval) = VariableAddress[y] : +# 2159| r2159_2(glval) = FunctionAddress[get_x] : +# 2159| r2159_3(char) = Call[get_x] : func:r2159_2, this:r2159_1 +# 2159| mu2159_4(unknown) = ^CallSideEffect : ~m? +# 2159| v2159_5(void) = ^IndirectReadSideEffect[-1] : &:r2159_1, ~m? +# 2159| mu2159_6(ClassWithDestructor) = ^IndirectMayWriteSideEffect[-1] : &:r2159_1 +# 2159| r2159_7(int) = Convert : r2159_3 +# 2159| r2159_8(int) = Constant[98] : +# 2159| r2159_9(bool) = CompareEQ : r2159_7, r2159_8 +# 2159| v2159_10(void) = ConditionalBranch : r2159_9 +#-----| False -> Block 13 +#-----| True -> Block 15 + +# 2160| Block 15 +# 2160| v2160_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2163| Block 16 +# 2163| r2163_1(glval>) = VariableAddress[ys] : +# 2163| mu2163_2(vector) = Uninitialized[ys] : &:r2163_1 +# 2163| r2163_3(glval) = FunctionAddress[vector] : +# 2163| r2163_4(int) = Constant[1] : +# 2163| v2163_5(void) = Call[vector] : func:r2163_3, this:r2163_1, 0:r2163_4 +# 2163| mu2163_6(unknown) = ^CallSideEffect : ~m? +# 2163| mu2163_7(vector) = ^IndirectMayWriteSideEffect[-1] : &:r2163_1 +# 2163| r2163_8(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_9(glval>) = VariableAddress[ys] : +# 2163| r2163_10(vector &) = CopyValue : r2163_9 +# 2163| mu2163_11(vector &) = Store[(__range)] : &:r2163_8, r2163_10 +# 2163| r2163_12(glval) = VariableAddress[(__begin)] : +# 2163| r2163_13(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_14(vector &) = Load[(__range)] : &:r2163_13, ~m? +#-----| r0_21(glval>) = CopyValue : r2163_14 +#-----| r0_22(glval>) = Convert : r0_21 +# 2163| r2163_15(glval) = FunctionAddress[begin] : +# 2163| r2163_16(iterator) = Call[begin] : func:r2163_15, this:r0_22 +# 2163| mu2163_17(unknown) = ^CallSideEffect : ~m? +#-----| v0_23(void) = ^IndirectReadSideEffect[-1] : &:r0_22, ~m? +# 2163| mu2163_18(iterator) = Store[(__begin)] : &:r2163_12, r2163_16 +# 2163| r2163_19(glval) = VariableAddress[(__end)] : +# 2163| r2163_20(glval &>) = VariableAddress[(__range)] : +# 2163| r2163_21(vector &) = Load[(__range)] : &:r2163_20, ~m? +#-----| r0_24(glval>) = CopyValue : r2163_21 +#-----| r0_25(glval>) = Convert : r0_24 +# 2163| r2163_22(glval) = FunctionAddress[end] : +# 2163| r2163_23(iterator) = Call[end] : func:r2163_22, this:r0_25 +# 2163| mu2163_24(unknown) = ^CallSideEffect : ~m? +#-----| v0_26(void) = ^IndirectReadSideEffect[-1] : &:r0_25, ~m? +# 2163| mu2163_25(iterator) = Store[(__end)] : &:r2163_19, r2163_23 +#-----| Goto -> Block 17 + +# 2163| Block 17 +# 2163| r2163_26(glval) = VariableAddress[(__begin)] : +#-----| r0_27(glval) = Convert : r2163_26 +# 2163| r2163_27(glval) = FunctionAddress[operator!=] : +# 2163| r2163_28(glval) = VariableAddress[(__end)] : +# 2163| r2163_29(iterator) = Load[(__end)] : &:r2163_28, ~m? +# 2163| r2163_30(bool) = Call[operator!=] : func:r2163_27, this:r0_27, 0:r2163_29 +# 2163| mu2163_31(unknown) = ^CallSideEffect : ~m? +#-----| v0_28(void) = ^IndirectReadSideEffect[-1] : &:r0_27, ~m? +# 2163| v2163_32(void) = ConditionalBranch : r2163_30 +#-----| False -> Block 21 +#-----| True -> Block 19 + +# 2163| Block 18 +# 2163| r2163_33(glval) = VariableAddress[(__begin)] : +# 2163| r2163_34(glval) = FunctionAddress[operator++] : +# 2163| r2163_35(iterator &) = Call[operator++] : func:r2163_34, this:r2163_33 +# 2163| mu2163_36(unknown) = ^CallSideEffect : ~m? +# 2163| v2163_37(void) = ^IndirectReadSideEffect[-1] : &:r2163_33, ~m? +# 2163| mu2163_38(iterator) = ^IndirectMayWriteSideEffect[-1] : &:r2163_33 +# 2163| r2163_39(glval) = CopyValue : r2163_35 +#-----| Goto (back edge) -> Block 17 + +# 2163| Block 19 +# 2163| r2163_40(glval) = VariableAddress[y] : +# 2163| r2163_41(glval) = VariableAddress[(__begin)] : +#-----| r0_29(glval) = Convert : r2163_41 +# 2163| r2163_42(glval) = FunctionAddress[operator*] : +# 2163| r2163_43(int &) = Call[operator*] : func:r2163_42, this:r0_29 +# 2163| mu2163_44(unknown) = ^CallSideEffect : ~m? +#-----| v0_30(void) = ^IndirectReadSideEffect[-1] : &:r0_29, ~m? +# 2163| r2163_45(int) = Load[?] : &:r2163_43, ~m? +# 2163| mu2163_46(int) = Store[y] : &:r2163_40, r2163_45 +# 2164| r2164_1(glval) = VariableAddress[y] : +# 2164| r2164_2(int) = Load[y] : &:r2164_1, ~m? +# 2164| r2164_3(int) = Constant[1] : +# 2164| r2164_4(bool) = CompareEQ : r2164_2, r2164_3 +# 2164| v2164_5(void) = ConditionalBranch : r2164_4 +#-----| False -> Block 18 +#-----| True -> Block 20 + +# 2165| Block 20 +# 2165| v2165_1(void) = NoOp : +#-----| Goto -> Block 1 + +# 2167| Block 21 +# 2167| v2167_1(void) = NoOp : +#-----| Goto -> Block 1 perf-regression.cpp: # 6| void Big::Big() diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected index 79887fffc1f..b93c7d2649f 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency.expected @@ -12,7 +12,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -24,8 +28,4 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes missingCppType diff --git a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected index 79887fffc1f..b93c7d2649f 100644 --- a/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ir/unaliased_ssa_consistency_unsound.expected @@ -12,7 +12,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -24,8 +28,4 @@ nonUniqueEnclosingIRFunction fieldAddressOnNonPointer thisArgumentIsNonPointer nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes missingCppType diff --git a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected index d94b3df0bb3..c2e0783d70f 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/aliased_ssa_consistency.expected @@ -8,10 +8,6 @@ duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor | VacuousDestructorCall.cpp:2:29:2:29 | InitializeIndirection: y | Instruction 'InitializeIndirection: y' has no successors in function '$@'. | VacuousDestructorCall.cpp:2:6:2:6 | void CallDestructor(int, int*) | void CallDestructor(int, int*) | -| condition_decls.cpp:16:19:16:20 | Chi: call to BoxedInt | Instruction 'Chi: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:15:6:15:17 | void if_decl_bind(int) | void if_decl_bind(int) | -| condition_decls.cpp:26:23:26:24 | Chi: call to BoxedInt | Instruction 'Chi: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:25:6:25:21 | void switch_decl_bind(int) | void switch_decl_bind(int) | -| condition_decls.cpp:41:22:41:23 | Chi: call to BoxedInt | Instruction 'Chi: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:40:6:40:20 | void while_decl_bind(int) | void while_decl_bind(int) | -| condition_decls.cpp:48:52:48:53 | Chi: call to BoxedInt | Instruction 'Chi: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:47:6:47:18 | void for_decl_bind(int) | void for_decl_bind(int) | | ms_try_mix.cpp:35:13:35:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:29:6:29:19 | void ms_finally_mix(int) | void ms_finally_mix(int) | | ms_try_mix.cpp:53:5:53:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:49:6:49:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() | | stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:13:21:13 | void stmtexpr::g(int) | void stmtexpr::g(int) | @@ -21,7 +17,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -36,8 +36,4 @@ thisArgumentIsNonPointer | pointer_to_member.cpp:23:5:23:54 | Call: call to expression | Call instruction 'Call: call to expression' has a `this` argument operand that is not an address, in function '$@'. | pointer_to_member.cpp:14:5:14:9 | int usePM(int PM::*) | int usePM(int PM::*) | | pointer_to_member.cpp:24:5:24:49 | Call: call to expression | Call instruction 'Call: call to expression' has a `this` argument operand that is not an address, in function '$@'. | pointer_to_member.cpp:14:5:14:9 | int usePM(int PM::*) | int usePM(int PM::*) | nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes missingCppType diff --git a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected index bee483d992b..caff6369ad9 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/raw_consistency.expected @@ -1,8 +1,4 @@ missingOperand -| condition_decls.cpp:16:6:16:20 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:15:6:15:17 | void if_decl_bind(int) | void if_decl_bind(int) | -| condition_decls.cpp:26:10:26:24 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:25:6:25:21 | void switch_decl_bind(int) | void switch_decl_bind(int) | -| condition_decls.cpp:41:9:41:23 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:40:6:40:20 | void while_decl_bind(int) | void while_decl_bind(int) | -| condition_decls.cpp:48:39:48:53 | CopyValue: (condition decl) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | condition_decls.cpp:47:6:47:18 | void for_decl_bind(int) | void for_decl_bind(int) | | misc.c:125:5:125:11 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | misc.c:97:6:97:10 | void misc3() | void misc3() | | try_catch.cpp:23:5:23:18 | CopyValue: (statement expression) | Instruction 'CopyValue' is missing an expected operand with tag 'Unary' in function '$@'. | try_catch.cpp:19:6:19:23 | void throw_from_nonstmt(int) | void throw_from_nonstmt(int) | unexpectedOperand @@ -15,14 +11,6 @@ instructionWithoutSuccessor | VacuousDestructorCall.cpp:2:29:2:29 | InitializeIndirection: y | Instruction 'InitializeIndirection: y' has no successors in function '$@'. | VacuousDestructorCall.cpp:2:6:2:6 | void CallDestructor(int, int*) | void CallDestructor(int, int*) | | VacuousDestructorCall.cpp:3:3:3:3 | VariableAddress: x | Instruction 'VariableAddress: x' has no successors in function '$@'. | VacuousDestructorCall.cpp:2:6:2:6 | void CallDestructor(int, int*) | void CallDestructor(int, int*) | | VacuousDestructorCall.cpp:4:3:4:3 | Load: y | Instruction 'Load: y' has no successors in function '$@'. | VacuousDestructorCall.cpp:2:6:2:6 | void CallDestructor(int, int*) | void CallDestructor(int, int*) | -| condition_decls.cpp:16:19:16:20 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:15:6:15:17 | void if_decl_bind(int) | void if_decl_bind(int) | -| condition_decls.cpp:26:19:26:20 | IndirectMayWriteSideEffect: bi | Instruction 'IndirectMayWriteSideEffect: bi' has no successors in function '$@'. | condition_decls.cpp:25:6:25:21 | void switch_decl_bind(int) | void switch_decl_bind(int) | -| condition_decls.cpp:26:23:26:24 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:25:6:25:21 | void switch_decl_bind(int) | void switch_decl_bind(int) | -| condition_decls.cpp:41:22:41:23 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:40:6:40:20 | void while_decl_bind(int) | void while_decl_bind(int) | -| condition_decls.cpp:48:52:48:53 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:47:6:47:18 | void for_decl_bind(int) | void for_decl_bind(int) | -| file://:0:0:0:0 | CompareNE: (bool)... | Instruction 'CompareNE: (bool)...' has no successors in function '$@'. | condition_decls.cpp:15:6:15:17 | void if_decl_bind(int) | void if_decl_bind(int) | -| file://:0:0:0:0 | CompareNE: (bool)... | Instruction 'CompareNE: (bool)...' has no successors in function '$@'. | condition_decls.cpp:40:6:40:20 | void while_decl_bind(int) | void while_decl_bind(int) | -| file://:0:0:0:0 | CompareNE: (bool)... | Instruction 'CompareNE: (bool)...' has no successors in function '$@'. | condition_decls.cpp:47:6:47:18 | void for_decl_bind(int) | void for_decl_bind(int) | | ms_try_mix.cpp:35:13:35:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:29:6:29:19 | void ms_finally_mix(int) | void ms_finally_mix(int) | | ms_try_mix.cpp:53:5:53:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:49:6:49:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() | | stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:13:21:13 | void stmtexpr::g(int) | void stmtexpr::g(int) | diff --git a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected index 6706c66c0a2..c2e0783d70f 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/unaliased_ssa_consistency.expected @@ -8,10 +8,6 @@ duplicateChiOperand sideEffectWithoutPrimary instructionWithoutSuccessor | VacuousDestructorCall.cpp:2:29:2:29 | InitializeIndirection: y | Instruction 'InitializeIndirection: y' has no successors in function '$@'. | VacuousDestructorCall.cpp:2:6:2:6 | void CallDestructor(int, int*) | void CallDestructor(int, int*) | -| condition_decls.cpp:16:19:16:20 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:15:6:15:17 | void if_decl_bind(int) | void if_decl_bind(int) | -| condition_decls.cpp:26:23:26:24 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:25:6:25:21 | void switch_decl_bind(int) | void switch_decl_bind(int) | -| condition_decls.cpp:41:22:41:23 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:40:6:40:20 | void while_decl_bind(int) | void while_decl_bind(int) | -| condition_decls.cpp:48:52:48:53 | IndirectMayWriteSideEffect: call to BoxedInt | Instruction 'IndirectMayWriteSideEffect: call to BoxedInt' has no successors in function '$@'. | condition_decls.cpp:47:6:47:18 | void for_decl_bind(int) | void for_decl_bind(int) | | ms_try_mix.cpp:35:13:35:19 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:29:6:29:19 | void ms_finally_mix(int) | void ms_finally_mix(int) | | ms_try_mix.cpp:53:5:53:11 | ThrowValue: throw ... | Instruction 'ThrowValue: throw ...' has no successors in function '$@'. | ms_try_mix.cpp:49:6:49:28 | void ms_empty_finally_at_end() | void ms_empty_finally_at_end() | | stmt_expr.cpp:27:5:27:15 | Store: ... = ... | Instruction 'Store: ... = ...' has no successors in function '$@'. | stmt_expr.cpp:21:13:21:13 | void stmtexpr::g(int) | void stmtexpr::g(int) | @@ -21,7 +17,11 @@ unnecessaryPhiInstruction memoryOperandDefinitionIsUnmodeled operandAcrossFunctions instructionWithoutUniqueBlock +missingCanonicalLanguageType +multipleCanonicalLanguageTypes containsLoopOfForwardEdges +missingIRType +multipleIRTypes lostReachability backEdgeCountMismatch useNotDominatedByDefinition @@ -36,8 +36,4 @@ thisArgumentIsNonPointer | pointer_to_member.cpp:23:5:23:54 | Call: call to expression | Call instruction 'Call: call to expression' has a `this` argument operand that is not an address, in function '$@'. | pointer_to_member.cpp:14:5:14:9 | int usePM(int PM::*) | int usePM(int PM::*) | | pointer_to_member.cpp:24:5:24:49 | Call: call to expression | Call instruction 'Call: call to expression' has a `this` argument operand that is not an address, in function '$@'. | pointer_to_member.cpp:14:5:14:9 | int usePM(int PM::*) | int usePM(int PM::*) | nonUniqueIRVariable -missingCanonicalLanguageType -multipleCanonicalLanguageTypes -missingIRType -multipleIRTypes missingCppType diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected index f30092f0626..b9ac7f0a2d5 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected @@ -1,16 +1,16 @@ edges -| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | -| test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | -| test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | -| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | -| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | -| test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | -| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | -| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | -| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | -| test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | -| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | -| test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | +| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | provenance | | +| test_free.cpp:30:10:30:10 | pointer to free output argument | test_free.cpp:31:27:31:27 | a | provenance | | +| test_free.cpp:35:10:35:10 | pointer to free output argument | test_free.cpp:37:27:37:27 | a | provenance | | +| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | provenance | | +| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:46:10:46:10 | a | provenance | | +| test_free.cpp:50:27:50:27 | pointer to free output argument | test_free.cpp:51:10:51:10 | a | provenance | | +| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:72:14:72:14 | a | provenance | | +| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:85:12:85:12 | a | provenance | | +| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:103:10:103:10 | a | provenance | | +| test_free.cpp:128:10:128:11 | pointer to free output argument | test_free.cpp:129:10:129:11 | * ... | provenance | | +| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:154:10:154:10 | a | provenance | | +| test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | provenance | | nodes | test_free.cpp:11:10:11:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:14:10:14:10 | a | semmle.label | a | diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected index bf2ba1ad092..ceed007f683 100644 --- a/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected +++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/UseAfterFree.expected @@ -1,27 +1,27 @@ edges -| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:12:5:12:5 | a | -| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:13:5:13:6 | * ... | -| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | -| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | -| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:71:9:71:9 | a | -| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:84:5:84:5 | a | -| test_free.cpp:90:10:90:10 | pointer to free output argument | test_free.cpp:91:5:91:5 | a | -| test_free.cpp:95:10:95:10 | pointer to free output argument | test_free.cpp:96:9:96:9 | a | -| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:102:23:102:23 | a | -| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:153:5:153:5 | a | -| test_free.cpp:233:14:233:15 | pointer to free output argument | test_free.cpp:236:9:236:10 | * ... | -| test_free.cpp:239:14:239:15 | pointer to free output argument | test_free.cpp:241:9:241:10 | * ... | -| test_free.cpp:245:10:245:11 | pointer to free output argument | test_free.cpp:246:9:246:10 | * ... | -| test_free.cpp:277:8:277:8 | *s [post update] [buf] | test_free.cpp:278:12:278:12 | *s [buf] | -| test_free.cpp:277:8:277:13 | pointer to free output argument | test_free.cpp:277:8:277:8 | *s [post update] [buf] | -| test_free.cpp:278:12:278:12 | *s [buf] | test_free.cpp:278:15:278:17 | buf | -| test_free.cpp:282:8:282:8 | *s [post update] [buf] | test_free.cpp:283:12:283:12 | *s [buf] | -| test_free.cpp:282:8:282:12 | pointer to free output argument | test_free.cpp:282:8:282:8 | *s [post update] [buf] | -| test_free.cpp:283:12:283:12 | *s [buf] | test_free.cpp:283:14:283:16 | buf | -| test_free.cpp:293:8:293:10 | pointer to free output argument | test_free.cpp:294:3:294:13 | ... = ... | -| test_free.cpp:294:3:294:3 | *s [post update] [buf] | test_free.cpp:295:12:295:12 | *s [buf] | -| test_free.cpp:294:3:294:13 | ... = ... | test_free.cpp:294:3:294:3 | *s [post update] [buf] | -| test_free.cpp:295:12:295:12 | *s [buf] | test_free.cpp:295:14:295:16 | buf | +| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:12:5:12:5 | a | provenance | | +| test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:13:5:13:6 | * ... | provenance | | +| test_free.cpp:42:27:42:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | provenance | | +| test_free.cpp:44:27:44:27 | pointer to free output argument | test_free.cpp:45:5:45:5 | a | provenance | | +| test_free.cpp:69:10:69:10 | pointer to free output argument | test_free.cpp:71:9:71:9 | a | provenance | | +| test_free.cpp:83:12:83:12 | pointer to operator delete output argument | test_free.cpp:84:5:84:5 | a | provenance | | +| test_free.cpp:90:10:90:10 | pointer to free output argument | test_free.cpp:91:5:91:5 | a | provenance | | +| test_free.cpp:95:10:95:10 | pointer to free output argument | test_free.cpp:96:9:96:9 | a | provenance | | +| test_free.cpp:101:10:101:10 | pointer to free output argument | test_free.cpp:102:23:102:23 | a | provenance | | +| test_free.cpp:152:27:152:27 | pointer to free output argument | test_free.cpp:153:5:153:5 | a | provenance | | +| test_free.cpp:233:14:233:15 | pointer to free output argument | test_free.cpp:236:9:236:10 | * ... | provenance | | +| test_free.cpp:239:14:239:15 | pointer to free output argument | test_free.cpp:241:9:241:10 | * ... | provenance | | +| test_free.cpp:245:10:245:11 | pointer to free output argument | test_free.cpp:246:9:246:10 | * ... | provenance | | +| test_free.cpp:277:8:277:8 | *s [post update] [buf] | test_free.cpp:278:12:278:12 | *s [buf] | provenance | | +| test_free.cpp:277:8:277:13 | pointer to free output argument | test_free.cpp:277:8:277:8 | *s [post update] [buf] | provenance | | +| test_free.cpp:278:12:278:12 | *s [buf] | test_free.cpp:278:15:278:17 | buf | provenance | | +| test_free.cpp:282:8:282:8 | *s [post update] [buf] | test_free.cpp:283:12:283:12 | *s [buf] | provenance | | +| test_free.cpp:282:8:282:12 | pointer to free output argument | test_free.cpp:282:8:282:8 | *s [post update] [buf] | provenance | | +| test_free.cpp:283:12:283:12 | *s [buf] | test_free.cpp:283:14:283:16 | buf | provenance | | +| test_free.cpp:293:8:293:10 | pointer to free output argument | test_free.cpp:294:3:294:13 | ... = ... | provenance | | +| test_free.cpp:294:3:294:3 | *s [post update] [buf] | test_free.cpp:295:12:295:12 | *s [buf] | provenance | | +| test_free.cpp:294:3:294:13 | ... = ... | test_free.cpp:294:3:294:3 | *s [post update] [buf] | provenance | | +| test_free.cpp:295:12:295:12 | *s [buf] | test_free.cpp:295:14:295:16 | buf | provenance | | nodes | test_free.cpp:11:10:11:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test_free.cpp:12:5:12:5 | a | semmle.label | a | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected b/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected index c65f76cec0f..3f66b2c20b3 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Conversion/CastArrayPointerArithmetic/CastArrayPointerArithmetic.expected @@ -1,25 +1,25 @@ edges -| test.cpp:26:29:26:29 | b | test.cpp:27:2:27:2 | b | -| test.cpp:30:34:30:34 | b | test.cpp:31:2:31:2 | b | -| test.cpp:34:31:34:31 | b | test.cpp:35:2:35:2 | b | -| test.cpp:57:19:57:19 | d | test.cpp:26:29:26:29 | b | -| test.cpp:57:19:57:19 | d | test.cpp:58:25:58:25 | d | -| test.cpp:57:19:57:19 | d | test.cpp:59:21:59:21 | d | -| test.cpp:58:25:58:25 | d | test.cpp:30:34:30:34 | b | -| test.cpp:58:25:58:25 | d | test.cpp:59:21:59:21 | d | -| test.cpp:59:21:59:21 | d | test.cpp:34:31:34:31 | b | -| test.cpp:74:19:74:21 | dss | test.cpp:26:29:26:29 | b | -| test.cpp:74:19:74:21 | dss | test.cpp:75:25:75:27 | dss | -| test.cpp:74:19:74:21 | dss | test.cpp:76:21:76:23 | dss | -| test.cpp:75:25:75:27 | dss | test.cpp:30:34:30:34 | b | -| test.cpp:75:25:75:27 | dss | test.cpp:76:21:76:23 | dss | -| test.cpp:76:21:76:23 | dss | test.cpp:34:31:34:31 | b | -| test.cpp:86:19:86:20 | d2 | test.cpp:26:29:26:29 | b | -| test.cpp:86:19:86:20 | d2 | test.cpp:87:25:87:26 | d2 | -| test.cpp:86:19:86:20 | d2 | test.cpp:88:21:88:22 | d2 | -| test.cpp:87:25:87:26 | d2 | test.cpp:30:34:30:34 | b | -| test.cpp:87:25:87:26 | d2 | test.cpp:88:21:88:22 | d2 | -| test.cpp:88:21:88:22 | d2 | test.cpp:34:31:34:31 | b | +| test.cpp:26:29:26:29 | b | test.cpp:27:2:27:2 | b | provenance | | +| test.cpp:30:34:30:34 | b | test.cpp:31:2:31:2 | b | provenance | | +| test.cpp:34:31:34:31 | b | test.cpp:35:2:35:2 | b | provenance | | +| test.cpp:57:19:57:19 | d | test.cpp:26:29:26:29 | b | provenance | | +| test.cpp:57:19:57:19 | d | test.cpp:58:25:58:25 | d | provenance | | +| test.cpp:57:19:57:19 | d | test.cpp:59:21:59:21 | d | provenance | | +| test.cpp:58:25:58:25 | d | test.cpp:30:34:30:34 | b | provenance | | +| test.cpp:58:25:58:25 | d | test.cpp:59:21:59:21 | d | provenance | | +| test.cpp:59:21:59:21 | d | test.cpp:34:31:34:31 | b | provenance | | +| test.cpp:74:19:74:21 | dss | test.cpp:26:29:26:29 | b | provenance | | +| test.cpp:74:19:74:21 | dss | test.cpp:75:25:75:27 | dss | provenance | | +| test.cpp:74:19:74:21 | dss | test.cpp:76:21:76:23 | dss | provenance | | +| test.cpp:75:25:75:27 | dss | test.cpp:30:34:30:34 | b | provenance | | +| test.cpp:75:25:75:27 | dss | test.cpp:76:21:76:23 | dss | provenance | | +| test.cpp:76:21:76:23 | dss | test.cpp:34:31:34:31 | b | provenance | | +| test.cpp:86:19:86:20 | d2 | test.cpp:26:29:26:29 | b | provenance | | +| test.cpp:86:19:86:20 | d2 | test.cpp:87:25:87:26 | d2 | provenance | | +| test.cpp:86:19:86:20 | d2 | test.cpp:88:21:88:22 | d2 | provenance | | +| test.cpp:87:25:87:26 | d2 | test.cpp:30:34:30:34 | b | provenance | | +| test.cpp:87:25:87:26 | d2 | test.cpp:88:21:88:22 | d2 | provenance | | +| test.cpp:88:21:88:22 | d2 | test.cpp:34:31:34:31 | b | provenance | | nodes | test.cpp:26:29:26:29 | b | semmle.label | b | | test.cpp:27:2:27:2 | b | semmle.label | b | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.c b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.c index c6e3ac55356..d7b60aebe88 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.c +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.c @@ -23,7 +23,7 @@ extern char *dcngettext (const char *__domainname, const char *__msgid1, extern char *any_random_function(const char *); #define NULL ((void*)0) -#define _(X) any_random_function((X)) +#define _(X) gettext(X) int main(int argc, char **argv) { if(argc > 1) @@ -40,10 +40,9 @@ int main(int argc, char **argv) { printf(gettext("%d arguments\n"), argc-1); // GOOD printf(any_random_function("%d arguments\n"), argc-1); // BAD - // Even though `_` is mapped to `some_random_function` above, - // the following call should not be flagged. - printf(_(any_random_function("%d arguments\n")), - argc-1); // GOOD + + + printf(_(any_random_function("%d arguments\n")), argc-1); // BAD return 0; } diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected index dde3d703fc4..a512dfbd914 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/NonConstantFormat.expected @@ -1,24 +1,21 @@ | NonConstantFormat.c:30:10:30:16 | access to array | The format string argument to printf should be constant to prevent security issues and other potential errors. | | NonConstantFormat.c:41:9:41:27 | call to any_random_function | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| NonConstantFormat.c:45:9:45:48 | call to gettext | The format string argument to printf should be constant to prevent security issues and other potential errors. | | nested.cpp:21:23:21:26 | fmt0 | The format string argument to snprintf should be constant to prevent security issues and other potential errors. | | nested.cpp:79:32:79:38 | call to get_fmt | The format string argument to diagnostic should be constant to prevent security issues and other potential errors. | | nested.cpp:87:18:87:20 | fmt | The format string argument to diagnostic should be constant to prevent security issues and other potential errors. | | test.cpp:51:10:51:21 | call to make_message | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:57:12:57:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:60:12:60:21 | call to const_wash | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:61:12:61:26 | ... + ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:62:12:62:17 | + ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:63:12:63:18 | * ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:64:12:64:18 | & ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:65:12:65:39 | ... + ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:67:10:67:35 | ... + ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:70:12:70:20 | ... + ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:76:12:76:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:82:12:82:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:88:12:88:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:93:12:93:18 | ++ ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:100:12:100:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:110:12:110:24 | new[] | The format string argument to printf should be constant to prevent security issues and other potential errors. | -| test.cpp:115:12:115:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | | test.cpp:130:20:130:26 | access to array | The format string argument to sprintf should be constant to prevent security issues and other potential errors. | | test.cpp:157:12:157:15 | data | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:170:12:170:14 | res | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:195:31:195:33 | str | The format string argument to StringCchPrintfW should be constant to prevent security issues and other potential errors. | +| test.cpp:197:11:197:14 | wstr | The format string argument to wprintf should be constant to prevent security issues and other potential errors. | +| test.cpp:205:12:205:20 | ... + ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:206:12:206:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:211:12:211:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:217:12:217:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:223:12:223:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:228:12:228:18 | ++ ... | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:235:12:235:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:242:12:242:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | +| test.cpp:247:12:247:16 | hello | The format string argument to printf should be constant to prevent security issues and other potential errors. | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp index de9daae32e2..1c3d2513da5 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/nested.cpp @@ -18,7 +18,7 @@ extern "C" int snprintf ( char * s, int n, const char * format, ... ); struct A { void do_print(const char *fmt0) { char buf[32]; - snprintf(buf, 32, fmt0); // GOOD [FALSE POSITIVE] + snprintf(buf, 32, fmt0); // BAD, all paths from unknown const char*, not assuming literal } }; @@ -34,12 +34,12 @@ struct C { void do_some_printing(const char *fmt) { b.do_printing(fmt); } - const char *ext_fmt_str(void); + const char *ext_fmt_str(void); // NOTE: not assuming result is literal }; void foo(void) { C c; - c.do_some_printing(c.ext_fmt_str()); // BAD [NOT DETECTED] + c.do_some_printing(c.ext_fmt_str()); } struct some_class { @@ -76,12 +76,12 @@ void diagnostic(const char *fmt, ...) } void bar(void) { - diagnostic (some_instance->get_fmt()); // BAD + diagnostic (some_instance->get_fmt()); // BAD const char* but not assuming literal } namespace ns { - class blab { + class blab { void out1(void) { char *fmt = (char *)__builtin_alloca(10); diagnostic(fmt); // BAD diff --git a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp index 1fadbf20e45..bc8d0c26bbb 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Format/NonConstantFormat/test.cpp @@ -54,66 +54,66 @@ int main(int argc, char **argv) { { char hello[] = "hello, World\n"; hello[0] = 'H'; - printf(hello); // BAD + printf(hello); // GOOD printf(_(hello)); // GOOD printf(gettext(hello)); // GOOD - printf(const_wash(hello)); // BAD - printf((hello + 1) + 1); // BAD - printf(+hello); // BAD - printf(*&hello); // BAD - printf(&*hello); // BAD - printf((char*)(void*)+(hello+1) + 1); // BAD + printf(const_wash(hello)); // GOOD + printf((hello + 1) + 1); // GOOD + printf(+hello); // GOOD + printf(*&hello); // GOOD + printf(&*hello); // GOOD + printf((char*)(void*)+(hello+1) + 1); // GOOD } - printf(("Hello, World\n" + 1) + 1); // BAD + printf(("Hello, World\n" + 1) + 1); // GOOD { const char *hello = "Hello, World\n"; - printf(hello + 1); // BAD + printf(hello + 1); // GOOD printf(hello); // GOOD } { const char *hello = "Hello, World\n"; hello += 1; - printf(hello); // BAD + printf(hello); // GOOD } { // Same as above block but using "x = x + 1" syntax const char *hello = "Hello, World\n"; hello = hello + 1; - printf(hello); // BAD + printf(hello); // GOOD } { // Same as above block but using "x++" syntax const char *hello = "Hello, World\n"; hello++; - printf(hello); // BAD + printf(hello); // GOOD } { // Same as above block but using "++x" as subexpression const char *hello = "Hello, World\n"; - printf(++hello); // BAD + printf(++hello); // GOOD } { // Same as above block but through a pointer const char *hello = "Hello, World\n"; const char **p = &hello; (*p)++; - printf(hello); // BAD + printf(hello); // GOOD } { // Same as above block but through a C++ reference const char *hello = "Hello, World\n"; const char *&p = hello; p++; - printf(hello); // BAD [NOT DETECTED] + printf(hello); // GOOD } if (gettext_debug) { - printf(new char[100]); // BAD + printf(new char[100]); // BAD [FALSE NEGATIVE: uninitialized value not considered a source] } { const char *hello = "Hello, World\n"; - const char *const *p = &hello; // harmless reference to const pointer - printf(hello); // GOOD [FALSE POSITIVE] - hello++; // modification comes after use and so does no harm + const char *const *p = &hello; + printf(hello); // GOOD + hello++; } printf(argc > 2 ? "More than one\n" : _("Only one\n")); // GOOD @@ -154,7 +154,7 @@ void print_ith_message() { void fmt_via_strcpy(char *data) { strcpy(data, "some string"); - printf(data); // BAD + printf(data); // GOOD [FALSE POSITIVE: Due to inaccurate dataflow killers] } void fmt_with_assignment() { @@ -163,3 +163,107 @@ void fmt_with_assignment() { x = y = "a"; printf(y); // GOOD } + +void fmt_via_strcpy_bad(char *data) { + char res[100]; + strcpy(res, data); + printf(res); // BAD +} + + +int wprintf(const wchar_t *format,...); +typedef wchar_t *STRSAFE_LPWSTR; +typedef const wchar_t *STRSAFE_LPCWSTR; +typedef unsigned int size_t; + +void StringCchPrintfW( + STRSAFE_LPWSTR pszDest, + size_t cchDest, + STRSAFE_LPCWSTR pszFormat, + ... +); + +void wchar_t_test_good(){ + wchar_t wstr[100]; + StringCchPrintfW(wstr, 100, L"STRING"); // GOOD + + wprintf(wstr); // GOOD +} + +void wchar_t_test_bad(wchar_t* str){ + wchar_t wstr[100]; + StringCchPrintfW(wstr, 100, str); // BAD + + wprintf(wstr); // BAD +} + +char* get_string(); + +void pointer_arithmetic_test_on_bad_string(){ + { + const char *hello = get_string(); + printf(hello + 1); // BAD + printf(hello); // BAD + } + { + const char *hello = get_string(); + hello += 1; + printf(hello); // BAD + } + { + // Same as above block but using "x = x + 1" syntax + const char *hello = get_string(); + hello = hello + 1; + printf(hello); // BAD + } + { + // Same as above block but using "x++" syntax + const char *hello = get_string(); + hello++; + printf(hello); // BAD + } + { + // Same as above block but using "++x" as subexpression + const char *hello = get_string(); + printf(++hello); // BAD + } + { + // Same as above block but through a pointer + const char *hello = get_string(); + const char **p = &hello; + (*p)++; + printf(hello); // BAD + } + { + // Same as above block but through a C++ reference + const char *hello = get_string(); + const char *&p = hello; + p++; + printf(hello); // BAD + } + { + const char *hello = get_string(); + const char *const *p = &hello; + printf(hello); // BAD + } +} + +struct struct1 { + char *non_const; + const char* const_member = "TEST"; + char * const_member2 = "TEST"; + struct struct2{ + char *nested_non_const; + const char* nested_const_member = "TEST"; + char * nested_const_member2 = "TEST"; + } nested; +}; + +int test_uncalled_func_with_struct_param(struct struct1 *s) { + printf(s->non_const); // BAD [FALSE NEGATIVE] + printf(s->const_member); // GOOD + printf(s->const_member2); // GOOD + printf(s->nested.nested_non_const); // BAD [FALSE NEGATIVE] + printf(s->nested.nested_const_member); // GOOD + printf(s->nested.nested_const_member2); // GOOD +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected index 5cc2f9cf507..dc8bb31748a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/SAMATE/TaintedPath/TaintedPath.expected @@ -1,5 +1,5 @@ edges -| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | *data | +| CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | *data | provenance | | nodes | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:55:27:55:38 | fgets output argument | semmle.label | fgets output argument | | CWE23_Relative_Path_Traversal__char_console_fopen_11.cpp:77:23:77:26 | *data | semmle.label | *data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected index dd587dd64ed..3b34718d954 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-022/semmle/tests/TaintedPath.expected @@ -1,9 +1,9 @@ edges -| test.c:8:27:8:30 | **argv | test.c:17:11:17:18 | *fileName | -| test.c:8:27:8:30 | **argv | test.c:32:11:32:18 | *fileName | -| test.c:8:27:8:30 | **argv | test.c:57:10:57:16 | *access to array | -| test.c:37:17:37:24 | scanf output argument | test.c:38:11:38:18 | *fileName | -| test.c:43:17:43:24 | scanf output argument | test.c:44:11:44:18 | *fileName | +| test.c:8:27:8:30 | **argv | test.c:17:11:17:18 | *fileName | provenance | | +| test.c:8:27:8:30 | **argv | test.c:32:11:32:18 | *fileName | provenance | | +| test.c:8:27:8:30 | **argv | test.c:57:10:57:16 | *access to array | provenance | | +| test.c:37:17:37:24 | scanf output argument | test.c:38:11:38:18 | *fileName | provenance | | +| test.c:43:17:43:24 | scanf output argument | test.c:44:11:44:18 | *fileName | provenance | | nodes | test.c:8:27:8:30 | **argv | semmle.label | **argv | | test.c:17:11:17:18 | *fileName | semmle.label | *fileName | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected index 4c6c158fb7a..8833a015609 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected @@ -1,9 +1,9 @@ edges -| tests.cpp:26:15:26:23 | **badSource | tests.cpp:51:12:51:20 | *call to badSource | -| tests.cpp:33:34:33:39 | *call to getenv | tests.cpp:38:39:38:49 | *environment | -| tests.cpp:38:25:38:36 | strncat output argument | tests.cpp:26:15:26:23 | **badSource | -| tests.cpp:38:39:38:49 | *environment | tests.cpp:38:25:38:36 | strncat output argument | -| tests.cpp:51:12:51:20 | *call to badSource | tests.cpp:53:16:53:19 | *data | +| tests.cpp:26:15:26:23 | **badSource | tests.cpp:51:12:51:20 | *call to badSource | provenance | | +| tests.cpp:33:34:33:39 | *call to getenv | tests.cpp:38:39:38:49 | *environment | provenance | | +| tests.cpp:38:25:38:36 | strncat output argument | tests.cpp:26:15:26:23 | **badSource | provenance | | +| tests.cpp:38:39:38:49 | *environment | tests.cpp:38:25:38:36 | strncat output argument | provenance | | +| tests.cpp:51:12:51:20 | *call to badSource | tests.cpp:53:16:53:19 | *data | provenance | | nodes | tests.cpp:26:15:26:23 | **badSource | semmle.label | **badSource | | tests.cpp:33:34:33:39 | *call to getenv | semmle.label | *call to getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index 0b53a53adf6..d50edce5f2f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -1,70 +1,70 @@ edges -| test.cpp:15:27:15:30 | **argv | test.cpp:22:45:22:52 | *userName | -| test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | *command1 | -| test.cpp:22:45:22:52 | *userName | test.cpp:22:13:22:20 | sprintf output argument | -| test.cpp:47:21:47:26 | *call to getenv | test.cpp:50:35:50:43 | *envCflags | -| test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | *command | -| test.cpp:50:35:50:43 | *envCflags | test.cpp:50:11:50:17 | sprintf output argument | -| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | *filename | -| test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | *command | -| test.cpp:64:20:64:27 | *filename | test.cpp:64:11:64:17 | strncat output argument | -| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | *filename | -| test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | *command | -| test.cpp:84:20:84:27 | *filename | test.cpp:84:11:84:17 | strncat output argument | -| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | *filename | -| test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | *path | -| test.cpp:93:17:93:24 | *filename | test.cpp:93:11:93:14 | strncat output argument | -| test.cpp:106:20:106:38 | *call to getenv | test.cpp:107:33:107:36 | *path | -| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:18:108:22 | *call to c_str | -| test.cpp:107:33:107:36 | *path | test.cpp:107:31:107:31 | call to operator+ | -| test.cpp:113:20:113:38 | *call to getenv | test.cpp:114:19:114:22 | *path | -| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | -| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | -| test.cpp:114:17:114:17 | call to operator+ | test.cpp:114:10:114:23 | call to operator+ | -| test.cpp:114:19:114:22 | *path | test.cpp:114:10:114:23 | call to operator+ | -| test.cpp:114:19:114:22 | *path | test.cpp:114:17:114:17 | call to operator+ | -| test.cpp:119:20:119:38 | *call to getenv | test.cpp:120:19:120:22 | *path | -| test.cpp:120:17:120:17 | call to operator+ | test.cpp:120:10:120:30 | *call to data | -| test.cpp:120:19:120:22 | *path | test.cpp:120:17:120:17 | call to operator+ | -| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | *str | -| test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | *command | -| test.cpp:142:31:142:33 | *str | test.cpp:142:11:142:17 | sprintf output argument | -| test.cpp:174:9:174:16 | fread output argument | test.cpp:177:20:177:27 | *filename | -| test.cpp:174:9:174:16 | fread output argument | test.cpp:180:22:180:29 | *filename | -| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | -| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | -| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | -| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | -| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | -| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | -| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | -| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | -| test.cpp:180:13:180:19 | strncat output argument | test.cpp:183:32:183:38 | *command | -| test.cpp:180:22:180:29 | *filename | test.cpp:180:13:180:19 | strncat output argument | -| test.cpp:186:47:186:54 | *filename | test.cpp:187:18:187:25 | *filename | -| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | -| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | -| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | -| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | -| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | -| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | -| test.cpp:194:9:194:16 | fread output argument | test.cpp:196:26:196:33 | *filename | -| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | -| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | -| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | -| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | -| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | -| test.cpp:218:9:218:16 | fread output argument | test.cpp:220:19:220:26 | *filename | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | -| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | -| test.cpp:220:19:220:26 | *filename | test.cpp:220:19:220:26 | *filename | +| test.cpp:15:27:15:30 | **argv | test.cpp:22:45:22:52 | *userName | provenance | | +| test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | *command1 | provenance | | +| test.cpp:22:45:22:52 | *userName | test.cpp:22:13:22:20 | sprintf output argument | provenance | | +| test.cpp:47:21:47:26 | *call to getenv | test.cpp:50:35:50:43 | *envCflags | provenance | | +| test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | *command | provenance | | +| test.cpp:50:35:50:43 | *envCflags | test.cpp:50:11:50:17 | sprintf output argument | provenance | | +| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | *filename | provenance | | +| test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | *command | provenance | | +| test.cpp:64:20:64:27 | *filename | test.cpp:64:11:64:17 | strncat output argument | provenance | | +| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | *filename | provenance | | +| test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | *command | provenance | | +| test.cpp:84:20:84:27 | *filename | test.cpp:84:11:84:17 | strncat output argument | provenance | | +| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | *filename | provenance | | +| test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | *path | provenance | | +| test.cpp:93:17:93:24 | *filename | test.cpp:93:11:93:14 | strncat output argument | provenance | | +| test.cpp:106:20:106:38 | *call to getenv | test.cpp:107:33:107:36 | *path | provenance | | +| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:18:108:22 | *call to c_str | provenance | | +| test.cpp:107:33:107:36 | *path | test.cpp:107:31:107:31 | call to operator+ | provenance | | +| test.cpp:113:20:113:38 | *call to getenv | test.cpp:114:19:114:22 | *path | provenance | | +| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | provenance | | +| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | provenance | | +| test.cpp:114:17:114:17 | call to operator+ | test.cpp:114:10:114:23 | call to operator+ | provenance | | +| test.cpp:114:19:114:22 | *path | test.cpp:114:10:114:23 | call to operator+ | provenance | | +| test.cpp:114:19:114:22 | *path | test.cpp:114:17:114:17 | call to operator+ | provenance | | +| test.cpp:119:20:119:38 | *call to getenv | test.cpp:120:19:120:22 | *path | provenance | | +| test.cpp:120:17:120:17 | call to operator+ | test.cpp:120:10:120:30 | *call to data | provenance | | +| test.cpp:120:19:120:22 | *path | test.cpp:120:17:120:17 | call to operator+ | provenance | | +| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | *str | provenance | | +| test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | *command | provenance | | +| test.cpp:142:31:142:33 | *str | test.cpp:142:11:142:17 | sprintf output argument | provenance | | +| test.cpp:174:9:174:16 | fread output argument | test.cpp:177:20:177:27 | *filename | provenance | | +| test.cpp:174:9:174:16 | fread output argument | test.cpp:180:22:180:29 | *filename | provenance | | +| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | provenance | | +| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | provenance | | +| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | provenance | | +| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | provenance | | +| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | | +| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | | +| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | provenance | | +| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | provenance | | +| test.cpp:180:13:180:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | | +| test.cpp:180:22:180:29 | *filename | test.cpp:180:13:180:19 | strncat output argument | provenance | | +| test.cpp:186:47:186:54 | *filename | test.cpp:187:18:187:25 | *filename | provenance | | +| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | provenance | | +| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | provenance | | +| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | | +| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | | +| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | | +| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | | +| test.cpp:194:9:194:16 | fread output argument | test.cpp:196:26:196:33 | *filename | provenance | | +| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | provenance | | +| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | provenance | | +| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | provenance | | +| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | provenance | | +| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | provenance | | +| test.cpp:218:9:218:16 | fread output argument | test.cpp:220:19:220:26 | *filename | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | | +| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | | +| test.cpp:220:19:220:26 | *filename | test.cpp:220:19:220:26 | *filename | provenance | | nodes | test.cpp:15:27:15:30 | **argv | semmle.label | **argv | | test.cpp:22:13:22:20 | sprintf output argument | semmle.label | sprintf output argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected index 48d6c47181e..6a28ffc96ec 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-079/semmle/CgiXss/CgiXss.expected @@ -1,13 +1,13 @@ edges -| search.c:14:24:14:28 | *query | search.c:17:8:17:12 | *query | -| search.c:22:24:22:28 | *query | search.c:23:39:23:43 | *query | -| search.c:55:24:55:28 | *query | search.c:62:8:62:17 | *query_text | -| search.c:67:21:67:26 | *call to getenv | search.c:71:17:71:25 | *raw_query | -| search.c:67:21:67:26 | *call to getenv | search.c:73:17:73:25 | *raw_query | -| search.c:67:21:67:26 | *call to getenv | search.c:77:17:77:25 | *raw_query | -| search.c:71:17:71:25 | *raw_query | search.c:14:24:14:28 | *query | -| search.c:73:17:73:25 | *raw_query | search.c:22:24:22:28 | *query | -| search.c:77:17:77:25 | *raw_query | search.c:55:24:55:28 | *query | +| search.c:14:24:14:28 | *query | search.c:17:8:17:12 | *query | provenance | | +| search.c:22:24:22:28 | *query | search.c:23:39:23:43 | *query | provenance | | +| search.c:55:24:55:28 | *query | search.c:62:8:62:17 | *query_text | provenance | | +| search.c:67:21:67:26 | *call to getenv | search.c:71:17:71:25 | *raw_query | provenance | | +| search.c:67:21:67:26 | *call to getenv | search.c:73:17:73:25 | *raw_query | provenance | | +| search.c:67:21:67:26 | *call to getenv | search.c:77:17:77:25 | *raw_query | provenance | | +| search.c:71:17:71:25 | *raw_query | search.c:14:24:14:28 | *query | provenance | | +| search.c:73:17:73:25 | *raw_query | search.c:22:24:22:28 | *query | provenance | | +| search.c:77:17:77:25 | *raw_query | search.c:55:24:55:28 | *query | provenance | | nodes | search.c:14:24:14:28 | *query | semmle.label | *query | | search.c:17:8:17:12 | *query | semmle.label | *query | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected index ee375465396..2300fddefd7 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected @@ -1,12 +1,12 @@ edges -| test.c:14:27:14:30 | **argv | test.c:21:18:21:23 | *query1 | -| test.c:14:27:14:30 | **argv | test.c:35:16:35:23 | *userName | -| test.c:35:16:35:23 | *userName | test.c:40:25:40:32 | *username | -| test.c:38:7:38:20 | **globalUsername | test.c:51:18:51:23 | *query1 | -| test.c:40:25:40:32 | *username | test.c:38:7:38:20 | **globalUsername | -| test.c:75:8:75:16 | gets output argument | test.c:76:17:76:25 | *userInput | -| test.c:75:8:75:16 | gets output argument | test.c:77:20:77:28 | *userInput | -| test.cpp:39:27:39:30 | **argv | test.cpp:43:27:43:33 | *access to array | +| test.c:14:27:14:30 | **argv | test.c:21:18:21:23 | *query1 | provenance | | +| test.c:14:27:14:30 | **argv | test.c:35:16:35:23 | *userName | provenance | | +| test.c:35:16:35:23 | *userName | test.c:40:25:40:32 | *username | provenance | | +| test.c:38:7:38:20 | **globalUsername | test.c:51:18:51:23 | *query1 | provenance | | +| test.c:40:25:40:32 | *username | test.c:38:7:38:20 | **globalUsername | provenance | | +| test.c:75:8:75:16 | gets output argument | test.c:76:17:76:25 | *userInput | provenance | | +| test.c:75:8:75:16 | gets output argument | test.c:77:20:77:28 | *userInput | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:43:27:43:33 | *access to array | provenance | | nodes | test.c:14:27:14:30 | **argv | semmle.label | **argv | | test.c:21:18:21:23 | *query1 | semmle.label | *query1 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected index 86ecf2ea37c..d49af567a73 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/SAMATE/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -1,7 +1,7 @@ edges -| test.cpp:37:73:37:76 | *data | test.cpp:43:32:43:35 | *data | -| test.cpp:64:30:64:35 | *call to getenv | test.cpp:73:24:73:27 | *data | -| test.cpp:73:24:73:27 | *data | test.cpp:37:73:37:76 | *data | +| test.cpp:37:73:37:76 | *data | test.cpp:43:32:43:35 | *data | provenance | | +| test.cpp:64:30:64:35 | *call to getenv | test.cpp:73:24:73:27 | *data | provenance | | +| test.cpp:73:24:73:27 | *data | test.cpp:37:73:37:76 | *data | provenance | | nodes | test.cpp:37:73:37:76 | *data | semmle.label | *data | | test.cpp:43:32:43:35 | *data | semmle.label | *data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected index 9e10928ecda..3f94fe17319 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-114/semmle/UncontrolledProcessOperation/UncontrolledProcessOperation.expected @@ -1,16 +1,16 @@ edges -| test.cpp:24:30:24:36 | *command | test.cpp:26:10:26:16 | *command | -| test.cpp:29:30:29:36 | *command | test.cpp:31:10:31:16 | *command | -| test.cpp:42:18:42:34 | *call to getenv | test.cpp:24:30:24:36 | *command | -| test.cpp:43:18:43:34 | *call to getenv | test.cpp:29:30:29:36 | *command | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:62:10:62:15 | *buffer | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:63:10:63:13 | *data | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:64:10:64:16 | *dataref | -| test.cpp:56:12:56:17 | fgets output argument | test.cpp:65:10:65:14 | *data2 | -| test.cpp:76:12:76:17 | fgets output argument | test.cpp:78:10:78:15 | *buffer | -| test.cpp:98:17:98:22 | recv output argument | test.cpp:99:15:99:20 | *buffer | -| test.cpp:106:17:106:22 | recv output argument | test.cpp:107:15:107:20 | *buffer | -| test.cpp:113:8:113:12 | *call to fgets | test.cpp:114:9:114:11 | *ptr | +| test.cpp:24:30:24:36 | *command | test.cpp:26:10:26:16 | *command | provenance | | +| test.cpp:29:30:29:36 | *command | test.cpp:31:10:31:16 | *command | provenance | | +| test.cpp:42:18:42:34 | *call to getenv | test.cpp:24:30:24:36 | *command | provenance | | +| test.cpp:43:18:43:34 | *call to getenv | test.cpp:29:30:29:36 | *command | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:62:10:62:15 | *buffer | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:63:10:63:13 | *data | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:64:10:64:16 | *dataref | provenance | | +| test.cpp:56:12:56:17 | fgets output argument | test.cpp:65:10:65:14 | *data2 | provenance | | +| test.cpp:76:12:76:17 | fgets output argument | test.cpp:78:10:78:15 | *buffer | provenance | | +| test.cpp:98:17:98:22 | recv output argument | test.cpp:99:15:99:20 | *buffer | provenance | | +| test.cpp:106:17:106:22 | recv output argument | test.cpp:107:15:107:20 | *buffer | provenance | | +| test.cpp:113:8:113:12 | *call to fgets | test.cpp:114:9:114:11 | *ptr | provenance | | nodes | test.cpp:24:30:24:36 | *command | semmle.label | *command | | test.cpp:26:10:26:16 | *command | semmle.label | *command | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected index 499d34d0d40..21e6445c8fd 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected @@ -1,62 +1,62 @@ edges -| test.cpp:16:11:16:21 | **mk_string_t [string] | test.cpp:39:21:39:31 | *call to mk_string_t [string] | -| test.cpp:18:5:18:7 | *str [post update] [string] | test.cpp:19:5:19:7 | *str [string] | -| test.cpp:18:5:18:30 | ... = ... | test.cpp:18:5:18:7 | *str [post update] [string] | -| test.cpp:18:19:18:24 | call to malloc | test.cpp:18:5:18:30 | ... = ... | -| test.cpp:19:5:19:7 | *str [string] | test.cpp:16:11:16:21 | **mk_string_t [string] | -| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:42:13:42:15 | *str [string] | -| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:72:17:72:19 | *str [string] | -| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:80:17:80:19 | *str [string] | -| test.cpp:42:13:42:15 | *str [string] | test.cpp:42:18:42:23 | string | -| test.cpp:72:17:72:19 | *str [string] | test.cpp:72:22:72:27 | string | -| test.cpp:80:17:80:19 | *str [string] | test.cpp:80:22:80:27 | string | -| test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | -| test.cpp:90:5:90:7 | *str [post update] [string] | test.cpp:91:5:91:7 | *str [string] | -| test.cpp:90:5:90:34 | ... = ... | test.cpp:90:5:90:7 | *str [post update] [string] | -| test.cpp:90:19:90:24 | call to malloc | test.cpp:90:5:90:34 | ... = ... | -| test.cpp:91:5:91:7 | *str [string] | test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | -| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:99:13:99:15 | *str [string] | -| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:129:17:129:19 | *str [string] | -| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:137:17:137:19 | *str [string] | -| test.cpp:99:13:99:15 | *str [string] | test.cpp:99:18:99:23 | string | -| test.cpp:129:17:129:19 | *str [string] | test.cpp:129:22:129:27 | string | -| test.cpp:137:17:137:19 | *str [string] | test.cpp:137:22:137:27 | string | -| test.cpp:147:5:147:7 | *str [post update] [string] | test.cpp:148:5:148:7 | *str [string] | -| test.cpp:147:5:147:34 | ... = ... | test.cpp:147:5:147:7 | *str [post update] [string] | -| test.cpp:147:19:147:24 | call to malloc | test.cpp:147:5:147:34 | ... = ... | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:152:13:152:15 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:154:13:154:15 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:156:13:156:15 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:175:17:175:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:187:17:187:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:195:17:195:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:199:17:199:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:203:17:203:19 | *str [string] | -| test.cpp:148:5:148:7 | *str [string] | test.cpp:207:17:207:19 | *str [string] | -| test.cpp:152:13:152:15 | *str [string] | test.cpp:152:18:152:23 | string | -| test.cpp:154:13:154:15 | *str [string] | test.cpp:154:18:154:23 | string | -| test.cpp:156:13:156:15 | *str [string] | test.cpp:156:18:156:23 | string | -| test.cpp:175:17:175:19 | *str [string] | test.cpp:175:22:175:27 | string | -| test.cpp:187:17:187:19 | *str [string] | test.cpp:187:22:187:27 | string | -| test.cpp:195:17:195:19 | *str [string] | test.cpp:195:22:195:27 | string | -| test.cpp:199:17:199:19 | *str [string] | test.cpp:199:22:199:27 | string | -| test.cpp:203:17:203:19 | *str [string] | test.cpp:203:22:203:27 | string | -| test.cpp:207:17:207:19 | *str [string] | test.cpp:207:22:207:27 | string | -| test.cpp:214:24:214:24 | p | test.cpp:216:10:216:10 | p | -| test.cpp:220:27:220:54 | call to malloc | test.cpp:222:15:222:20 | buffer | -| test.cpp:222:15:222:20 | buffer | test.cpp:214:24:214:24 | p | -| test.cpp:228:27:228:54 | call to malloc | test.cpp:232:10:232:15 | buffer | -| test.cpp:235:40:235:45 | buffer | test.cpp:236:5:236:26 | ... = ... | -| test.cpp:236:5:236:26 | ... = ... | test.cpp:236:5:236:9 | *p_str [post update] [string] | -| test.cpp:241:20:241:38 | call to malloc | test.cpp:242:22:242:27 | buffer | -| test.cpp:242:16:242:19 | set_string output argument [string] | test.cpp:243:12:243:14 | *str [string] | -| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | -| test.cpp:242:22:242:27 | buffer | test.cpp:242:16:242:19 | set_string output argument [string] | -| test.cpp:243:12:243:14 | *str [string] | test.cpp:243:12:243:21 | string | -| test.cpp:249:14:249:33 | call to my_alloc | test.cpp:250:12:250:12 | p | -| test.cpp:256:9:256:25 | call to malloc | test.cpp:257:12:257:12 | p | -| test.cpp:262:15:262:30 | call to malloc | test.cpp:266:12:266:12 | p | -| test.cpp:264:13:264:30 | call to malloc | test.cpp:266:12:266:12 | p | +| test.cpp:16:11:16:21 | **mk_string_t [string] | test.cpp:39:21:39:31 | *call to mk_string_t [string] | provenance | | +| test.cpp:18:5:18:7 | *str [post update] [string] | test.cpp:19:5:19:7 | *str [string] | provenance | | +| test.cpp:18:5:18:30 | ... = ... | test.cpp:18:5:18:7 | *str [post update] [string] | provenance | | +| test.cpp:18:19:18:24 | call to malloc | test.cpp:18:5:18:30 | ... = ... | provenance | | +| test.cpp:19:5:19:7 | *str [string] | test.cpp:16:11:16:21 | **mk_string_t [string] | provenance | | +| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:42:13:42:15 | *str [string] | provenance | | +| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:72:17:72:19 | *str [string] | provenance | | +| test.cpp:39:21:39:31 | *call to mk_string_t [string] | test.cpp:80:17:80:19 | *str [string] | provenance | | +| test.cpp:42:13:42:15 | *str [string] | test.cpp:42:18:42:23 | string | provenance | | +| test.cpp:72:17:72:19 | *str [string] | test.cpp:72:22:72:27 | string | provenance | | +| test.cpp:80:17:80:19 | *str [string] | test.cpp:80:22:80:27 | string | provenance | | +| test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | provenance | | +| test.cpp:90:5:90:7 | *str [post update] [string] | test.cpp:91:5:91:7 | *str [string] | provenance | | +| test.cpp:90:5:90:34 | ... = ... | test.cpp:90:5:90:7 | *str [post update] [string] | provenance | | +| test.cpp:90:19:90:24 | call to malloc | test.cpp:90:5:90:34 | ... = ... | provenance | | +| test.cpp:91:5:91:7 | *str [string] | test.cpp:88:11:88:30 | **mk_string_t_plus_one [string] | provenance | | +| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:99:13:99:15 | *str [string] | provenance | | +| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:129:17:129:19 | *str [string] | provenance | | +| test.cpp:96:21:96:40 | *call to mk_string_t_plus_one [string] | test.cpp:137:17:137:19 | *str [string] | provenance | | +| test.cpp:99:13:99:15 | *str [string] | test.cpp:99:18:99:23 | string | provenance | | +| test.cpp:129:17:129:19 | *str [string] | test.cpp:129:22:129:27 | string | provenance | | +| test.cpp:137:17:137:19 | *str [string] | test.cpp:137:22:137:27 | string | provenance | | +| test.cpp:147:5:147:7 | *str [post update] [string] | test.cpp:148:5:148:7 | *str [string] | provenance | | +| test.cpp:147:5:147:34 | ... = ... | test.cpp:147:5:147:7 | *str [post update] [string] | provenance | | +| test.cpp:147:19:147:24 | call to malloc | test.cpp:147:5:147:34 | ... = ... | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:152:13:152:15 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:154:13:154:15 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:156:13:156:15 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:175:17:175:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:187:17:187:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:195:17:195:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:199:17:199:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:203:17:203:19 | *str [string] | provenance | | +| test.cpp:148:5:148:7 | *str [string] | test.cpp:207:17:207:19 | *str [string] | provenance | | +| test.cpp:152:13:152:15 | *str [string] | test.cpp:152:18:152:23 | string | provenance | | +| test.cpp:154:13:154:15 | *str [string] | test.cpp:154:18:154:23 | string | provenance | | +| test.cpp:156:13:156:15 | *str [string] | test.cpp:156:18:156:23 | string | provenance | | +| test.cpp:175:17:175:19 | *str [string] | test.cpp:175:22:175:27 | string | provenance | | +| test.cpp:187:17:187:19 | *str [string] | test.cpp:187:22:187:27 | string | provenance | | +| test.cpp:195:17:195:19 | *str [string] | test.cpp:195:22:195:27 | string | provenance | | +| test.cpp:199:17:199:19 | *str [string] | test.cpp:199:22:199:27 | string | provenance | | +| test.cpp:203:17:203:19 | *str [string] | test.cpp:203:22:203:27 | string | provenance | | +| test.cpp:207:17:207:19 | *str [string] | test.cpp:207:22:207:27 | string | provenance | | +| test.cpp:214:24:214:24 | p | test.cpp:216:10:216:10 | p | provenance | | +| test.cpp:220:27:220:54 | call to malloc | test.cpp:222:15:222:20 | buffer | provenance | | +| test.cpp:222:15:222:20 | buffer | test.cpp:214:24:214:24 | p | provenance | | +| test.cpp:228:27:228:54 | call to malloc | test.cpp:232:10:232:15 | buffer | provenance | | +| test.cpp:235:40:235:45 | buffer | test.cpp:236:5:236:26 | ... = ... | provenance | | +| test.cpp:236:5:236:26 | ... = ... | test.cpp:236:5:236:9 | *p_str [post update] [string] | provenance | | +| test.cpp:241:20:241:38 | call to malloc | test.cpp:242:22:242:27 | buffer | provenance | | +| test.cpp:242:16:242:19 | set_string output argument [string] | test.cpp:243:12:243:14 | *str [string] | provenance | | +| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | provenance | | +| test.cpp:242:22:242:27 | buffer | test.cpp:242:16:242:19 | set_string output argument [string] | provenance | | +| test.cpp:243:12:243:14 | *str [string] | test.cpp:243:12:243:21 | string | provenance | | +| test.cpp:249:14:249:33 | call to my_alloc | test.cpp:250:12:250:12 | p | provenance | | +| test.cpp:256:9:256:25 | call to malloc | test.cpp:257:12:257:12 | p | provenance | | +| test.cpp:262:15:262:30 | call to malloc | test.cpp:266:12:266:12 | p | provenance | | +| test.cpp:264:13:264:30 | call to malloc | test.cpp:266:12:266:12 | p | provenance | | nodes | test.cpp:16:11:16:21 | **mk_string_t [string] | semmle.label | **mk_string_t [string] | | test.cpp:18:5:18:7 | *str [post update] [string] | semmle.label | *str [post update] [string] | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected index f911d3b3da1..fa6e1c36b53 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/OverflowDestination.expected @@ -1,14 +1,14 @@ edges -| main.cpp:6:27:6:30 | **argv | main.cpp:7:33:7:36 | **argv | -| main.cpp:7:33:7:36 | **argv | overflowdestination.cpp:23:45:23:48 | **argv | -| overflowdestination.cpp:23:45:23:48 | **argv | overflowdestination.cpp:30:17:30:20 | *arg1 | -| overflowdestination.cpp:43:8:43:10 | fgets output argument | overflowdestination.cpp:46:15:46:17 | *src | -| overflowdestination.cpp:50:52:50:54 | *src | overflowdestination.cpp:53:15:53:17 | *src | -| overflowdestination.cpp:57:52:57:54 | *src | overflowdestination.cpp:64:16:64:19 | *src2 | -| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:75:30:75:32 | *src | -| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:76:30:76:32 | *src | -| overflowdestination.cpp:75:30:75:32 | *src | overflowdestination.cpp:50:52:50:54 | *src | -| overflowdestination.cpp:76:30:76:32 | *src | overflowdestination.cpp:57:52:57:54 | *src | +| main.cpp:6:27:6:30 | **argv | main.cpp:7:33:7:36 | **argv | provenance | | +| main.cpp:7:33:7:36 | **argv | overflowdestination.cpp:23:45:23:48 | **argv | provenance | | +| overflowdestination.cpp:23:45:23:48 | **argv | overflowdestination.cpp:30:17:30:20 | *arg1 | provenance | | +| overflowdestination.cpp:43:8:43:10 | fgets output argument | overflowdestination.cpp:46:15:46:17 | *src | provenance | | +| overflowdestination.cpp:50:52:50:54 | *src | overflowdestination.cpp:53:15:53:17 | *src | provenance | | +| overflowdestination.cpp:57:52:57:54 | *src | overflowdestination.cpp:64:16:64:19 | *src2 | provenance | | +| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:75:30:75:32 | *src | provenance | | +| overflowdestination.cpp:73:8:73:10 | fgets output argument | overflowdestination.cpp:76:30:76:32 | *src | provenance | | +| overflowdestination.cpp:75:30:75:32 | *src | overflowdestination.cpp:50:52:50:54 | *src | provenance | | +| overflowdestination.cpp:76:30:76:32 | *src | overflowdestination.cpp:57:52:57:54 | *src | provenance | | nodes | main.cpp:6:27:6:30 | **argv | semmle.label | **argv | | main.cpp:7:33:7:36 | **argv | semmle.label | **argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected index ac4b606898d..c5cfefdbff0 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/semmle/tests/UnboundedWrite.expected @@ -1,17 +1,17 @@ edges -| main.cpp:6:27:6:30 | **argv | main.cpp:10:20:10:23 | **argv | -| main.cpp:10:20:10:23 | **argv | tests.cpp:657:32:657:35 | **argv | -| tests.cpp:613:19:613:24 | *source | tests.cpp:615:17:615:22 | *source | -| tests.cpp:622:19:622:24 | *source | tests.cpp:625:2:625:16 | *... = ... | -| tests.cpp:625:2:625:2 | *s [post update] [*home] | tests.cpp:628:14:628:14 | *s [*home] | -| tests.cpp:625:2:625:16 | *... = ... | tests.cpp:625:2:625:2 | *s [post update] [*home] | -| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:14:628:19 | *home | -| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:16:628:19 | *home | -| tests.cpp:628:16:628:19 | *home | tests.cpp:628:14:628:19 | *home | -| tests.cpp:657:32:657:35 | **argv | tests.cpp:682:9:682:15 | *access to array | -| tests.cpp:657:32:657:35 | **argv | tests.cpp:683:9:683:15 | *access to array | -| tests.cpp:682:9:682:15 | *access to array | tests.cpp:613:19:613:24 | *source | -| tests.cpp:683:9:683:15 | *access to array | tests.cpp:622:19:622:24 | *source | +| main.cpp:6:27:6:30 | **argv | main.cpp:10:20:10:23 | **argv | provenance | | +| main.cpp:10:20:10:23 | **argv | tests.cpp:657:32:657:35 | **argv | provenance | | +| tests.cpp:613:19:613:24 | *source | tests.cpp:615:17:615:22 | *source | provenance | | +| tests.cpp:622:19:622:24 | *source | tests.cpp:625:2:625:16 | *... = ... | provenance | | +| tests.cpp:625:2:625:2 | *s [post update] [*home] | tests.cpp:628:14:628:14 | *s [*home] | provenance | | +| tests.cpp:625:2:625:16 | *... = ... | tests.cpp:625:2:625:2 | *s [post update] [*home] | provenance | | +| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:14:628:19 | *home | provenance | | +| tests.cpp:628:14:628:14 | *s [*home] | tests.cpp:628:16:628:19 | *home | provenance | | +| tests.cpp:628:16:628:19 | *home | tests.cpp:628:14:628:19 | *home | provenance | | +| tests.cpp:657:32:657:35 | **argv | tests.cpp:682:9:682:15 | *access to array | provenance | | +| tests.cpp:657:32:657:35 | **argv | tests.cpp:683:9:683:15 | *access to array | provenance | | +| tests.cpp:682:9:682:15 | *access to array | tests.cpp:613:19:613:24 | *source | provenance | | +| tests.cpp:683:9:683:15 | *access to array | tests.cpp:622:19:622:24 | *source | provenance | | nodes | main.cpp:6:27:6:30 | **argv | semmle.label | **argv | | main.cpp:10:20:10:23 | **argv | semmle.label | **argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected index 49c6a7799e7..0ebcbb8cde4 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-120/semmle/tests/UnboundedWrite.expected @@ -1,7 +1,7 @@ edges -| tests.c:16:26:16:29 | **argv | tests.c:28:22:28:28 | *access to array | -| tests.c:16:26:16:29 | **argv | tests.c:29:28:29:34 | *access to array | -| tests.c:16:26:16:29 | **argv | tests.c:34:10:34:16 | *access to array | +| tests.c:16:26:16:29 | **argv | tests.c:28:22:28:28 | *access to array | provenance | | +| tests.c:16:26:16:29 | **argv | tests.c:29:28:29:34 | *access to array | provenance | | +| tests.c:16:26:16:29 | **argv | tests.c:34:10:34:16 | *access to array | provenance | | nodes | tests.c:16:26:16:29 | **argv | semmle.label | **argv | | tests.c:28:22:28:28 | *access to array | semmle.label | *access to array | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected index 35d6e58f458..10286da7a38 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/SAMATE/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected @@ -1,5 +1,5 @@ edges -| CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:30:19:30:29 | fgets output argument | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:52:20:52:23 | data | +| CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:30:19:30:29 | fgets output argument | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:52:20:52:23 | data | provenance | | nodes | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:30:19:30:29 | fgets output argument | semmle.label | fgets output argument | | CWE122_Heap_Based_Buffer_Overflow__c_CWE129_fgets_01.c:52:20:52:23 | data | semmle.label | data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected index f766aabda57..141d1351540 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-129/semmle/ImproperArrayIndexValidation/ImproperArrayIndexValidation.expected @@ -1,13 +1,13 @@ edges -| test1.c:7:26:7:29 | **argv | test1.c:9:9:9:9 | i | -| test1.c:7:26:7:29 | **argv | test1.c:11:9:11:9 | i | -| test1.c:7:26:7:29 | **argv | test1.c:13:9:13:9 | i | -| test1.c:9:9:9:9 | i | test1.c:16:16:16:16 | i | -| test1.c:11:9:11:9 | i | test1.c:32:16:32:16 | i | -| test1.c:13:9:13:9 | i | test1.c:48:16:48:16 | i | -| test1.c:16:16:16:16 | i | test1.c:18:16:18:16 | i | -| test1.c:32:16:32:16 | i | test1.c:33:11:33:11 | i | -| test1.c:48:16:48:16 | i | test1.c:53:15:53:15 | j | +| test1.c:7:26:7:29 | **argv | test1.c:9:9:9:9 | i | provenance | | +| test1.c:7:26:7:29 | **argv | test1.c:11:9:11:9 | i | provenance | | +| test1.c:7:26:7:29 | **argv | test1.c:13:9:13:9 | i | provenance | | +| test1.c:9:9:9:9 | i | test1.c:16:16:16:16 | i | provenance | | +| test1.c:11:9:11:9 | i | test1.c:32:16:32:16 | i | provenance | | +| test1.c:13:9:13:9 | i | test1.c:48:16:48:16 | i | provenance | | +| test1.c:16:16:16:16 | i | test1.c:18:16:18:16 | i | provenance | | +| test1.c:32:16:32:16 | i | test1.c:33:11:33:11 | i | provenance | | +| test1.c:48:16:48:16 | i | test1.c:53:15:53:15 | j | provenance | | nodes | test1.c:7:26:7:29 | **argv | semmle.label | **argv | | test1.c:9:9:9:9 | i | semmle.label | i | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected index 49b39709080..a977543a8ec 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/SAMATE/UncontrolledFormatString.expected @@ -1,7 +1,7 @@ edges -| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | *data | -| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | char_console_fprintf_01_bad.c:49:21:49:24 | *data | -| char_environment_fprintf_01_bad.c:27:30:27:35 | *call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | *data | +| char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | *data | provenance | | +| char_console_fprintf_01_bad.c:30:23:30:35 | fgets output argument | char_console_fprintf_01_bad.c:49:21:49:24 | *data | provenance | | +| char_environment_fprintf_01_bad.c:27:30:27:35 | *call to getenv | char_environment_fprintf_01_bad.c:36:21:36:24 | *data | provenance | | nodes | char_connect_socket_w32_vsnprintf_01_bad.c:94:46:94:69 | recv output argument | semmle.label | recv output argument | | char_connect_socket_w32_vsnprintf_01_bad.c:125:15:125:18 | *data | semmle.label | *data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected index 2c2db139baf..8f09b2ee7f5 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/argv/argvLocal.expected @@ -1,28 +1,28 @@ edges -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:95:9:95:15 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:96:15:96:21 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:101:9:101:10 | *i1 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:102:15:102:16 | *i1 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:106:9:106:13 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:107:15:107:19 | *access to array | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:110:9:110:11 | ** ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:111:15:111:17 | ** ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:116:9:116:10 | *i3 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:117:15:117:16 | *i3 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:121:9:121:10 | *i4 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:122:15:122:16 | *i4 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:127:9:127:10 | *i5 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:128:15:128:16 | *i5 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:131:9:131:14 | *... + ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:132:15:132:20 | *... + ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:135:9:135:12 | *... ++ | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:136:15:136:18 | *-- ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:139:9:139:26 | *... ? ... : ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:140:15:140:32 | *... ? ... : ... | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:144:9:144:10 | *i7 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:145:15:145:16 | *i7 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:150:9:150:10 | *i8 | -| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:151:15:151:16 | *i8 | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:95:9:95:15 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:96:15:96:21 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:101:9:101:10 | *i1 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:102:15:102:16 | *i1 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:106:9:106:13 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:107:15:107:19 | *access to array | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:110:9:110:11 | ** ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:111:15:111:17 | ** ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:116:9:116:10 | *i3 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:117:15:117:16 | *i3 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:121:9:121:10 | *i4 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:122:15:122:16 | *i4 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:127:9:127:10 | *i5 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:128:15:128:16 | *i5 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:131:9:131:14 | *... + ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:132:15:132:20 | *... + ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:135:9:135:12 | *... ++ | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:136:15:136:18 | *-- ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:139:9:139:26 | *... ? ... : ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:140:15:140:32 | *... ? ... : ... | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:144:9:144:10 | *i7 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:145:15:145:16 | *i7 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:150:9:150:10 | *i8 | provenance | | +| argvLocal.c:13:27:13:30 | **argv | argvLocal.c:151:15:151:16 | *i8 | provenance | | nodes | argvLocal.c:13:27:13:30 | **argv | semmle.label | **argv | | argvLocal.c:95:9:95:15 | *access to array | semmle.label | *access to array | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected index 6a4d7c8d7a9..bc0712a43e0 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/NonConstantFormat.expected @@ -1,4 +1,3 @@ -| consts.cpp:81:9:81:10 | c8 | The format string argument to printf should be constant to prevent security issues and other potential errors. | | consts.cpp:86:9:86:10 | v1 | The format string argument to printf should be constant to prevent security issues and other potential errors. | | consts.cpp:91:9:91:10 | v2 | The format string argument to printf should be constant to prevent security issues and other potential errors. | | consts.cpp:95:9:95:10 | v3 | The format string argument to printf should be constant to prevent security issues and other potential errors. | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/consts.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/consts.cpp index d9be30ee020..7242bedc133 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/consts.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/consts/consts.cpp @@ -75,7 +75,7 @@ void a() { // GOOD: constFuncToArray() always returns a value from gc1, which is always constant printf(constFuncToArray(0)); - // BAD: format string is not constant + // BAD: format string is not constant [NOT DETECTED] char c8[10]; sprintf(c8, "%d", 1); printf(c8); diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected index d8ccacc88cd..20ae8a4b9ba 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/funcs/funcsLocal.expected @@ -1,12 +1,12 @@ edges -| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:17:9:17:10 | *i1 | -| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:58:9:58:10 | *e1 | -| funcsLocal.c:26:8:26:9 | fgets output argument | funcsLocal.c:27:9:27:10 | *i3 | -| funcsLocal.c:31:13:31:17 | *call to fgets | funcsLocal.c:32:9:32:10 | *i4 | -| funcsLocal.c:36:7:36:8 | gets output argument | funcsLocal.c:37:9:37:10 | *i5 | -| funcsLocal.c:41:13:41:16 | *call to gets | funcsLocal.c:42:9:42:10 | *i6 | -| funcsLocal.c:46:7:46:9 | gets output argument | funcsLocal.c:47:9:47:11 | ** ... | -| funcsLocal.c:52:8:52:11 | *call to gets | funcsLocal.c:53:9:53:11 | ** ... | +| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:17:9:17:10 | *i1 | provenance | | +| funcsLocal.c:16:8:16:9 | fread output argument | funcsLocal.c:58:9:58:10 | *e1 | provenance | | +| funcsLocal.c:26:8:26:9 | fgets output argument | funcsLocal.c:27:9:27:10 | *i3 | provenance | | +| funcsLocal.c:31:13:31:17 | *call to fgets | funcsLocal.c:32:9:32:10 | *i4 | provenance | | +| funcsLocal.c:36:7:36:8 | gets output argument | funcsLocal.c:37:9:37:10 | *i5 | provenance | | +| funcsLocal.c:41:13:41:16 | *call to gets | funcsLocal.c:42:9:42:10 | *i6 | provenance | | +| funcsLocal.c:46:7:46:9 | gets output argument | funcsLocal.c:47:9:47:11 | ** ... | provenance | | +| funcsLocal.c:52:8:52:11 | *call to gets | funcsLocal.c:53:9:53:11 | ** ... | provenance | | nodes | funcsLocal.c:16:8:16:9 | fread output argument | semmle.label | fread output argument | | funcsLocal.c:17:9:17:10 | *i1 | semmle.label | *i1 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected index 683d57b5b75..087a0a88662 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/globalVars/UncontrolledFormatString.expected @@ -1,15 +1,15 @@ edges -| globalVars.c:8:7:8:10 | **copy | globalVars.c:27:9:27:12 | *copy | -| globalVars.c:8:7:8:10 | **copy | globalVars.c:30:15:30:18 | *copy | -| globalVars.c:8:7:8:10 | **copy | globalVars.c:35:11:35:14 | *copy | -| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:38:9:38:13 | *copy2 | -| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:41:15:41:19 | *copy2 | -| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:50:9:50:13 | *copy2 | -| globalVars.c:11:22:11:25 | **argv | globalVars.c:8:7:8:10 | **copy | -| globalVars.c:15:21:15:23 | *val | globalVars.c:9:7:9:11 | **copy2 | -| globalVars.c:23:27:23:30 | **argv | globalVars.c:24:11:24:14 | **argv | -| globalVars.c:24:11:24:14 | **argv | globalVars.c:11:22:11:25 | **argv | -| globalVars.c:35:11:35:14 | *copy | globalVars.c:15:21:15:23 | *val | +| globalVars.c:8:7:8:10 | **copy | globalVars.c:27:9:27:12 | *copy | provenance | | +| globalVars.c:8:7:8:10 | **copy | globalVars.c:30:15:30:18 | *copy | provenance | | +| globalVars.c:8:7:8:10 | **copy | globalVars.c:35:11:35:14 | *copy | provenance | | +| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:38:9:38:13 | *copy2 | provenance | | +| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:41:15:41:19 | *copy2 | provenance | | +| globalVars.c:9:7:9:11 | **copy2 | globalVars.c:50:9:50:13 | *copy2 | provenance | | +| globalVars.c:11:22:11:25 | **argv | globalVars.c:8:7:8:10 | **copy | provenance | | +| globalVars.c:15:21:15:23 | *val | globalVars.c:9:7:9:11 | **copy2 | provenance | | +| globalVars.c:23:27:23:30 | **argv | globalVars.c:24:11:24:14 | **argv | provenance | | +| globalVars.c:24:11:24:14 | **argv | globalVars.c:11:22:11:25 | **argv | provenance | | +| globalVars.c:35:11:35:14 | *copy | globalVars.c:15:21:15:23 | *val | provenance | | nodes | globalVars.c:8:7:8:10 | **copy | semmle.label | **copy | | globalVars.c:9:7:9:11 | **copy2 | semmle.label | **copy2 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected index 4bcbb79bf7b..6e860511fb2 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-134/semmle/ifs/ifs.expected @@ -1,15 +1,15 @@ edges -| ifs.c:16:27:16:30 | **argv | ifs.c:62:9:62:10 | *c7 | -| ifs.c:16:27:16:30 | **argv | ifs.c:69:9:69:10 | *c8 | -| ifs.c:16:27:16:30 | **argv | ifs.c:75:9:75:10 | *i1 | -| ifs.c:16:27:16:30 | **argv | ifs.c:81:9:81:10 | *i2 | -| ifs.c:16:27:16:30 | **argv | ifs.c:87:9:87:10 | *i3 | -| ifs.c:16:27:16:30 | **argv | ifs.c:93:9:93:10 | *i4 | -| ifs.c:16:27:16:30 | **argv | ifs.c:99:9:99:10 | *i5 | -| ifs.c:16:27:16:30 | **argv | ifs.c:106:9:106:10 | *i6 | -| ifs.c:16:27:16:30 | **argv | ifs.c:112:9:112:10 | *i7 | -| ifs.c:16:27:16:30 | **argv | ifs.c:118:9:118:10 | *i8 | -| ifs.c:16:27:16:30 | **argv | ifs.c:124:9:124:10 | *i9 | +| ifs.c:16:27:16:30 | **argv | ifs.c:62:9:62:10 | *c7 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:69:9:69:10 | *c8 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:75:9:75:10 | *i1 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:81:9:81:10 | *i2 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:87:9:87:10 | *i3 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:93:9:93:10 | *i4 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:99:9:99:10 | *i5 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:106:9:106:10 | *i6 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:112:9:112:10 | *i7 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:118:9:118:10 | *i8 | provenance | | +| ifs.c:16:27:16:30 | **argv | ifs.c:124:9:124:10 | *i9 | provenance | | nodes | ifs.c:16:27:16:30 | **argv | semmle.label | **argv | | ifs.c:62:9:62:10 | *c7 | semmle.label | *c7 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected index d266afbe445..a2221ec2fd3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticTainted.expected @@ -1,5 +1,5 @@ edges -| examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | +| examples.cpp:63:26:63:30 | fscanf output argument | examples.cpp:66:11:66:14 | data | provenance | | nodes | examples.cpp:63:26:63:30 | fscanf output argument | semmle.label | fscanf output argument | | examples.cpp:66:11:66:14 | data | semmle.label | data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected index 49766a8f25d..7a6244f1d46 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/SAMATE/ArithmeticUncontrolled.expected @@ -1,16 +1,16 @@ edges -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | -| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:22:26:22:33 | call to rand | examples.cpp:25:31:25:34 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | +| examples.cpp:35:26:35:33 | call to rand | examples.cpp:38:9:38:12 | data | provenance | | nodes | examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | | examples.cpp:22:26:22:33 | call to rand | semmle.label | call to rand | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected index 8d456343b87..ef46be9659a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/ArithmeticUncontrolled/ArithmeticUncontrolled.expected @@ -1,36 +1,36 @@ edges -| test.c:18:13:18:16 | call to rand | test.c:21:17:21:17 | r | -| test.c:34:13:34:18 | call to rand | test.c:35:5:35:5 | r | -| test.c:44:13:44:16 | call to rand | test.c:45:5:45:5 | r | -| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | -| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | -| test.c:81:14:81:17 | call to rand | test.c:83:9:83:9 | r | -| test.c:81:23:81:26 | call to rand | test.c:83:9:83:9 | r | -| test.c:125:13:125:16 | call to rand | test.c:127:9:127:9 | r | -| test.c:131:13:131:16 | call to rand | test.c:133:5:133:5 | r | -| test.c:137:13:137:16 | call to rand | test.c:139:10:139:10 | r | -| test.c:155:22:155:27 | call to rand | test.c:157:9:157:9 | r | -| test.cpp:6:5:6:12 | *get_rand | test.cpp:24:11:24:18 | call to get_rand | -| test.cpp:8:9:8:12 | call to rand | test.cpp:6:5:6:12 | *get_rand | -| test.cpp:11:21:11:24 | *dest | test.cpp:30:13:30:14 | get_rand2 output argument | -| test.cpp:13:10:13:13 | call to rand | test.cpp:11:21:11:24 | *dest | -| test.cpp:16:21:16:24 | *dest | test.cpp:36:13:36:13 | get_rand3 output argument | -| test.cpp:18:9:18:12 | call to rand | test.cpp:16:21:16:24 | *dest | -| test.cpp:24:11:24:18 | call to get_rand | test.cpp:25:7:25:7 | r | -| test.cpp:30:13:30:14 | get_rand2 output argument | test.cpp:31:7:31:7 | r | -| test.cpp:36:13:36:13 | get_rand3 output argument | test.cpp:37:7:37:7 | r | -| test.cpp:86:10:86:13 | call to rand | test.cpp:90:10:90:10 | x | -| test.cpp:98:10:98:13 | call to rand | test.cpp:102:10:102:10 | x | -| test.cpp:137:10:137:13 | call to rand | test.cpp:146:9:146:9 | y | -| test.cpp:151:10:151:13 | call to rand | test.cpp:154:10:154:10 | b | -| test.cpp:169:11:169:14 | call to rand | test.cpp:171:11:171:16 | y | -| test.cpp:189:10:189:13 | call to rand | test.cpp:196:7:196:7 | x | -| test.cpp:189:10:189:13 | call to rand | test.cpp:198:7:198:7 | x | -| test.cpp:189:10:189:13 | call to rand | test.cpp:199:7:199:7 | x | -| test.cpp:190:10:190:13 | call to rand | test.cpp:204:7:204:7 | y | -| test.cpp:190:10:190:13 | call to rand | test.cpp:205:7:205:7 | y | -| test.cpp:190:10:190:13 | call to rand | test.cpp:208:7:208:7 | y | -| test.cpp:215:11:215:14 | call to rand | test.cpp:219:8:219:8 | x | +| test.c:18:13:18:16 | call to rand | test.c:21:17:21:17 | r | provenance | | +| test.c:34:13:34:18 | call to rand | test.c:35:5:35:5 | r | provenance | | +| test.c:44:13:44:16 | call to rand | test.c:45:5:45:5 | r | provenance | | +| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | provenance | | +| test.c:75:13:75:19 | call to rand | test.c:77:9:77:9 | r | provenance | | +| test.c:81:14:81:17 | call to rand | test.c:83:9:83:9 | r | provenance | | +| test.c:81:23:81:26 | call to rand | test.c:83:9:83:9 | r | provenance | | +| test.c:125:13:125:16 | call to rand | test.c:127:9:127:9 | r | provenance | | +| test.c:131:13:131:16 | call to rand | test.c:133:5:133:5 | r | provenance | | +| test.c:137:13:137:16 | call to rand | test.c:139:10:139:10 | r | provenance | | +| test.c:155:22:155:27 | call to rand | test.c:157:9:157:9 | r | provenance | | +| test.cpp:6:5:6:12 | *get_rand | test.cpp:24:11:24:18 | call to get_rand | provenance | | +| test.cpp:8:9:8:12 | call to rand | test.cpp:6:5:6:12 | *get_rand | provenance | | +| test.cpp:11:21:11:24 | *dest | test.cpp:30:13:30:14 | get_rand2 output argument | provenance | | +| test.cpp:13:10:13:13 | call to rand | test.cpp:11:21:11:24 | *dest | provenance | | +| test.cpp:16:21:16:24 | *dest | test.cpp:36:13:36:13 | get_rand3 output argument | provenance | | +| test.cpp:18:9:18:12 | call to rand | test.cpp:16:21:16:24 | *dest | provenance | | +| test.cpp:24:11:24:18 | call to get_rand | test.cpp:25:7:25:7 | r | provenance | | +| test.cpp:30:13:30:14 | get_rand2 output argument | test.cpp:31:7:31:7 | r | provenance | | +| test.cpp:36:13:36:13 | get_rand3 output argument | test.cpp:37:7:37:7 | r | provenance | | +| test.cpp:86:10:86:13 | call to rand | test.cpp:90:10:90:10 | x | provenance | | +| test.cpp:98:10:98:13 | call to rand | test.cpp:102:10:102:10 | x | provenance | | +| test.cpp:137:10:137:13 | call to rand | test.cpp:146:9:146:9 | y | provenance | | +| test.cpp:151:10:151:13 | call to rand | test.cpp:154:10:154:10 | b | provenance | | +| test.cpp:169:11:169:14 | call to rand | test.cpp:171:11:171:16 | y | provenance | | +| test.cpp:189:10:189:13 | call to rand | test.cpp:196:7:196:7 | x | provenance | | +| test.cpp:189:10:189:13 | call to rand | test.cpp:198:7:198:7 | x | provenance | | +| test.cpp:189:10:189:13 | call to rand | test.cpp:199:7:199:7 | x | provenance | | +| test.cpp:190:10:190:13 | call to rand | test.cpp:204:7:204:7 | y | provenance | | +| test.cpp:190:10:190:13 | call to rand | test.cpp:205:7:205:7 | y | provenance | | +| test.cpp:190:10:190:13 | call to rand | test.cpp:208:7:208:7 | y | provenance | | +| test.cpp:215:11:215:14 | call to rand | test.cpp:219:8:219:8 | x | provenance | | nodes | test.c:18:13:18:16 | call to rand | semmle.label | call to rand | | test.c:21:17:21:17 | r | semmle.label | r | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected index 56699b308cc..cfcb159b3f1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/TaintedAllocationSize/TaintedAllocationSize.expected @@ -1,28 +1,28 @@ edges -| test.cpp:39:27:39:30 | **argv | test.cpp:43:38:43:44 | tainted | -| test.cpp:39:27:39:30 | **argv | test.cpp:44:38:44:63 | ... * ... | -| test.cpp:39:27:39:30 | **argv | test.cpp:46:38:46:63 | ... + ... | -| test.cpp:39:27:39:30 | **argv | test.cpp:49:32:49:35 | size | -| test.cpp:39:27:39:30 | **argv | test.cpp:50:17:50:30 | size | -| test.cpp:39:27:39:30 | **argv | test.cpp:53:35:53:60 | ... * ... | -| test.cpp:124:18:124:31 | *call to getenv | test.cpp:128:24:128:41 | ... * ... | -| test.cpp:133:19:133:32 | *call to getenv | test.cpp:135:10:135:27 | ... * ... | -| test.cpp:148:20:148:33 | *call to getenv | test.cpp:152:11:152:28 | ... * ... | -| test.cpp:209:8:209:23 | *get_tainted_size | test.cpp:241:9:241:24 | call to get_tainted_size | -| test.cpp:211:14:211:27 | *call to getenv | test.cpp:209:8:209:23 | *get_tainted_size | -| test.cpp:230:21:230:21 | s | test.cpp:231:21:231:21 | s | -| test.cpp:237:24:237:37 | *call to getenv | test.cpp:239:9:239:18 | local_size | -| test.cpp:237:24:237:37 | *call to getenv | test.cpp:245:11:245:20 | local_size | -| test.cpp:237:24:237:37 | *call to getenv | test.cpp:247:10:247:19 | local_size | -| test.cpp:247:10:247:19 | local_size | test.cpp:230:21:230:21 | s | -| test.cpp:250:20:250:27 | *out_size | test.cpp:289:17:289:20 | get_size output argument | -| test.cpp:250:20:250:27 | *out_size | test.cpp:305:18:305:21 | get_size output argument | -| test.cpp:251:18:251:31 | *call to getenv | test.cpp:250:20:250:27 | *out_size | -| test.cpp:259:20:259:33 | *call to getenv | test.cpp:263:11:263:29 | ... * ... | -| test.cpp:289:17:289:20 | get_size output argument | test.cpp:291:11:291:28 | ... * ... | -| test.cpp:305:18:305:21 | get_size output argument | test.cpp:308:10:308:27 | ... * ... | -| test.cpp:353:18:353:31 | *call to getenv | test.cpp:355:35:355:38 | size | -| test.cpp:353:18:353:31 | *call to getenv | test.cpp:356:35:356:38 | size | +| test.cpp:39:27:39:30 | **argv | test.cpp:43:38:43:44 | tainted | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:44:38:44:63 | ... * ... | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:46:38:46:63 | ... + ... | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:49:32:49:35 | size | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:50:17:50:30 | size | provenance | | +| test.cpp:39:27:39:30 | **argv | test.cpp:53:35:53:60 | ... * ... | provenance | | +| test.cpp:124:18:124:31 | *call to getenv | test.cpp:128:24:128:41 | ... * ... | provenance | | +| test.cpp:133:19:133:32 | *call to getenv | test.cpp:135:10:135:27 | ... * ... | provenance | | +| test.cpp:148:20:148:33 | *call to getenv | test.cpp:152:11:152:28 | ... * ... | provenance | | +| test.cpp:209:8:209:23 | *get_tainted_size | test.cpp:241:9:241:24 | call to get_tainted_size | provenance | | +| test.cpp:211:14:211:27 | *call to getenv | test.cpp:209:8:209:23 | *get_tainted_size | provenance | | +| test.cpp:230:21:230:21 | s | test.cpp:231:21:231:21 | s | provenance | | +| test.cpp:237:24:237:37 | *call to getenv | test.cpp:239:9:239:18 | local_size | provenance | | +| test.cpp:237:24:237:37 | *call to getenv | test.cpp:245:11:245:20 | local_size | provenance | | +| test.cpp:237:24:237:37 | *call to getenv | test.cpp:247:10:247:19 | local_size | provenance | | +| test.cpp:247:10:247:19 | local_size | test.cpp:230:21:230:21 | s | provenance | | +| test.cpp:250:20:250:27 | *out_size | test.cpp:289:17:289:20 | get_size output argument | provenance | | +| test.cpp:250:20:250:27 | *out_size | test.cpp:305:18:305:21 | get_size output argument | provenance | | +| test.cpp:251:18:251:31 | *call to getenv | test.cpp:250:20:250:27 | *out_size | provenance | | +| test.cpp:259:20:259:33 | *call to getenv | test.cpp:263:11:263:29 | ... * ... | provenance | | +| test.cpp:289:17:289:20 | get_size output argument | test.cpp:291:11:291:28 | ... * ... | provenance | | +| test.cpp:305:18:305:21 | get_size output argument | test.cpp:308:10:308:27 | ... * ... | provenance | | +| test.cpp:353:18:353:31 | *call to getenv | test.cpp:355:35:355:38 | size | provenance | | +| test.cpp:353:18:353:31 | *call to getenv | test.cpp:356:35:356:38 | size | provenance | | nodes | test.cpp:39:27:39:30 | **argv | semmle.label | **argv | | test.cpp:43:38:43:44 | tainted | semmle.label | tainted | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected index 5c7755d3bd1..80123131652 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-190/semmle/tainted/ArithmeticTainted.expected @@ -1,19 +1,19 @@ edges -| test2.cpp:12:21:12:21 | v | test2.cpp:14:11:14:11 | v | -| test2.cpp:25:22:25:23 | fscanf output argument | test2.cpp:27:13:27:13 | v | -| test2.cpp:27:13:27:13 | v | test2.cpp:12:21:12:21 | v | -| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:39:9:39:11 | num | -| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:40:3:40:5 | num | -| test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | -| test3.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | -| test3.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | -| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:17:6:17:18 | call to getTaintedInt | -| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:18:6:18:18 | call to getTaintedInt | -| test5.cpp:9:7:9:9 | gets output argument | test5.cpp:5:5:5:17 | *getTaintedInt | -| test5.cpp:18:6:18:18 | call to getTaintedInt | test5.cpp:19:6:19:6 | y | -| test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | -| test.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | -| test.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | +| test2.cpp:12:21:12:21 | v | test2.cpp:14:11:14:11 | v | provenance | | +| test2.cpp:25:22:25:23 | fscanf output argument | test2.cpp:27:13:27:13 | v | provenance | | +| test2.cpp:27:13:27:13 | v | test2.cpp:12:21:12:21 | v | provenance | | +| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:39:9:39:11 | num | provenance | | +| test2.cpp:36:9:36:14 | fgets output argument | test2.cpp:40:3:40:5 | num | provenance | | +| test3.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | provenance | | +| test3.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | provenance | | +| test3.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | provenance | | +| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:17:6:17:18 | call to getTaintedInt | provenance | | +| test5.cpp:5:5:5:17 | *getTaintedInt | test5.cpp:18:6:18:18 | call to getTaintedInt | provenance | | +| test5.cpp:9:7:9:9 | gets output argument | test5.cpp:5:5:5:17 | *getTaintedInt | provenance | | +| test5.cpp:18:6:18:18 | call to getTaintedInt | test5.cpp:19:6:19:6 | y | provenance | | +| test.c:10:27:10:30 | **argv | test.c:14:15:14:28 | maxConnections | provenance | | +| test.c:10:27:10:30 | **argv | test.c:44:7:44:10 | len2 | provenance | | +| test.c:10:27:10:30 | **argv | test.c:54:7:54:10 | len3 | provenance | | nodes | test2.cpp:12:21:12:21 | v | semmle.label | v | | test2.cpp:14:11:14:11 | v | semmle.label | v | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected index 2a94ba30908..43e865d894b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected @@ -1,106 +1,106 @@ edges -| test.cpp:4:15:4:33 | call to malloc | test.cpp:5:15:5:22 | ... + ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:5:15:5:22 | ... + ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | -| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | -| test.cpp:6:14:6:15 | * ... | test.cpp:8:14:8:21 | * ... | -| test.cpp:16:15:16:33 | call to malloc | test.cpp:20:14:20:21 | * ... | -| test.cpp:28:15:28:37 | call to malloc | test.cpp:29:15:29:28 | ... + ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:29:15:29:28 | ... + ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | -| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | -| test.cpp:30:14:30:15 | * ... | test.cpp:32:14:32:21 | * ... | -| test.cpp:51:33:51:35 | *end | test.cpp:60:34:60:37 | mk_array output argument | -| test.cpp:52:19:52:37 | call to malloc | test.cpp:53:12:53:23 | ... + ... | -| test.cpp:53:12:53:23 | ... + ... | test.cpp:51:33:51:35 | *end | -| test.cpp:60:34:60:37 | mk_array output argument | test.cpp:67:9:67:14 | ... = ... | -| test.cpp:205:15:205:33 | call to malloc | test.cpp:206:17:206:23 | ... + ... | -| test.cpp:206:17:206:23 | ... + ... | test.cpp:206:17:206:23 | ... + ... | -| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | -| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | -| test.cpp:260:13:260:24 | new[] | test.cpp:261:14:261:21 | ... + ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:261:14:261:21 | ... + ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | -| test.cpp:270:13:270:24 | new[] | test.cpp:271:14:271:21 | ... + ... | -| test.cpp:271:14:271:21 | ... + ... | test.cpp:271:14:271:21 | ... + ... | -| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | -| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | -| test.cpp:355:14:355:27 | new[] | test.cpp:356:15:356:23 | ... + ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:356:15:356:23 | ... + ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | -| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | -| test.cpp:377:14:377:27 | new[] | test.cpp:378:15:378:23 | ... + ... | -| test.cpp:378:15:378:23 | ... + ... | test.cpp:378:15:378:23 | ... + ... | -| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | -| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | -| test.cpp:410:14:410:27 | new[] | test.cpp:411:15:411:23 | & ... | -| test.cpp:410:14:410:27 | new[] | test.cpp:415:7:415:15 | ... = ... | -| test.cpp:411:15:411:23 | & ... | test.cpp:411:15:411:23 | & ... | -| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | -| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | -| test.cpp:421:14:421:27 | new[] | test.cpp:422:15:422:23 | & ... | -| test.cpp:421:14:421:27 | new[] | test.cpp:426:7:426:15 | ... = ... | -| test.cpp:422:15:422:23 | & ... | test.cpp:422:15:422:23 | & ... | -| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | -| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | -| test.cpp:432:14:432:27 | new[] | test.cpp:433:15:433:23 | & ... | -| test.cpp:432:14:432:27 | new[] | test.cpp:438:7:438:15 | ... = ... | -| test.cpp:433:15:433:23 | & ... | test.cpp:433:15:433:23 | & ... | -| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | -| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | -| test.cpp:444:14:444:27 | new[] | test.cpp:445:15:445:23 | & ... | -| test.cpp:444:14:444:27 | new[] | test.cpp:450:7:450:15 | ... = ... | -| test.cpp:445:15:445:23 | & ... | test.cpp:445:15:445:23 | & ... | -| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | -| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | -| test.cpp:480:14:480:27 | new[] | test.cpp:481:15:481:23 | & ... | -| test.cpp:480:14:480:27 | new[] | test.cpp:486:7:486:15 | ... = ... | -| test.cpp:481:15:481:23 | & ... | test.cpp:481:15:481:23 | & ... | -| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | -| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | -| test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:19 | ... = ... | -| test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:19 | ... = ... | -| test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:19 | ... = ... | -| test.cpp:730:12:730:28 | new[] | test.cpp:732:16:732:26 | ... + ... | -| test.cpp:732:16:732:26 | ... + ... | test.cpp:732:16:732:26 | ... + ... | -| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | -| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | -| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | -| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | -| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | -| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | -| test.cpp:781:14:781:27 | new[] | test.cpp:786:18:786:27 | access to array | -| test.cpp:792:60:792:62 | *end | test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | -| test.cpp:792:60:792:62 | *end | test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | -| test.cpp:793:14:793:32 | call to malloc | test.cpp:794:12:794:24 | ... + ... | -| test.cpp:794:12:794:24 | ... + ... | test.cpp:792:60:792:62 | *end | -| test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | test.cpp:807:7:807:12 | ... = ... | -| test.cpp:815:52:815:54 | end | test.cpp:815:52:815:54 | end | -| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | -| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | -| test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | test.cpp:833:37:833:39 | end | -| test.cpp:833:37:833:39 | end | test.cpp:815:52:815:54 | end | -| test.cpp:841:18:841:35 | call to malloc | test.cpp:842:3:842:20 | ... = ... | -| test.cpp:848:20:848:37 | call to malloc | test.cpp:849:5:849:22 | ... = ... | -| test.cpp:856:12:856:35 | call to malloc | test.cpp:857:16:857:29 | ... + ... | -| test.cpp:857:16:857:29 | ... + ... | test.cpp:857:16:857:29 | ... + ... | -| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | -| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | +| test.cpp:4:15:4:33 | call to malloc | test.cpp:5:15:5:22 | ... + ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:5:15:5:22 | ... + ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | | +| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | | +| test.cpp:6:14:6:15 | * ... | test.cpp:8:14:8:21 | * ... | provenance | | +| test.cpp:16:15:16:33 | call to malloc | test.cpp:20:14:20:21 | * ... | provenance | | +| test.cpp:28:15:28:37 | call to malloc | test.cpp:29:15:29:28 | ... + ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:29:15:29:28 | ... + ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | | +| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | | +| test.cpp:30:14:30:15 | * ... | test.cpp:32:14:32:21 | * ... | provenance | | +| test.cpp:51:33:51:35 | *end | test.cpp:60:34:60:37 | mk_array output argument | provenance | | +| test.cpp:52:19:52:37 | call to malloc | test.cpp:53:12:53:23 | ... + ... | provenance | | +| test.cpp:53:12:53:23 | ... + ... | test.cpp:51:33:51:35 | *end | provenance | | +| test.cpp:60:34:60:37 | mk_array output argument | test.cpp:67:9:67:14 | ... = ... | provenance | | +| test.cpp:205:15:205:33 | call to malloc | test.cpp:206:17:206:23 | ... + ... | provenance | | +| test.cpp:206:17:206:23 | ... + ... | test.cpp:206:17:206:23 | ... + ... | provenance | | +| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | | +| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | | +| test.cpp:260:13:260:24 | new[] | test.cpp:261:14:261:21 | ... + ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:261:14:261:21 | ... + ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:264:13:264:14 | * ... | test.cpp:264:13:264:14 | * ... | provenance | | +| test.cpp:270:13:270:24 | new[] | test.cpp:271:14:271:21 | ... + ... | provenance | | +| test.cpp:271:14:271:21 | ... + ... | test.cpp:271:14:271:21 | ... + ... | provenance | | +| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | | +| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | | +| test.cpp:355:14:355:27 | new[] | test.cpp:356:15:356:23 | ... + ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:356:15:356:23 | ... + ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | | +| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | | +| test.cpp:377:14:377:27 | new[] | test.cpp:378:15:378:23 | ... + ... | provenance | | +| test.cpp:378:15:378:23 | ... + ... | test.cpp:378:15:378:23 | ... + ... | provenance | | +| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | | +| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | | +| test.cpp:410:14:410:27 | new[] | test.cpp:411:15:411:23 | & ... | provenance | | +| test.cpp:410:14:410:27 | new[] | test.cpp:415:7:415:15 | ... = ... | provenance | | +| test.cpp:411:15:411:23 | & ... | test.cpp:411:15:411:23 | & ... | provenance | | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | | +| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | | +| test.cpp:421:14:421:27 | new[] | test.cpp:422:15:422:23 | & ... | provenance | | +| test.cpp:421:14:421:27 | new[] | test.cpp:426:7:426:15 | ... = ... | provenance | | +| test.cpp:422:15:422:23 | & ... | test.cpp:422:15:422:23 | & ... | provenance | | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | | +| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | | +| test.cpp:432:14:432:27 | new[] | test.cpp:433:15:433:23 | & ... | provenance | | +| test.cpp:432:14:432:27 | new[] | test.cpp:438:7:438:15 | ... = ... | provenance | | +| test.cpp:433:15:433:23 | & ... | test.cpp:433:15:433:23 | & ... | provenance | | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | | +| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | | +| test.cpp:444:14:444:27 | new[] | test.cpp:445:15:445:23 | & ... | provenance | | +| test.cpp:444:14:444:27 | new[] | test.cpp:450:7:450:15 | ... = ... | provenance | | +| test.cpp:445:15:445:23 | & ... | test.cpp:445:15:445:23 | & ... | provenance | | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | | +| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | | +| test.cpp:480:14:480:27 | new[] | test.cpp:481:15:481:23 | & ... | provenance | | +| test.cpp:480:14:480:27 | new[] | test.cpp:486:7:486:15 | ... = ... | provenance | | +| test.cpp:481:15:481:23 | & ... | test.cpp:481:15:481:23 | & ... | provenance | | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | | +| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | | +| test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:19 | ... = ... | provenance | | +| test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:19 | ... = ... | provenance | | +| test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:19 | ... = ... | provenance | | +| test.cpp:730:12:730:28 | new[] | test.cpp:732:16:732:26 | ... + ... | provenance | | +| test.cpp:732:16:732:26 | ... + ... | test.cpp:732:16:732:26 | ... + ... | provenance | | +| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | | +| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | | +| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | | +| test.cpp:781:14:781:27 | new[] | test.cpp:786:18:786:27 | access to array | provenance | | +| test.cpp:792:60:792:62 | *end | test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | provenance | | +| test.cpp:792:60:792:62 | *end | test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | provenance | | +| test.cpp:793:14:793:32 | call to malloc | test.cpp:794:12:794:24 | ... + ... | provenance | | +| test.cpp:794:12:794:24 | ... + ... | test.cpp:792:60:792:62 | *end | provenance | | +| test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | test.cpp:807:7:807:12 | ... = ... | provenance | | +| test.cpp:815:52:815:54 | end | test.cpp:815:52:815:54 | end | provenance | | +| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | | +| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | | +| test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | test.cpp:833:37:833:39 | end | provenance | | +| test.cpp:833:37:833:39 | end | test.cpp:815:52:815:54 | end | provenance | | +| test.cpp:841:18:841:35 | call to malloc | test.cpp:842:3:842:20 | ... = ... | provenance | | +| test.cpp:848:20:848:37 | call to malloc | test.cpp:849:5:849:22 | ... = ... | provenance | | +| test.cpp:856:12:856:35 | call to malloc | test.cpp:857:16:857:29 | ... + ... | provenance | | +| test.cpp:857:16:857:29 | ... + ... | test.cpp:857:16:857:29 | ... + ... | provenance | | +| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | | +| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | | nodes | test.cpp:4:15:4:33 | call to malloc | semmle.label | call to malloc | | test.cpp:5:15:5:22 | ... + ... | semmle.label | ... + ... | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected index 800e2d06c44..f5fa846e7a8 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-290/semmle/AuthenticationBypass/AuthenticationBypass.expected @@ -1,10 +1,10 @@ edges -| test.cpp:16:25:16:42 | *call to getenv | test.cpp:20:14:20:20 | *address | -| test.cpp:27:25:27:42 | *call to getenv | test.cpp:31:14:31:20 | *address | -| test.cpp:38:25:38:42 | *call to getenv | test.cpp:42:14:42:20 | *address | -| test.cpp:49:25:49:42 | *call to getenv | test.cpp:52:14:52:20 | *address | -| test.cpp:49:25:49:42 | *call to getenv | test.cpp:56:14:56:20 | *address | -| test.cpp:49:25:49:42 | *call to getenv | test.cpp:60:14:60:20 | *address | +| test.cpp:16:25:16:42 | *call to getenv | test.cpp:20:14:20:20 | *address | provenance | | +| test.cpp:27:25:27:42 | *call to getenv | test.cpp:31:14:31:20 | *address | provenance | | +| test.cpp:38:25:38:42 | *call to getenv | test.cpp:42:14:42:20 | *address | provenance | | +| test.cpp:49:25:49:42 | *call to getenv | test.cpp:52:14:52:20 | *address | provenance | | +| test.cpp:49:25:49:42 | *call to getenv | test.cpp:56:14:56:20 | *address | provenance | | +| test.cpp:49:25:49:42 | *call to getenv | test.cpp:60:14:60:20 | *address | provenance | | nodes | test.cpp:16:25:16:42 | *call to getenv | semmle.label | *call to getenv | | test.cpp:20:14:20:20 | *address | semmle.label | *address | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected index 6864309a63e..edd3a273cc6 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextBufferWrite.expected @@ -1,5 +1,5 @@ edges -| test.cpp:53:27:53:30 | **argv | test.cpp:58:25:58:29 | *input | +| test.cpp:53:27:53:30 | **argv | test.cpp:58:25:58:29 | *input | provenance | | nodes | test2.cpp:110:3:110:6 | *call to gets | semmle.label | *call to gets | | test.cpp:53:27:53:30 | **argv | semmle.label | **argv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected index c2ff01e3e0c..ddeb3fed32f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextFileWrite.expected @@ -1,10 +1,10 @@ edges -| test2.cpp:62:18:62:25 | password | test2.cpp:65:31:65:34 | cpy1 | -| test2.cpp:72:15:72:24 | password | test2.cpp:73:30:73:32 | *buf | -| test2.cpp:72:15:72:24 | password | test2.cpp:76:30:76:32 | *buf | -| test2.cpp:98:45:98:52 | password | test2.cpp:99:27:99:32 | *buffer | -| test.cpp:70:38:70:48 | thePassword | test.cpp:73:43:73:53 | thePassword | -| test.cpp:73:63:73:73 | thePassword | test.cpp:73:43:73:53 | thePassword | +| test2.cpp:62:18:62:25 | password | test2.cpp:65:31:65:34 | cpy1 | provenance | | +| test2.cpp:72:15:72:24 | password | test2.cpp:73:30:73:32 | *buf | provenance | | +| test2.cpp:72:15:72:24 | password | test2.cpp:76:30:76:32 | *buf | provenance | | +| test2.cpp:98:45:98:52 | password | test2.cpp:99:27:99:32 | *buffer | provenance | | +| test.cpp:70:38:70:48 | thePassword | test.cpp:73:43:73:53 | thePassword | provenance | | +| test.cpp:73:63:73:73 | thePassword | test.cpp:73:43:73:53 | thePassword | provenance | | nodes | test2.cpp:43:36:43:43 | password | semmle.label | password | | test2.cpp:44:37:44:45 | thepasswd | semmle.label | thepasswd | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected index 364da5b663b..8be2ec60f4a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-311/semmle/tests/CleartextTransmission.expected @@ -1,36 +1,36 @@ edges -| test3.cpp:74:21:74:29 | password1 | test3.cpp:76:15:76:17 | ptr | -| test3.cpp:81:15:81:22 | password | test3.cpp:83:15:83:17 | ptr | -| test3.cpp:112:20:112:25 | buffer | test3.cpp:114:14:114:19 | buffer | -| test3.cpp:117:28:117:33 | buffer | test3.cpp:117:13:117:14 | *id | -| test3.cpp:124:7:124:20 | *get_global_str | test3.cpp:144:16:144:29 | call to get_global_str | -| test3.cpp:126:9:126:23 | global_password | test3.cpp:124:7:124:20 | *get_global_str | -| test3.cpp:134:11:134:18 | password | test3.cpp:112:20:112:25 | buffer | -| test3.cpp:138:21:138:22 | call to id | test3.cpp:140:15:140:17 | ptr | -| test3.cpp:138:24:138:32 | password1 | test3.cpp:117:28:117:33 | buffer | -| test3.cpp:138:24:138:32 | password1 | test3.cpp:138:21:138:22 | call to id | -| test3.cpp:144:16:144:29 | call to get_global_str | test3.cpp:146:15:146:18 | data | -| test3.cpp:157:19:157:26 | password | test3.cpp:159:15:159:20 | *buffer | -| test3.cpp:270:16:270:23 | password | test3.cpp:272:15:272:18 | *data | -| test3.cpp:278:20:278:23 | data | test3.cpp:280:14:280:17 | data | -| test3.cpp:283:20:283:23 | data | test3.cpp:285:14:285:17 | data | -| test3.cpp:288:20:288:23 | data | test3.cpp:290:14:290:17 | data | -| test3.cpp:293:20:293:23 | data | test3.cpp:295:14:295:17 | data | -| test3.cpp:298:20:298:23 | data | test3.cpp:300:14:300:17 | data | -| test3.cpp:313:11:313:19 | password1 | test3.cpp:278:20:278:23 | data | -| test3.cpp:314:11:314:19 | password1 | test3.cpp:283:20:283:23 | data | -| test3.cpp:316:11:316:19 | password1 | test3.cpp:283:20:283:23 | data | -| test3.cpp:317:11:317:19 | password1 | test3.cpp:288:20:288:23 | data | -| test3.cpp:322:16:322:24 | password2 | test3.cpp:324:11:324:14 | data | -| test3.cpp:322:16:322:24 | password2 | test3.cpp:325:11:325:14 | data | -| test3.cpp:324:11:324:14 | data | test3.cpp:293:20:293:23 | data | -| test3.cpp:325:11:325:14 | data | test3.cpp:298:20:298:23 | data | -| test3.cpp:526:44:526:54 | my_latitude | test3.cpp:527:15:527:20 | *buffer | -| test3.cpp:532:45:532:58 | home_longitude | test3.cpp:533:15:533:20 | *buffer | -| test3.cpp:551:47:551:58 | salaryString | test3.cpp:552:15:552:20 | *buffer | -| test3.cpp:556:19:556:30 | salaryString | test3.cpp:559:15:559:20 | *buffer | -| test3.cpp:571:8:571:21 | call to get_home_phone | test3.cpp:572:14:572:16 | str | -| test3.cpp:577:8:577:23 | call to get_home_address | test3.cpp:578:14:578:16 | str | +| test3.cpp:74:21:74:29 | password1 | test3.cpp:76:15:76:17 | ptr | provenance | | +| test3.cpp:81:15:81:22 | password | test3.cpp:83:15:83:17 | ptr | provenance | | +| test3.cpp:112:20:112:25 | buffer | test3.cpp:114:14:114:19 | buffer | provenance | | +| test3.cpp:117:28:117:33 | buffer | test3.cpp:117:13:117:14 | *id | provenance | | +| test3.cpp:124:7:124:20 | *get_global_str | test3.cpp:144:16:144:29 | call to get_global_str | provenance | | +| test3.cpp:126:9:126:23 | global_password | test3.cpp:124:7:124:20 | *get_global_str | provenance | | +| test3.cpp:134:11:134:18 | password | test3.cpp:112:20:112:25 | buffer | provenance | | +| test3.cpp:138:21:138:22 | call to id | test3.cpp:140:15:140:17 | ptr | provenance | | +| test3.cpp:138:24:138:32 | password1 | test3.cpp:117:28:117:33 | buffer | provenance | | +| test3.cpp:138:24:138:32 | password1 | test3.cpp:138:21:138:22 | call to id | provenance | | +| test3.cpp:144:16:144:29 | call to get_global_str | test3.cpp:146:15:146:18 | data | provenance | | +| test3.cpp:157:19:157:26 | password | test3.cpp:159:15:159:20 | *buffer | provenance | | +| test3.cpp:270:16:270:23 | password | test3.cpp:272:15:272:18 | *data | provenance | | +| test3.cpp:278:20:278:23 | data | test3.cpp:280:14:280:17 | data | provenance | | +| test3.cpp:283:20:283:23 | data | test3.cpp:285:14:285:17 | data | provenance | | +| test3.cpp:288:20:288:23 | data | test3.cpp:290:14:290:17 | data | provenance | | +| test3.cpp:293:20:293:23 | data | test3.cpp:295:14:295:17 | data | provenance | | +| test3.cpp:298:20:298:23 | data | test3.cpp:300:14:300:17 | data | provenance | | +| test3.cpp:313:11:313:19 | password1 | test3.cpp:278:20:278:23 | data | provenance | | +| test3.cpp:314:11:314:19 | password1 | test3.cpp:283:20:283:23 | data | provenance | | +| test3.cpp:316:11:316:19 | password1 | test3.cpp:283:20:283:23 | data | provenance | | +| test3.cpp:317:11:317:19 | password1 | test3.cpp:288:20:288:23 | data | provenance | | +| test3.cpp:322:16:322:24 | password2 | test3.cpp:324:11:324:14 | data | provenance | | +| test3.cpp:322:16:322:24 | password2 | test3.cpp:325:11:325:14 | data | provenance | | +| test3.cpp:324:11:324:14 | data | test3.cpp:293:20:293:23 | data | provenance | | +| test3.cpp:325:11:325:14 | data | test3.cpp:298:20:298:23 | data | provenance | | +| test3.cpp:526:44:526:54 | my_latitude | test3.cpp:527:15:527:20 | *buffer | provenance | | +| test3.cpp:532:45:532:58 | home_longitude | test3.cpp:533:15:533:20 | *buffer | provenance | | +| test3.cpp:551:47:551:58 | salaryString | test3.cpp:552:15:552:20 | *buffer | provenance | | +| test3.cpp:556:19:556:30 | salaryString | test3.cpp:559:15:559:20 | *buffer | provenance | | +| test3.cpp:571:8:571:21 | call to get_home_phone | test3.cpp:572:14:572:16 | str | provenance | | +| test3.cpp:577:8:577:23 | call to get_home_address | test3.cpp:578:14:578:16 | str | provenance | | nodes | test3.cpp:22:15:22:23 | password1 | semmle.label | password1 | | test3.cpp:26:15:26:23 | password2 | semmle.label | password2 | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected index 49620af742f..fa12a3030f1 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-319/UseOfHttp/UseOfHttp.expected @@ -1,17 +1,17 @@ edges -| test.cpp:11:26:11:28 | *url | test.cpp:15:30:15:32 | *url | -| test.cpp:24:13:24:17 | **url_g | test.cpp:38:11:38:15 | *url_g | -| test.cpp:24:21:24:40 | *http://example.com | test.cpp:24:13:24:17 | **url_g | -| test.cpp:28:10:28:29 | *http://example.com | test.cpp:11:26:11:28 | *url | -| test.cpp:35:23:35:42 | *http://example.com | test.cpp:39:11:39:15 | *url_l | -| test.cpp:36:26:36:45 | *http://example.com | test.cpp:40:11:40:17 | *access to array | -| test.cpp:38:11:38:15 | *url_g | test.cpp:11:26:11:28 | *url | -| test.cpp:39:11:39:15 | *url_l | test.cpp:11:26:11:28 | *url | -| test.cpp:40:11:40:17 | *access to array | test.cpp:11:26:11:28 | *url | -| test.cpp:46:18:46:26 | *http:// | test.cpp:49:11:49:16 | *buffer | -| test.cpp:49:11:49:16 | *buffer | test.cpp:11:26:11:28 | *url | -| test.cpp:110:21:110:40 | *http://example.com | test.cpp:121:11:121:13 | *ptr | -| test.cpp:121:11:121:13 | *ptr | test.cpp:11:26:11:28 | *url | +| test.cpp:11:26:11:28 | *url | test.cpp:15:30:15:32 | *url | provenance | | +| test.cpp:24:13:24:17 | **url_g | test.cpp:38:11:38:15 | *url_g | provenance | | +| test.cpp:24:21:24:40 | *http://example.com | test.cpp:24:13:24:17 | **url_g | provenance | | +| test.cpp:28:10:28:29 | *http://example.com | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:35:23:35:42 | *http://example.com | test.cpp:39:11:39:15 | *url_l | provenance | | +| test.cpp:36:26:36:45 | *http://example.com | test.cpp:40:11:40:17 | *access to array | provenance | | +| test.cpp:38:11:38:15 | *url_g | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:39:11:39:15 | *url_l | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:40:11:40:17 | *access to array | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:46:18:46:26 | *http:// | test.cpp:49:11:49:16 | *buffer | provenance | | +| test.cpp:49:11:49:16 | *buffer | test.cpp:11:26:11:28 | *url | provenance | | +| test.cpp:110:21:110:40 | *http://example.com | test.cpp:121:11:121:13 | *ptr | provenance | | +| test.cpp:121:11:121:13 | *ptr | test.cpp:11:26:11:28 | *url | provenance | | nodes | test.cpp:11:26:11:28 | *url | semmle.label | *url | | test.cpp:15:30:15:32 | *url | semmle.label | *url | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected index 07758344bf3..22cb3f2fe81 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseAfterFree/UseAfterFree.expected @@ -1,16 +1,16 @@ edges -| test.cpp:39:7:39:10 | pointer to free output argument | test.cpp:41:6:41:9 | data | -| test.cpp:75:7:75:10 | pointer to free output argument | test.cpp:79:7:79:10 | data | -| test.cpp:106:7:106:10 | pointer to free output argument | test.cpp:108:6:108:9 | data | -| test.cpp:116:7:116:10 | pointer to free output argument | test.cpp:119:6:119:9 | data | -| test.cpp:127:7:127:10 | pointer to free output argument | test.cpp:130:6:130:9 | data | -| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:165:2:165:2 | c | -| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:166:3:166:4 | * ... | -| test.cpp:181:7:181:10 | pointer to free output argument | test.cpp:186:6:186:9 | data | -| test.cpp:192:7:192:10 | pointer to free output argument | test.cpp:197:6:197:9 | data | -| test.cpp:203:7:203:10 | pointer to free output argument | test.cpp:209:6:209:9 | data | -| test.cpp:207:8:207:11 | pointer to free output argument | test.cpp:209:6:209:9 | data | -| test.cpp:216:9:216:9 | pointer to operator delete output argument | test.cpp:217:6:217:6 | x | +| test.cpp:39:7:39:10 | pointer to free output argument | test.cpp:41:6:41:9 | data | provenance | | +| test.cpp:75:7:75:10 | pointer to free output argument | test.cpp:79:7:79:10 | data | provenance | | +| test.cpp:106:7:106:10 | pointer to free output argument | test.cpp:108:6:108:9 | data | provenance | | +| test.cpp:116:7:116:10 | pointer to free output argument | test.cpp:119:6:119:9 | data | provenance | | +| test.cpp:127:7:127:10 | pointer to free output argument | test.cpp:130:6:130:9 | data | provenance | | +| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:165:2:165:2 | c | provenance | | +| test.cpp:164:9:164:9 | pointer to operator delete output argument | test.cpp:166:3:166:4 | * ... | provenance | | +| test.cpp:181:7:181:10 | pointer to free output argument | test.cpp:186:6:186:9 | data | provenance | | +| test.cpp:192:7:192:10 | pointer to free output argument | test.cpp:197:6:197:9 | data | provenance | | +| test.cpp:203:7:203:10 | pointer to free output argument | test.cpp:209:6:209:9 | data | provenance | | +| test.cpp:207:8:207:11 | pointer to free output argument | test.cpp:209:6:209:9 | data | provenance | | +| test.cpp:216:9:216:9 | pointer to operator delete output argument | test.cpp:217:6:217:6 | x | provenance | | nodes | test.cpp:39:7:39:10 | pointer to free output argument | semmle.label | pointer to free output argument | | test.cpp:41:6:41:9 | data | semmle.label | data | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected index 6746c557288..3fc58925ff7 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/SAMATE/PotentiallyExposedSystemData.expected @@ -1,5 +1,5 @@ edges -| tests.c:57:21:57:28 | *password | tests.c:70:70:70:77 | *password | +| tests.c:57:21:57:28 | *password | tests.c:70:70:70:77 | *password | provenance | | nodes | tests.c:57:21:57:28 | *password | semmle.label | *password | | tests.c:70:70:70:77 | *password | semmle.label | *password | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected index 9c5a5a9f270..82fd2be33f8 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected @@ -1,20 +1,20 @@ edges -| tests2.cpp:50:13:50:19 | **global1 | tests2.cpp:82:14:82:20 | *global1 | -| tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | tests2.cpp:50:13:50:19 | **global1 | -| tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | tests2.cpp:81:14:81:19 | *buffer | -| tests2.cpp:91:42:91:45 | *str1 | tests2.cpp:93:14:93:17 | *str1 | -| tests2.cpp:101:8:101:15 | *call to getpwuid | tests2.cpp:102:14:102:15 | *pw | -| tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | tests2.cpp:111:14:111:15 | *c1 [*ptr] | -| tests2.cpp:109:3:109:36 | *... = ... | tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | -| tests2.cpp:109:12:109:17 | *call to getenv | tests2.cpp:109:3:109:36 | *... = ... | -| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:14:111:19 | *ptr | -| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:17:111:19 | *ptr | -| tests2.cpp:111:17:111:19 | *ptr | tests2.cpp:111:14:111:19 | *ptr | -| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:39:19:39:22 | *path | -| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:43:20:43:23 | *path | -| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:76:19:76:22 | *path | -| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:80:20:80:23 | *path | -| tests_sysconf.cpp:36:21:36:27 | confstr output argument | tests_sysconf.cpp:39:19:39:25 | *pathbuf | +| tests2.cpp:50:13:50:19 | **global1 | tests2.cpp:82:14:82:20 | *global1 | provenance | | +| tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | tests2.cpp:50:13:50:19 | **global1 | provenance | | +| tests2.cpp:78:18:78:38 | *call to mysql_get_client_info | tests2.cpp:81:14:81:19 | *buffer | provenance | | +| tests2.cpp:91:42:91:45 | *str1 | tests2.cpp:93:14:93:17 | *str1 | provenance | | +| tests2.cpp:101:8:101:15 | *call to getpwuid | tests2.cpp:102:14:102:15 | *pw | provenance | | +| tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | tests2.cpp:111:14:111:15 | *c1 [*ptr] | provenance | | +| tests2.cpp:109:3:109:36 | *... = ... | tests2.cpp:109:3:109:4 | *c1 [post update] [*ptr] | provenance | | +| tests2.cpp:109:12:109:17 | *call to getenv | tests2.cpp:109:3:109:36 | *... = ... | provenance | | +| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:14:111:19 | *ptr | provenance | | +| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:17:111:19 | *ptr | provenance | | +| tests2.cpp:111:17:111:19 | *ptr | tests2.cpp:111:14:111:19 | *ptr | provenance | | +| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:39:19:39:22 | *path | provenance | | +| tests_sockets.cpp:26:15:26:20 | *call to getenv | tests_sockets.cpp:43:20:43:23 | *path | provenance | | +| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:76:19:76:22 | *path | provenance | | +| tests_sockets.cpp:63:15:63:20 | *call to getenv | tests_sockets.cpp:80:20:80:23 | *path | provenance | | +| tests_sysconf.cpp:36:21:36:27 | confstr output argument | tests_sysconf.cpp:39:19:39:25 | *pathbuf | provenance | | nodes | tests2.cpp:50:13:50:19 | **global1 | semmle.label | **global1 | | tests2.cpp:50:23:50:43 | *call to mysql_get_client_info | semmle.label | *call to mysql_get_client_info | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected index 5178a401939..32e7895b794 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/PotentiallyExposedSystemData.expected @@ -1,18 +1,18 @@ edges -| tests.cpp:62:7:62:18 | **global_token | tests.cpp:71:27:71:38 | *global_token | -| tests.cpp:62:7:62:18 | **global_token | tests.cpp:73:27:73:31 | *maybe | -| tests.cpp:62:22:62:27 | *call to getenv | tests.cpp:62:7:62:18 | **global_token | -| tests.cpp:86:29:86:31 | *msg | tests.cpp:88:15:88:17 | *msg | -| tests.cpp:97:13:97:34 | *call to getenv | tests.cpp:86:29:86:31 | *msg | -| tests.cpp:107:30:107:32 | *msg | tests.cpp:111:15:111:17 | *tmp | -| tests.cpp:114:30:114:32 | *msg | tests.cpp:119:7:119:12 | *buffer | -| tests.cpp:122:30:122:32 | *msg | tests.cpp:124:15:124:17 | *msg | -| tests.cpp:131:14:131:35 | *call to getenv | tests.cpp:107:30:107:32 | *msg | -| tests.cpp:132:14:132:35 | *call to getenv | tests.cpp:114:30:114:32 | *msg | -| tests.cpp:133:14:133:35 | *call to getenv | tests.cpp:122:30:122:32 | *msg | -| tests.cpp:139:17:139:22 | *call to getenv | tests.cpp:141:15:141:20 | *secret | -| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:18:29:18:31 | *pwd | -| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:19:26:19:28 | *pwd | +| tests.cpp:62:7:62:18 | **global_token | tests.cpp:71:27:71:38 | *global_token | provenance | | +| tests.cpp:62:7:62:18 | **global_token | tests.cpp:73:27:73:31 | *maybe | provenance | | +| tests.cpp:62:22:62:27 | *call to getenv | tests.cpp:62:7:62:18 | **global_token | provenance | | +| tests.cpp:86:29:86:31 | *msg | tests.cpp:88:15:88:17 | *msg | provenance | | +| tests.cpp:97:13:97:34 | *call to getenv | tests.cpp:86:29:86:31 | *msg | provenance | | +| tests.cpp:107:30:107:32 | *msg | tests.cpp:111:15:111:17 | *tmp | provenance | | +| tests.cpp:114:30:114:32 | *msg | tests.cpp:119:7:119:12 | *buffer | provenance | | +| tests.cpp:122:30:122:32 | *msg | tests.cpp:124:15:124:17 | *msg | provenance | | +| tests.cpp:131:14:131:35 | *call to getenv | tests.cpp:107:30:107:32 | *msg | provenance | | +| tests.cpp:132:14:132:35 | *call to getenv | tests.cpp:114:30:114:32 | *msg | provenance | | +| tests.cpp:133:14:133:35 | *call to getenv | tests.cpp:122:30:122:32 | *msg | provenance | | +| tests.cpp:139:17:139:22 | *call to getenv | tests.cpp:141:15:141:20 | *secret | provenance | | +| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:18:29:18:31 | *pwd | provenance | | +| tests_passwd.cpp:16:8:16:15 | *call to getpwnam | tests_passwd.cpp:19:26:19:28 | *pwd | provenance | | nodes | tests.cpp:48:15:48:36 | *call to getenv | semmle.label | *call to getenv | | tests.cpp:49:15:49:36 | *call to getenv | semmle.label | *call to getenv | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index 4efc0e59620..70386662fe8 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -1,52 +1,52 @@ edges -| tests2.cpp:20:17:20:31 | call to SAXParser | tests2.cpp:22:2:22:2 | *p | -| tests2.cpp:33:17:33:31 | call to SAXParser | tests2.cpp:37:2:37:2 | *p | -| tests2.cpp:49:12:49:12 | call to SAXParser | tests2.cpp:51:2:51:2 | *p | -| tests3.cpp:23:21:23:53 | *call to createXMLReader | tests3.cpp:25:2:25:2 | *p | -| tests3.cpp:35:16:35:20 | **p_3_3 | tests3.cpp:38:2:38:6 | *p_3_3 | -| tests3.cpp:35:24:35:56 | *call to createXMLReader | tests3.cpp:35:16:35:20 | **p_3_3 | -| tests3.cpp:48:16:48:20 | **p_3_5 | tests3.cpp:56:2:56:6 | *p_3_5 | -| tests3.cpp:48:24:48:56 | *call to createXMLReader | tests3.cpp:48:16:48:20 | **p_3_5 | -| tests3.cpp:60:21:60:53 | *call to createXMLReader | tests3.cpp:63:2:63:2 | *p | -| tests3.cpp:67:21:67:53 | *call to createXMLReader | tests3.cpp:70:2:70:2 | *p | -| tests5.cpp:27:25:27:38 | *call to createLSParser | tests5.cpp:29:2:29:2 | *p | -| tests5.cpp:40:25:40:38 | *call to createLSParser | tests5.cpp:43:2:43:2 | *p | -| tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | -| tests5.cpp:63:21:63:24 | **g_p2 | tests5.cpp:77:2:77:5 | *g_p2 | -| tests5.cpp:70:17:70:30 | *call to createLSParser | tests5.cpp:63:21:63:24 | **g_p2 | -| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | -| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | -| tests5.cpp:83:2:83:2 | *p | tests5.cpp:85:2:85:2 | *p | -| tests5.cpp:85:2:85:2 | *p | tests5.cpp:86:2:86:2 | *p | -| tests5.cpp:86:2:86:2 | *p | tests5.cpp:88:2:88:2 | *p | -| tests5.cpp:88:2:88:2 | *p | tests5.cpp:89:2:89:2 | *p | -| tests.cpp:15:23:15:43 | call to XercesDOMParser | tests.cpp:17:2:17:2 | *p | -| tests.cpp:28:23:28:43 | call to XercesDOMParser | tests.cpp:31:2:31:2 | *p | -| tests.cpp:35:23:35:43 | call to XercesDOMParser | tests.cpp:37:2:37:2 | *p | -| tests.cpp:37:2:37:2 | *p | tests.cpp:37:2:37:2 | *p | -| tests.cpp:37:2:37:2 | *p | tests.cpp:38:2:38:2 | *p | -| tests.cpp:38:2:38:2 | *p | tests.cpp:38:2:38:2 | *p | -| tests.cpp:38:2:38:2 | *p | tests.cpp:39:2:39:2 | *p | -| tests.cpp:51:23:51:43 | call to XercesDOMParser | tests.cpp:53:2:53:2 | *p | -| tests.cpp:53:2:53:2 | *p | tests.cpp:53:2:53:2 | *p | -| tests.cpp:53:2:53:2 | *p | tests.cpp:55:2:55:2 | *p | -| tests.cpp:55:2:55:2 | *p | tests.cpp:55:2:55:2 | *p | -| tests.cpp:55:2:55:2 | *p | tests.cpp:56:2:56:2 | *p | -| tests.cpp:55:2:55:2 | *p | tests.cpp:57:2:57:2 | *p | -| tests.cpp:57:2:57:2 | *p | tests.cpp:57:2:57:2 | *p | -| tests.cpp:57:2:57:2 | *p | tests.cpp:59:2:59:2 | *p | -| tests.cpp:59:2:59:2 | *p | tests.cpp:59:2:59:2 | *p | -| tests.cpp:59:2:59:2 | *p | tests.cpp:60:2:60:2 | *p | -| tests.cpp:66:23:66:43 | call to XercesDOMParser | tests.cpp:69:2:69:2 | *p | -| tests.cpp:73:23:73:43 | call to XercesDOMParser | tests.cpp:80:2:80:2 | *p | -| tests.cpp:85:24:85:44 | call to XercesDOMParser | tests.cpp:88:3:88:3 | *q | -| tests.cpp:100:24:100:44 | call to XercesDOMParser | tests.cpp:104:3:104:3 | *q | -| tests.cpp:112:39:112:39 | *p | tests.cpp:113:2:113:2 | *p | -| tests.cpp:116:39:116:39 | *p | tests.cpp:117:2:117:2 | *p | -| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:126:18:126:18 | *q | -| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:128:18:128:18 | *q | -| tests.cpp:126:18:126:18 | *q | tests.cpp:112:39:112:39 | *p | -| tests.cpp:128:18:128:18 | *q | tests.cpp:116:39:116:39 | *p | +| tests2.cpp:20:17:20:31 | call to SAXParser | tests2.cpp:22:2:22:2 | *p | provenance | | +| tests2.cpp:33:17:33:31 | call to SAXParser | tests2.cpp:37:2:37:2 | *p | provenance | | +| tests2.cpp:49:12:49:12 | call to SAXParser | tests2.cpp:51:2:51:2 | *p | provenance | | +| tests3.cpp:23:21:23:53 | *call to createXMLReader | tests3.cpp:25:2:25:2 | *p | provenance | | +| tests3.cpp:35:16:35:20 | **p_3_3 | tests3.cpp:38:2:38:6 | *p_3_3 | provenance | | +| tests3.cpp:35:24:35:56 | *call to createXMLReader | tests3.cpp:35:16:35:20 | **p_3_3 | provenance | | +| tests3.cpp:48:16:48:20 | **p_3_5 | tests3.cpp:56:2:56:6 | *p_3_5 | provenance | | +| tests3.cpp:48:24:48:56 | *call to createXMLReader | tests3.cpp:48:16:48:20 | **p_3_5 | provenance | | +| tests3.cpp:60:21:60:53 | *call to createXMLReader | tests3.cpp:63:2:63:2 | *p | provenance | | +| tests3.cpp:67:21:67:53 | *call to createXMLReader | tests3.cpp:70:2:70:2 | *p | provenance | | +| tests5.cpp:27:25:27:38 | *call to createLSParser | tests5.cpp:29:2:29:2 | *p | provenance | | +| tests5.cpp:40:25:40:38 | *call to createLSParser | tests5.cpp:43:2:43:2 | *p | provenance | | +| tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | provenance | | +| tests5.cpp:63:21:63:24 | **g_p2 | tests5.cpp:77:2:77:5 | *g_p2 | provenance | | +| tests5.cpp:70:17:70:30 | *call to createLSParser | tests5.cpp:63:21:63:24 | **g_p2 | provenance | | +| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | provenance | | +| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | provenance | | +| tests5.cpp:83:2:83:2 | *p | tests5.cpp:85:2:85:2 | *p | provenance | | +| tests5.cpp:85:2:85:2 | *p | tests5.cpp:86:2:86:2 | *p | provenance | | +| tests5.cpp:86:2:86:2 | *p | tests5.cpp:88:2:88:2 | *p | provenance | | +| tests5.cpp:88:2:88:2 | *p | tests5.cpp:89:2:89:2 | *p | provenance | | +| tests.cpp:15:23:15:43 | call to XercesDOMParser | tests.cpp:17:2:17:2 | *p | provenance | | +| tests.cpp:28:23:28:43 | call to XercesDOMParser | tests.cpp:31:2:31:2 | *p | provenance | | +| tests.cpp:35:23:35:43 | call to XercesDOMParser | tests.cpp:37:2:37:2 | *p | provenance | | +| tests.cpp:37:2:37:2 | *p | tests.cpp:37:2:37:2 | *p | provenance | | +| tests.cpp:37:2:37:2 | *p | tests.cpp:38:2:38:2 | *p | provenance | | +| tests.cpp:38:2:38:2 | *p | tests.cpp:38:2:38:2 | *p | provenance | | +| tests.cpp:38:2:38:2 | *p | tests.cpp:39:2:39:2 | *p | provenance | | +| tests.cpp:51:23:51:43 | call to XercesDOMParser | tests.cpp:53:2:53:2 | *p | provenance | | +| tests.cpp:53:2:53:2 | *p | tests.cpp:53:2:53:2 | *p | provenance | | +| tests.cpp:53:2:53:2 | *p | tests.cpp:55:2:55:2 | *p | provenance | | +| tests.cpp:55:2:55:2 | *p | tests.cpp:55:2:55:2 | *p | provenance | | +| tests.cpp:55:2:55:2 | *p | tests.cpp:56:2:56:2 | *p | provenance | | +| tests.cpp:55:2:55:2 | *p | tests.cpp:57:2:57:2 | *p | provenance | | +| tests.cpp:57:2:57:2 | *p | tests.cpp:57:2:57:2 | *p | provenance | | +| tests.cpp:57:2:57:2 | *p | tests.cpp:59:2:59:2 | *p | provenance | | +| tests.cpp:59:2:59:2 | *p | tests.cpp:59:2:59:2 | *p | provenance | | +| tests.cpp:59:2:59:2 | *p | tests.cpp:60:2:60:2 | *p | provenance | | +| tests.cpp:66:23:66:43 | call to XercesDOMParser | tests.cpp:69:2:69:2 | *p | provenance | | +| tests.cpp:73:23:73:43 | call to XercesDOMParser | tests.cpp:80:2:80:2 | *p | provenance | | +| tests.cpp:85:24:85:44 | call to XercesDOMParser | tests.cpp:88:3:88:3 | *q | provenance | | +| tests.cpp:100:24:100:44 | call to XercesDOMParser | tests.cpp:104:3:104:3 | *q | provenance | | +| tests.cpp:112:39:112:39 | *p | tests.cpp:113:2:113:2 | *p | provenance | | +| tests.cpp:116:39:116:39 | *p | tests.cpp:117:2:117:2 | *p | provenance | | +| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:126:18:126:18 | *q | provenance | | +| tests.cpp:122:23:122:43 | call to XercesDOMParser | tests.cpp:128:18:128:18 | *q | provenance | | +| tests.cpp:126:18:126:18 | *q | tests.cpp:112:39:112:39 | *p | provenance | | +| tests.cpp:128:18:128:18 | *q | tests.cpp:116:39:116:39 | *p | provenance | | nodes | tests2.cpp:20:17:20:31 | call to SAXParser | semmle.label | call to SAXParser | | tests2.cpp:22:2:22:2 | *p | semmle.label | *p | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected index f587e772b65..9b02e597ba2 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-807/semmle/TaintedCondition/TaintedCondition.expected @@ -1,5 +1,5 @@ edges -| test.cpp:20:29:20:47 | *call to getenv | test.cpp:24:10:24:35 | ! ... | +| test.cpp:20:29:20:47 | *call to getenv | test.cpp:24:10:24:35 | ! ... | provenance | | nodes | test.cpp:20:29:20:47 | *call to getenv | semmle.label | *call to getenv | | test.cpp:24:10:24:35 | ! ... | semmle.label | ! ... | diff --git a/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.expected b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.expected new file mode 100644 index 00000000000..50b8f1b9676 --- /dev/null +++ b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.expected @@ -0,0 +1,85 @@ +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const iterator)... | | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const iterator)... | | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const vector)... | | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const vector)... | | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (reference dereference) | | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (reference dereference) | | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 5 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__range) | 4: declaration | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 9 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__begin) | 5: (__range) | +| | forstmt01.cpp:3:6:3:14 | for_loop1 | 0 | 12 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__end) | 5: (__end) | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const iterator)... | | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const iterator)... | | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const vector)... | | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (const vector)... | | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (reference dereference) | | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 1 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | (reference dereference) | | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 8 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__range) | 4: declaration | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 12 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__begin) | 6: (__range) | +| | forstmt02.cpp:3:6:3:14 | for_loop2 | 0 | 15 | file://:0:0:0:0 | file://:0:0:0:0 | file://:0:0:0:0 | initializer for (__end) | 6: (__end) | +| forstmt | forstmt.h:2:8:2:8 | operator= | 2 | 1 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | operator= | | +| forstmt | forstmt.h:2:8:2:8 | operator= | 2 | 1 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | forstmt.h:2:8:2:8 | operator= | | +| forstmt | forstmt.h:3:12:3:12 | operator= | 3 | 1 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | operator= | | +| forstmt | forstmt.h:3:12:3:12 | operator= | 3 | 1 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | forstmt.h:3:12:3:12 | operator= | | +| forstmt | forstmt.h:4:19:4:28 | operator++ | 4 | 1 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | operator++ | | +| forstmt | forstmt.h:4:19:4:28 | operator++ | 4 | 1 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | forstmt.h:4:19:4:28 | operator++ | | +| forstmt | forstmt.h:5:12:5:20 | operator* | 5 | 1 | forstmt.h:5:12:5:20 | forstmt.h:5:12:5:20 | forstmt.h:5:12:5:20 | operator* | | +| forstmt | forstmt.h:5:12:5:20 | operator* | 5 | 1 | forstmt.h:5:12:5:20 | forstmt.h:5:12:5:20 | forstmt.h:5:12:5:20 | operator* | | +| forstmt | forstmt.h:7:14:7:23 | operator!= | 7 | 1 | forstmt.h:7:14:7:23 | forstmt.h:7:14:7:23 | forstmt.h:7:14:7:23 | operator!= | | +| forstmt | forstmt.h:7:14:7:23 | operator!= | 7 | 1 | forstmt.h:7:14:7:23 | forstmt.h:7:14:7:23 | forstmt.h:7:14:7:23 | operator!= | | +| forstmt | forstmt.h:10:14:10:18 | begin | 10 | 1 | forstmt.h:10:14:10:18 | forstmt.h:10:14:10:18 | forstmt.h:10:14:10:18 | begin | | +| forstmt | forstmt.h:10:14:10:18 | begin | 10 | 1 | forstmt.h:10:14:10:18 | forstmt.h:10:14:10:18 | forstmt.h:10:14:10:18 | begin | | +| forstmt | forstmt.h:11:14:11:16 | end | 11 | 1 | forstmt.h:11:14:11:16 | forstmt.h:11:14:11:16 | forstmt.h:11:14:11:16 | end | | +| forstmt | forstmt.h:11:14:11:16 | end | 11 | 1 | forstmt.h:11:14:11:16 | forstmt.h:11:14:11:16 | forstmt.h:11:14:11:16 | end | | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 3 | 1 | forstmt01.cpp:3:39:9:1 | forstmt01.cpp:3:39:9:1 | forstmt01.cpp:3:39:9:1 | { ... } | 4: for(...:...) ... | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 4 | 2 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | for(...:...) ... | 4: declaration | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 4 | 3 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | declaration | 5: zs | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 4 | 6 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | declaration | 5: (__range) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 4 | 22 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | forstmt01.cpp:4:5:8:9 | declaration | 5: (__begin) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 1 | forstmt01.cpp:5:18:5:19 | forstmt01.cpp:5:18:5:19 | forstmt01.cpp:5:18:5:19 | (reference to) | | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 1 | forstmt01.cpp:5:18:6:9 | forstmt01.cpp:5:18:6:9 | forstmt01.cpp:5:18:6:9 | (reference dereference) | | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 1 | forstmt01.cpp:5:18:6:9 | forstmt01.cpp:5:18:6:9 | forstmt01.cpp:5:18:6:9 | (reference dereference) | | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 4 | forstmt01.cpp:5:18:5:19 | forstmt01.cpp:5:18:5:19 | forstmt01.cpp:5:18:5:19 | zs | 0: initializer for (__range) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 7 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | (__range) | 5: call to begin | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 8 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | call to begin | 0: initializer for (__begin) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 10 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | (__range) | 5: call to end | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 11 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | call to end | 0: initializer for (__end) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:14:5:14 | forstmt01.cpp:5:14:5:14 | forstmt01.cpp:5:14:5:14 | initializer for z | 7: { ... } | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | (__begin) | 5: call to operator!= | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | (__begin) | 5: call to operator* | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | (__begin) | 5: call to operator++ | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | (__end) | 5: (__begin) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | call to operator!= | 9: return ... | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | call to operator!= | 4: declaration | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | call to operator* | 5: initializer for z | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 5 | 22 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | forstmt01.cpp:5:18:5:18 | call to operator++ | 5: (__end) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 7 | 22 | forstmt01.cpp:7:9:8:9 | forstmt01.cpp:7:9:8:9 | forstmt01.cpp:7:9:8:9 | { ... } | 5: (__begin) | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 9 | 23 | forstmt01.cpp:9:1:9:1 | forstmt01.cpp:9:1:9:1 | forstmt01.cpp:9:1:9:1 | return ... | 9: for_loop1 | +| forstmt01 | forstmt01.cpp:3:6:3:14 | for_loop1 | 9 | 24 | forstmt01.cpp:3:6:3:14 | forstmt01.cpp:3:6:3:14 | forstmt01.cpp:3:6:3:14 | for_loop1 | | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 3 | 1 | forstmt02.cpp:3:39:10:1 | forstmt02.cpp:3:39:10:1 | forstmt02.cpp:3:39:10:1 | { ... } | 4: for(...:...) ... | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 4 | 2 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | for(...:...) ... | 5: declaration | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 4 | 6 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | declaration | 6: zs | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 4 | 9 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | declaration | 6: (__range) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 4 | 25 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | forstmt02.cpp:4:5:9:9 | declaration | 6: (__begin) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 5 | 3 | forstmt02.cpp:5:9:5:18 | forstmt02.cpp:5:9:5:18 | forstmt02.cpp:5:9:5:18 | declaration | 5: initializer for y | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 5 | 4 | forstmt02.cpp:5:16:5:17 | forstmt02.cpp:5:16:5:17 | forstmt02.cpp:5:16:5:17 | initializer for y | 5: x | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 5 | 5 | forstmt02.cpp:5:17:5:17 | forstmt02.cpp:5:17:5:17 | forstmt02.cpp:5:17:5:17 | x | 4: declaration | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 1 | forstmt02.cpp:6:18:6:19 | forstmt02.cpp:6:18:6:19 | forstmt02.cpp:6:18:6:19 | (reference to) | | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 1 | forstmt02.cpp:6:18:7:9 | forstmt02.cpp:6:18:7:9 | forstmt02.cpp:6:18:7:9 | (reference dereference) | | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 1 | forstmt02.cpp:6:18:7:9 | forstmt02.cpp:6:18:7:9 | forstmt02.cpp:6:18:7:9 | (reference dereference) | | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 7 | forstmt02.cpp:6:18:6:19 | forstmt02.cpp:6:18:6:19 | forstmt02.cpp:6:18:6:19 | zs | 0: initializer for (__range) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 10 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | (__range) | 6: call to begin | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 11 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | call to begin | 0: initializer for (__begin) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 13 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | (__range) | 6: call to end | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 14 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | call to end | 0: initializer for (__end) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:14:6:14 | forstmt02.cpp:6:14:6:14 | forstmt02.cpp:6:14:6:14 | initializer for z | 8: { ... } | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | (__begin) | 6: call to operator!= | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | (__begin) | 6: call to operator* | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | (__begin) | 6: call to operator++ | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | (__end) | 6: (__begin) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | call to operator!= | 10: return ... | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | call to operator!= | 4: declaration | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | call to operator* | 6: initializer for z | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 6 | 25 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | forstmt02.cpp:6:18:6:18 | call to operator++ | 6: (__end) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 8 | 25 | forstmt02.cpp:8:9:9:9 | forstmt02.cpp:8:9:9:9 | forstmt02.cpp:8:9:9:9 | { ... } | 6: (__begin) | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 10 | 26 | forstmt02.cpp:10:1:10:1 | forstmt02.cpp:10:1:10:1 | forstmt02.cpp:10:1:10:1 | return ... | 10: for_loop2 | +| forstmt02 | forstmt02.cpp:3:6:3:14 | for_loop2 | 10 | 27 | forstmt02.cpp:3:6:3:14 | forstmt02.cpp:3:6:3:14 | forstmt02.cpp:3:6:3:14 | for_loop2 | | diff --git a/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.ql b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.ql new file mode 100644 index 00000000000..190dd3f3fc5 --- /dev/null +++ b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/cfg.ql @@ -0,0 +1,28 @@ +import cpp + +int getCFLine(ControlFlowNode n) { + if n instanceof Function + then + // Functions appear at the end of the control flow, so we get + // nicer results if we take the last position in the function, + // rather than the function's position (which is the start). + result = max(ControlFlowNode c | c.getControlFlowScope() = n | c.getLocation().getStartLine()) + else result = n.getLocation().getStartLine() +} + +string getASuccessorOrNone(ControlFlowNode n) { + if exists(n.getASuccessor()) + then + exists(ControlFlowNode s, string trueSucc, string falseSucc | + s = n.getASuccessor() and + (if s = n.getATrueSuccessor() then trueSucc = " " else trueSucc = "") and + (if s = n.getAFalseSuccessor() then falseSucc = " " else falseSucc = "") and + result = trueSucc + falseSucc + getCFLine(s) + ": " + s.toString() + ) + else result = "" +} + +from ControlFlowNode n +select n.getLocation().getFile().getShortName(), n.getControlFlowScope(), getCFLine(n), + count(n.getAPredecessor*()), // This helps order things sensibly + n.getLocation(), n, getASuccessorOrNone(n) diff --git a/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt.h b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt.h new file mode 100644 index 00000000000..9333cdfc2fa --- /dev/null +++ b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt.h @@ -0,0 +1,12 @@ +template +struct vector { + struct iterator { + iterator& operator++(); + T& operator*() const; + + bool operator!=(iterator right) const; + }; + + iterator begin() const; + iterator end() const; +}; diff --git a/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt01.cpp b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt01.cpp new file mode 100644 index 00000000000..d805e807b9b --- /dev/null +++ b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt01.cpp @@ -0,0 +1,9 @@ +#include "forstmt.h" + +void for_loop1(int x, vector zs) { + for ( + auto z : zs + ) + { + } +} diff --git a/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt02.cpp b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt02.cpp new file mode 100644 index 00000000000..cbbcc3eaa41 --- /dev/null +++ b/cpp/ql/test/successor-tests/forstmt/rangebasedforstmt/forstmt02.cpp @@ -0,0 +1,12 @@ +#include "forstmt.h" + +void for_loop2(int x, vector zs) { + for ( + int y = x; + auto z : zs + ) + { + } +} + +// semmle-extractor-options: -std=c++20 diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs index d72290fc083..1788f525367 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BuildActions.cs @@ -140,7 +140,7 @@ namespace Semmle.Autobuild.Shared /// /// Returns the file name and extension of the specified path string. /// - [return: NotNullIfNotNull("path")] + [return: NotNullIfNotNull(nameof(path))] string? GetFileName(string? path); /// diff --git a/csharp/codeql-extractor.yml b/csharp/codeql-extractor.yml index 1990b2080e7..0f65d9bc2e5 100644 --- a/csharp/codeql-extractor.yml +++ b/csharp/codeql-extractor.yml @@ -6,6 +6,9 @@ version: 1.22.1 column_kind: "utf16" extra_env_vars: DOTNET_GENERATE_ASPNET_CERTIFICATE: "false" +build_modes: + - autobuild + - manual github_api_languages: - C# scc_languages: diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index b7b301fd2de..43681e0a264 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -40,5 +40,5 @@ MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,,92,,,,,7, SourceGenerators,,,4,,,,,,,,,,,,,,,4, -System,67,25,11835,,8,8,9,,,4,5,,33,1,17,3,4,9896,1939 +System,67,25,11862,,8,8,9,,,4,5,,33,1,17,3,4,9896,1966 Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 0b898c67bda..9219a2a663f 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",25,11835,67,9 + System,"``System.*``, ``System``",25,11862,67,9 Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32.SafeHandles``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",6,1541,148, - Totals,,31,13383,409,9 + Totals,,31,13410,409,9 diff --git a/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/old.dbscheme b/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/old.dbscheme new file mode 100644 index 00000000000..c9ee11bd1ee --- /dev/null +++ b/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/old.dbscheme @@ -0,0 +1,2100 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_field | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/semmlecode.csharp.dbscheme b/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..f145a9a7275 --- /dev/null +++ b/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/semmlecode.csharp.dbscheme @@ -0,0 +1,2094 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_field | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/upgrade.properties b/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/upgrade.properties new file mode 100644 index 00000000000..580afc7c736 --- /dev/null +++ b/csharp/downgrades/c9ee11bd1ee96e925a35cedff000be924634447f/upgrade.properties @@ -0,0 +1,3 @@ +description: Remove `compilation_info`. +compatibility: backwards +compilation_info.rel: delete diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 9a29a8c3cda..e93db44fd36 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Semmle.Util; using Semmle.Util.Logging; @@ -14,7 +15,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// /// Main implementation of the build analysis. /// - public sealed class DependencyManager : IDisposable + public sealed partial class DependencyManager : IDisposable { private readonly AssemblyCache assemblyCache; private readonly ILogger logger; @@ -116,8 +117,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching bool.TryParse(webViewExtractionOption, out var shouldExtractWebViews) && shouldExtractWebViews) { + CompilationInfos.Add(("WebView extraction enabled", "1")); GenerateSourceFilesFromWebViews(allNonBinaryFiles); } + else + { + CompilationInfos.Add(("WebView extraction enabled", "0")); + } + + CompilationInfos.Add(("UseWPF set", fileContent.UseWpf ? "1" : "0")); + CompilationInfos.Add(("UseWindowsForms set", fileContent.UseWindowsForms ? "1" : "0")); GenerateSourceFileFromImplicitUsings(); @@ -133,6 +142,17 @@ namespace Semmle.Extraction.CSharp.DependencyFetching logger.LogInfo($"{conflictedReferences,align} resolved assembly conflicts"); logger.LogInfo($"{dotnetFrameworkVersionVariantCount,align} restored .NET framework variants"); logger.LogInfo($"Build analysis completed in {DateTime.Now - startTime}"); + + CompilationInfos.AddRange([ + ("Source files on filesystem", nonGeneratedSources.Count.ToString()), + ("Source files generated", generatedSources.Count.ToString()), + ("Solution files on filesystem", allSolutions.Count.ToString()), + ("Project files on filesystem", allProjects.Count.ToString()), + ("Resolved references", usedReferences.Keys.Count.ToString()), + ("Unresolved references", unresolvedReferences.Count.ToString()), + ("Resolved assembly conflicts", conflictedReferences.ToString()), + ("Restored .NET framework variants", dotnetFrameworkVersionVariantCount.ToString()), + ]); } private HashSet AddFrameworkDlls(HashSet dllPaths) @@ -150,8 +170,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { try { - var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger); - nuget.InstallPackages(); + using (var nuget = new NugetPackages(sourceDir.FullName, legacyPackageDirectory, logger)) + { + var count = nuget.InstallPackages(); + + if (nuget.PackageCount > 0) + { + CompilationInfos.Add(("packages.config files", nuget.PackageCount.ToString())); + CompilationInfos.Add(("Successfully restored packages.config files", count.ToString())); + } + } var nugetPackageDlls = legacyPackageDirectory.DirInfo.GetFiles("*.dll", new EnumerationOptions { RecurseSubdirectories = true }); var nugetPackageDllPaths = nugetPackageDlls.Select(f => f.FullName).ToHashSet(); @@ -390,7 +418,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var allPackageDirectories = GetAllPackageDirectories(); logger.LogInfo($"Restored {allPackageDirectories.Count} packages"); - logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.asset.json files"); + logger.LogInfo($"Found {dependencies.Packages.Count} packages in project.assets.json files"); allPackageDirectories .Where(package => !dependencies.Packages.Contains(package)) @@ -417,6 +445,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching "Microsoft.Extensions.DependencyInjection", "Microsoft.Extensions.Hosting", "Microsoft.Extensions.Logging" }); } + if (fileContent.UseWindowsForms) + { + usings.UnionWith(new[] { "System.Drawing", "System.Windows.Forms" }); + } + usings.UnionWith(fileContent.CustomImplicitUsings); logger.LogInfo($"Generating source file for implicit usings. Namespaces: {string.Join(", ", usings.OrderBy(u => u))}"); @@ -629,6 +662,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// public IEnumerable UnresolvedReferences => unresolvedReferences.Select(r => r.Key); + /// + /// List of `(key, value)` tuples, that are stored in the DB for telemetry purposes. + /// + public List<(string, string)> CompilationInfos { get; } = new List<(string, string)>(); + /// /// Record that a particular reference couldn't be resolved. /// Note that this records at most one project file per missing reference. @@ -699,15 +737,22 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// A list of paths to solution files. private IEnumerable RestoreSolutions(IEnumerable solutions, out IEnumerable assets) { + var successCount = 0; var assetFiles = new List(); var projects = solutions.SelectMany(solution => { logger.LogInfo($"Restoring solution {solution}..."); var res = dotnet.Restore(new(solution, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); + if (res.Success) + { + successCount++; + } assetFiles.AddRange(res.AssetsFilePaths); return res.RestoredProjects; - }); + }).ToList(); assets = assetFiles; + CompilationInfos.Add(("Successfully restored solution files", successCount.ToString())); + CompilationInfos.Add(("Restored projects through solution files", projects.Count.ToString())); return projects; } @@ -719,23 +764,73 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// A list of paths to project files. private void RestoreProjects(IEnumerable projects, out IEnumerable assets) { + var successCount = 0; var assetFiles = new List(); + var sync = new object(); Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, project => { logger.LogInfo($"Restoring project {project}..."); var res = dotnet.Restore(new(project, packageDirectory.DirInfo.FullName, ForceDotnetRefAssemblyFetching: true)); - assetFiles.AddRange(res.AssetsFilePaths); + lock (sync) + { + if (res.Success) + { + successCount++; + } + assetFiles.AddRange(res.AssetsFilePaths); + } }); assets = assetFiles; + CompilationInfos.Add(("Successfully restored project files", successCount.ToString())); + } + + [GeneratedRegex(@"^(.+)\.(\d+\.\d+\.\d+(-(.+))?)$", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex LegacyNugetPackage(); + + + private static IEnumerable GetRestoredPackageDirectoryNames(DirectoryInfo root) + { + return Directory.GetDirectories(root.FullName) + .Select(d => Path.GetFileName(d).ToLowerInvariant()); + } + + private IEnumerable GetRestoredLegacyPackageNames() + { + var oldPackageDirectories = GetRestoredPackageDirectoryNames(legacyPackageDirectory.DirInfo); + foreach (var oldPackageDirectory in oldPackageDirectories) + { + // nuget install restores packages to 'packagename.version' folders (dotnet restore to 'packagename/version' folders) + // typical folder names look like: + // newtonsoft.json.13.0.3 + // there are more complex ones too, such as: + // runtime.tizen.4.0.0-armel.Microsoft.NETCore.DotNetHostResolver.2.0.0-preview2-25407-01 + + var match = LegacyNugetPackage().Match(oldPackageDirectory); + if (!match.Success) + { + logger.LogWarning($"Package directory '{oldPackageDirectory}' doesn't match the expected pattern."); + continue; + } + + yield return match.Groups[1].Value.ToLowerInvariant(); + } } private void DownloadMissingPackages(List allFiles, ISet dllPaths) { - var alreadyDownloadedPackages = Directory.GetDirectories(packageDirectory.DirInfo.FullName) - .Select(d => Path.GetFileName(d).ToLowerInvariant()); - var notYetDownloadedPackages = fileContent.AllPackages - .Except(alreadyDownloadedPackages) - .ToList(); + var alreadyDownloadedPackages = GetRestoredPackageDirectoryNames(packageDirectory.DirInfo); + var alreadyDownloadedLegacyPackages = GetRestoredLegacyPackageNames(); + + var notYetDownloadedPackages = new HashSet(fileContent.AllPackages); + foreach (var alreadyDownloadedPackage in alreadyDownloadedPackages) + { + notYetDownloadedPackages.Remove(alreadyDownloadedPackage); + } + foreach (var alreadyDownloadedLegacyPackage in alreadyDownloadedLegacyPackages) + { + notYetDownloadedPackages.Remove(alreadyDownloadedLegacyPackage); + } + if (notYetDownloadedPackages.Count == 0) { return; @@ -767,6 +862,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching logger.LogInfo($"Using nuget.config file {nugetConfig}."); } + CompilationInfos.Add(("Fallback nuget restore", notYetDownloadedPackages.Count.ToString())); + + var successCount = 0; + var sync = new object(); + Parallel.ForEach(notYetDownloadedPackages, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, package => { logger.LogInfo($"Restoring package {package}..."); @@ -797,10 +897,18 @@ namespace Semmle.Extraction.CSharp.DependencyFetching if (!res.Success) { logger.LogInfo($"Failed to restore nuget package {package}"); + return; } } + + lock (sync) + { + successCount++; + } }); + CompilationInfos.Add(("Successfully ran fallback nuget restore", successCount.ToString())); + dllPaths.Add(missingPackageDirectory.DirInfo.FullName); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs index c06eaec270f..d4925ecbe47 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs @@ -61,6 +61,28 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } } + private bool useWpf = false; + + public bool UseWpf + { + get + { + initialize.Run(); + return useWpf; + } + } + + private bool useWindowsForms = false; + + public bool UseWindowsForms + { + get + { + initialize.Run(); + return useWindowsForms; + } + } + private bool isLegacyProjectStructureUsed = false; public bool IsLegacyProjectStructureUsed @@ -105,10 +127,10 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public FileContent(ILogger logger, IEnumerable files) : this(logger, files, new UnsafeFileReader()) { } - private static string GetGroup(ReadOnlySpan input, ValueMatch valueMatch, string groupPrefix, bool toLower) + private static string GetGroup(ReadOnlySpan input, ValueMatch valueMatch, string groupPrefix) { var match = input.Slice(valueMatch.Index, valueMatch.Length); - var includeIndex = match.IndexOf(groupPrefix, StringComparison.InvariantCultureIgnoreCase); + var includeIndex = match.IndexOf(groupPrefix, StringComparison.OrdinalIgnoreCase); if (includeIndex == -1) { return string.Empty; @@ -119,14 +141,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching var quoteIndex1 = match.IndexOf("\""); var quoteIndex2 = match.Slice(quoteIndex1 + 1).IndexOf("\""); - var result = match.Slice(quoteIndex1 + 1, quoteIndex2).ToString(); - - if (toLower) - { - result = result.ToLowerInvariant(); - } - - return result; + return match.Slice(quoteIndex1 + 1, quoteIndex2).ToString(); } private static bool IsGroupMatch(ReadOnlySpan line, Regex regex, string groupPrefix, string value) @@ -134,7 +149,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching foreach (var valueMatch in regex.EnumerateMatches(line)) { // We can't get the group from the ValueMatch, so doing it manually: - if (GetGroup(line, valueMatch, groupPrefix, toLower: true) == value.ToLowerInvariant()) + if (string.Equals(GetGroup(line, valueMatch, groupPrefix), value, StringComparison.OrdinalIgnoreCase)) { return true; } @@ -142,24 +157,35 @@ namespace Semmle.Extraction.CSharp.DependencyFetching return false; } + private void AddPackageReference(ReadOnlySpan line, string groupName, Func regex) + { + foreach (var valueMatch in regex().EnumerateMatches(line)) + { + // We can't get the group from the ValueMatch, so doing it manually: + var packageName = GetGroup(line, valueMatch, groupName).ToLowerInvariant(); + if (!string.IsNullOrEmpty(packageName)) + { + allPackages.Add(packageName); + } + } + } + private void DoInitialize() { foreach (var file in files) { try { + var isPackagesConfig = file.EndsWith("packages.config", StringComparison.OrdinalIgnoreCase); + foreach (ReadOnlySpan line in unsafeFileReader.ReadLines(file)) { - // Find all the packages. - foreach (var valueMatch in PackageReference().EnumerateMatches(line)) + AddPackageReference(line, "Include", PackageReference); + + if (isPackagesConfig) { - // We can't get the group from the ValueMatch, so doing it manually: - var packageName = GetGroup(line, valueMatch, "Include", toLower: true); - if (!string.IsNullOrEmpty(packageName)) - { - allPackages.Add(packageName); - } + AddPackageReference(line, "id", LegacyPackageReference); } // Determine if ASP.NET is used. @@ -167,16 +193,23 @@ namespace Semmle.Extraction.CSharp.DependencyFetching || IsGroupMatch(line, ProjectSdk(), "Sdk", "Microsoft.NET.Sdk.Web") || IsGroupMatch(line, FrameworkReference(), "Include", "Microsoft.AspNetCore.App"); - // Determine if implicit usings are used. useImplicitUsings = useImplicitUsings - || line.Contains("enable".AsSpan(), StringComparison.Ordinal) - || line.Contains("true".AsSpan(), StringComparison.Ordinal); + || line.Contains("enable".AsSpan(), StringComparison.OrdinalIgnoreCase) + || line.Contains("true".AsSpan(), StringComparison.OrdinalIgnoreCase); + + // Determine if WPF is used. + useWpf = useWpf + || line.Contains("true".AsSpan(), StringComparison.OrdinalIgnoreCase); + + // Determine if Windows Forms is used. + useWindowsForms = useWindowsForms + || line.Contains("true".AsSpan(), StringComparison.OrdinalIgnoreCase); // Find all custom implicit usings. foreach (var valueMatch in CustomImplicitUsingDeclarations().EnumerateMatches(line)) { - var ns = GetGroup(line, valueMatch, "Include", toLower: false); + var ns = GetGroup(line, valueMatch, "Include"); if (!string.IsNullOrEmpty(ns)) { implicitUsingNamespaces.Add(ns); @@ -202,6 +235,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching [GeneratedRegex("(?", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] private static partial Regex PackageReference(); + [GeneratedRegex("(?", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex LegacyPackageReference(); + [GeneratedRegex("(?", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] private static partial Regex FrameworkReference(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IProgressMonitor.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IProgressMonitor.cs deleted file mode 100644 index e5ce6ffb862..00000000000 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IProgressMonitor.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Semmle.Util.Logging; - -namespace Semmle.Extraction.CSharp.DependencyFetching -{ - public interface IProgressMonitor - { - void Log(Severity severity, string message); - } -} diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs index 52e5ccc4ff5..2183daf09cc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackages.cs @@ -1,8 +1,8 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; -using Microsoft.Build.Framework; using Semmle.Util; namespace Semmle.Extraction.CSharp.DependencyFetching @@ -12,7 +12,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Locates packages in a source tree and downloads all of the /// referenced assemblies to a temp folder. /// - internal class NugetPackages + internal class NugetPackages : IDisposable { private readonly string? nugetExe; private readonly Util.Logging.ILogger logger; @@ -22,6 +22,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// private readonly FileInfo[] packageFiles; + public int PackageCount => packageFiles.Length; + + private readonly string? backupNugetConfig; + private readonly string? nugetConfigPath; + /// /// The computed packages directory. /// This will be in the Temp location @@ -45,6 +50,41 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { logger.LogInfo($"Found {packageFiles.Length} packages.config files, trying to use nuget.exe for package restore"); nugetExe = ResolveNugetExe(sourceDir); + if (HasNoPackageSource()) + { + // We only modify or add a top level nuget.config file + nugetConfigPath = Path.Combine(sourceDir, "nuget.config"); + try + { + if (File.Exists(nugetConfigPath)) + { + var tempFolderPath = FileUtils.GetTemporaryWorkingDirectory(out var _); + + do + { + backupNugetConfig = Path.Combine(tempFolderPath, Path.GetRandomFileName()); + } + while (File.Exists(backupNugetConfig)); + File.Copy(nugetConfigPath, backupNugetConfig, true); + } + else + { + File.WriteAllText(nugetConfigPath, + """ + + + + + + """); + } + AddDefaultPackageSource(nugetConfigPath); + } + catch (Exception e) + { + logger.LogError($"Failed to add default package source to {nugetConfigPath}: {e}"); + } + } } else { @@ -105,7 +145,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching /// Restore all files in a specified package. /// /// The package file. - private void RestoreNugetPackage(string package) + private bool TryRestoreNugetPackage(string package) { logger.LogInfo($"Restoring file {package}..."); @@ -116,15 +156,15 @@ namespace Semmle.Extraction.CSharp.DependencyFetching */ string exe, args; - if (Util.Win32.IsWindows()) + if (Win32.IsWindows()) { exe = nugetExe!; - args = string.Format("install -OutputDirectory {0} {1}", packageDirectory, package); + args = $"install -OutputDirectory {packageDirectory} {package}"; } else { exe = "mono"; - args = string.Format("{0} install -OutputDirectory {1} {2}", nugetExe, packageDirectory, package); + args = $"{nugetExe} install -OutputDirectory {packageDirectory} {package}"; } var pi = new ProcessStartInfo(exe, args) @@ -141,21 +181,102 @@ namespace Semmle.Extraction.CSharp.DependencyFetching if (exitCode != 0) { logger.LogError($"Command {pi.FileName} {pi.Arguments} failed with exit code {exitCode}"); + return false; } else { logger.LogInfo($"Restored file {package}"); + return true; } } /// /// Download the packages to the temp folder. /// - public void InstallPackages() + public int InstallPackages() { - foreach (var package in packageFiles) + return packageFiles.Count(package => TryRestoreNugetPackage(package.FullName)); + } + + private bool HasNoPackageSource() + { + if (Win32.IsWindows()) { - RestoreNugetPackage(package.FullName); + return false; + } + + try + { + logger.LogInfo("Checking if default package source is available..."); + RunMonoNugetCommand("sources list -ForceEnglishOutput", out var stdout); + if (stdout.All(line => line != "No sources found.")) + { + return false; + } + + return true; + } + catch (Exception e) + { + logger.LogWarning($"Failed to check if default package source is added: {e}"); + return false; + } + } + + private void RunMonoNugetCommand(string command, out IList stdout) + { + var exe = "mono"; + var args = $"{nugetExe} {command}"; + var pi = new ProcessStartInfo(exe, args) + { + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false + }; + + var threadId = Environment.CurrentManagedThreadId; + void onOut(string s) => logger.LogInfo(s, threadId); + void onError(string s) => logger.LogError(s, threadId); + pi.ReadOutput(out stdout, onOut, onError); + } + + private void AddDefaultPackageSource(string nugetConfig) + { + logger.LogInfo("Adding default package source..."); + RunMonoNugetCommand($"sources add -Name DefaultNugetOrg -Source https://api.nuget.org/v3/index.json -ConfigFile \"{nugetConfig}\"", out var _); + } + + public void Dispose() + { + if (nugetConfigPath is null) + { + return; + } + + try + { + if (backupNugetConfig is null) + { + logger.LogInfo("Removing nuget.config file"); + File.Delete(nugetConfigPath); + return; + } + + logger.LogInfo("Reverting nuget.config file content"); + // The content of the original nuget.config file is reverted without changing the file's attributes or casing: + using (var backup = File.OpenRead(backupNugetConfig)) + using (var current = File.OpenWrite(nugetConfigPath)) + { + current.SetLength(0); // Truncate file + backup.CopyTo(current); // Restore original content + } + + logger.LogInfo("Deleting backup nuget.config file"); + File.Delete(backupNugetConfig); + } + catch (Exception exc) + { + logger.LogError($"Failed to restore original nuget.config file: {exc}"); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs index a1c96cc964e..598e3e7e1f7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Razor.cs @@ -55,7 +55,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching public IEnumerable GenerateFiles(IEnumerable cshtmls, IEnumerable references, string workingDirectory) { var name = Guid.NewGuid().ToString("N").ToUpper(); - var tempPath = FileUtils.GetTemporaryWorkingDirectory(out var _); + var tempPath = FileUtils.GetTemporaryWorkingDirectory(out var shouldCleanUp); var analyzerConfig = Path.Combine(tempPath, $"{name}.txt"); var dllPath = Path.Combine(tempPath, $"{name}.dll"); var cscArgsPath = Path.Combine(tempPath, $"{name}.rsp"); @@ -105,21 +105,24 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } finally { - DeleteFile(analyzerConfig); - DeleteFile(dllPath); - DeleteFile(cscArgsPath); + if (shouldCleanUp) + { + DeleteFile(analyzerConfig); + DeleteFile(dllPath); + DeleteFile(cscArgsPath); + } } } - private static void DeleteFile(string path) + private void DeleteFile(string path) { try { File.Delete(path); } - catch + catch (Exception exc) { - // Ignore + logger.LogWarning($"Failed to delete file {path}: {exc}"); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index 6e2f913873a..115a8d418b6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; +using Semmle.Extraction.CSharp.DependencyFetching; using Semmle.Util; using Semmle.Util.Logging; @@ -12,7 +13,6 @@ namespace Semmle.Extraction.CSharp.Standalone { public static class Extractor { - private static IEnumerable GetResolvedReferencesStandalone(IEnumerable referencePaths, BlockingCollection references) { return referencePaths.Select(path => () => @@ -24,8 +24,7 @@ namespace Semmle.Extraction.CSharp.Standalone private static void AnalyseStandalone( StandaloneAnalyser analyser, - IEnumerable sources, - IEnumerable referencePaths, + ExtractionInput extractionInput, CommonOptions options, IProgressMonitor progressMonitor, Stopwatch stopwatch) @@ -35,12 +34,12 @@ namespace Semmle.Extraction.CSharp.Standalone try { CSharp.Extractor.Analyse(stopwatch, analyser, options, - references => GetResolvedReferencesStandalone(referencePaths, references), - (analyser, syntaxTrees) => CSharp.Extractor.ReadSyntaxTrees(sources, analyser, null, null, syntaxTrees), + references => GetResolvedReferencesStandalone(extractionInput.References, references), + (analyser, syntaxTrees) => CSharp.Extractor.ReadSyntaxTrees(extractionInput.Sources, analyser, null, null, syntaxTrees), (syntaxTrees, references) => CSharpCompilation.Create( output.Name, syntaxTrees, references, new CSharpCompilationOptions(OutputKind.ConsoleApplication, allowUnsafe: true) ), - (compilation, options) => analyser.Initialize(output.FullName, compilation, options), + (compilation, options) => analyser.Initialize(output.FullName, extractionInput.CompilationInfos, compilation, options), _ => { }, () => { @@ -73,8 +72,7 @@ namespace Semmle.Extraction.CSharp.Standalone } private static void ExtractStandalone( - IEnumerable sources, - IEnumerable referencePaths, + ExtractionInput extractionInput, IProgressMonitor pm, ILogger logger, CommonOptions options) @@ -88,7 +86,7 @@ namespace Semmle.Extraction.CSharp.Standalone using var analyser = new StandaloneAnalyser(pm, logger, false, pathTransformer); try { - AnalyseStandalone(analyser, sources, referencePaths, options, pm, stopwatch); + AnalyseStandalone(analyser, extractionInput, options, pm, stopwatch); } catch (Exception ex) // lgtm[cs/catch-of-all-exceptions] { @@ -131,6 +129,8 @@ namespace Semmle.Extraction.CSharp.Standalone } } + public record ExtractionInput(IEnumerable Sources, IEnumerable References, IEnumerable<(string, string)> CompilationInfos); + public static ExitCode Run(Options options) { var stopwatch = new Stopwatch(); @@ -138,10 +138,9 @@ namespace Semmle.Extraction.CSharp.Standalone using var logger = new ConsoleLogger(options.Verbosity, logThreadId: true); logger.Log(Severity.Info, "Extracting C# in buildless mode"); - using var a = new Analysis(logger, options); - var sourceFileCount = a.Extraction.Sources.Count; + using var dependencyManager = new DependencyManager(options.SrcDir, options.Dependencies, logger); - if (sourceFileCount == 0) + if (!dependencyManager.AllSourceFiles.Any()) { logger.Log(Severity.Error, "No source files found"); return ExitCode.Errors; @@ -152,8 +151,7 @@ namespace Semmle.Extraction.CSharp.Standalone logger.Log(Severity.Info, ""); logger.Log(Severity.Info, "Extracting..."); ExtractStandalone( - a.Extraction.Sources, - a.References, + new ExtractionInput(dependencyManager.AllSourceFiles, dependencyManager.ReferenceFiles, dependencyManager.CompilationInfos), new ExtractionProgress(logger), fileLogger, options); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs index 5b9d40ba8a7..fc13b774f4f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Program.cs @@ -5,48 +5,6 @@ using Semmle.Extraction.CSharp.DependencyFetching; namespace Semmle.Extraction.CSharp.Standalone { - /// - /// One independent run of the extractor. - /// - internal class Extraction - { - public Extraction(string directory) - { - Directory = directory; - } - - public string Directory { get; } - public List Sources { get; } = new List(); - }; - - /// - /// Searches for source/references and creates separate extractions. - /// - internal sealed class Analysis : IDisposable - { - public Analysis(ILogger logger, Options options) - { - dependencyManager = new DependencyManager(options.SrcDir, options.Dependencies, logger); - References = dependencyManager.ReferenceFiles; - Extraction = new Extraction(options.SrcDir); - Extraction.Sources.AddRange(dependencyManager.AllSourceFiles); - } - - public IEnumerable References { get; } - - /// - /// The extraction configuration. - /// - public Extraction Extraction { get; } - - private readonly DependencyManager dependencyManager; - - public void Dispose() - { - dependencyManager.Dispose(); - } - }; - public class Program { public static int Main(string[] args) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs index c7b2b9abc6a..b9682e7a183 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; @@ -10,8 +12,16 @@ namespace Semmle.Extraction.CSharp.Entities { internal class Constructor : Method { + private readonly List declaringReferenceSyntax; + private Constructor(Context cx, IMethodSymbol init) - : base(cx, init) { } + : base(cx, init) + { + declaringReferenceSyntax = + Symbol.DeclaringSyntaxReferences + .Select(r => r.GetSyntax()) + .ToList(); + } public override void Populate(TextWriter trapFile) { @@ -22,6 +32,12 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.constructors(this, Symbol.ContainingType.Name, ContainingType, (Constructor)OriginalDefinition); trapFile.constructor_location(this, Location); + if (IsPrimary) + { + // Create a synthetic empty body for primary constructors. + Statements.SyntheticEmptyBlock.Create(Context, this, 0, Location); + } + if (Symbol.IsImplicitlyDeclared) { var lineCounts = new LineCounts() { Total = 2, Code = 1, Comment = 0 }; @@ -33,68 +49,79 @@ namespace Semmle.Extraction.CSharp.Entities protected override void ExtractInitializers(TextWriter trapFile) { // Do not extract initializers for constructed types. - if (!IsSourceDeclaration) - return; - - var syntax = Syntax; - var initializer = syntax?.Initializer; - - if (initializer is null) + // Only extract initializers for constructors with a body and primary constructors. + if (Block is null && ExpressionBody is null && !IsPrimary || + !IsSourceDeclaration) { - if (Symbol.MethodKind is MethodKind.Constructor) + return; + } + + if (OrdinaryConstructorSyntax?.Initializer is ConstructorInitializerSyntax initializer) + { + ITypeSymbol initializerType; + var initializerInfo = Context.GetSymbolInfo(initializer); + + switch (initializer.Kind()) { - var baseType = Symbol.ContainingType.BaseType; - if (baseType is null) - { - if (Symbol.ContainingType.SpecialType != SpecialType.System_Object) - { - Context.ModelError(Symbol, "Unable to resolve base type in implicit constructor initializer"); - } + case SyntaxKind.BaseConstructorInitializer: + initializerType = Symbol.ContainingType.BaseType!; + break; + case SyntaxKind.ThisConstructorInitializer: + initializerType = Symbol.ContainingType; + break; + default: + Context.ModelError(initializer, "Unknown initializer"); return; - } - - var baseConstructor = baseType.InstanceConstructors.FirstOrDefault(c => c.Arity is 0); - - if (baseConstructor is null) - { - Context.ModelError(Symbol, "Unable to resolve implicit constructor initializer call"); - return; - } - - var baseConstructorTarget = Create(Context, baseConstructor); - var info = new ExpressionInfo(Context, - AnnotatedTypeSymbol.CreateNotAnnotated(baseType), - Location, - Kinds.ExprKind.CONSTRUCTOR_INIT, - this, - -1, - isCompilerGenerated: true, - null); - - trapFile.expr_call(new Expression(info), baseConstructorTarget); } - return; + + ExtractSourceInitializer(trapFile, initializerType, (IMethodSymbol?)initializerInfo.Symbol, initializer.ArgumentList, initializer.ThisOrBaseKeyword.GetLocation()); } - - ITypeSymbol initializerType; - var symbolInfo = Context.GetSymbolInfo(initializer); - - switch (initializer.Kind()) + else if (PrimaryBase is PrimaryConstructorBaseTypeSyntax primaryInitializer) { - case SyntaxKind.BaseConstructorInitializer: - initializerType = Symbol.ContainingType.BaseType!; - break; - case SyntaxKind.ThisConstructorInitializer: - initializerType = Symbol.ContainingType; - break; - default: - Context.ModelError(initializer, "Unknown initializer"); - return; - } + var primaryInfo = Context.GetSymbolInfo(primaryInitializer); + var primarySymbol = primaryInfo.Symbol; + ExtractSourceInitializer(trapFile, primarySymbol?.ContainingType, (IMethodSymbol?)primarySymbol, primaryInitializer.ArgumentList, primaryInitializer.GetLocation()); + } + else if (Symbol.MethodKind is MethodKind.Constructor) + { + var baseType = Symbol.ContainingType.BaseType; + if (baseType is null) + { + if (Symbol.ContainingType.SpecialType != SpecialType.System_Object) + { + Context.ModelError(Symbol, "Unable to resolve base type in implicit constructor initializer"); + } + return; + } + + var baseConstructor = baseType.InstanceConstructors.FirstOrDefault(c => c.Arity is 0); + + if (baseConstructor is null) + { + Context.ModelError(Symbol, "Unable to resolve implicit constructor initializer call"); + return; + } + + var baseConstructorTarget = Create(Context, baseConstructor); + var info = new ExpressionInfo(Context, + AnnotatedTypeSymbol.CreateNotAnnotated(baseType), + Location, + Kinds.ExprKind.CONSTRUCTOR_INIT, + this, + -1, + isCompilerGenerated: true, + null); + + trapFile.expr_call(new Expression(info), baseConstructorTarget); + } + } + + private void ExtractSourceInitializer(TextWriter trapFile, ITypeSymbol? type, IMethodSymbol? symbol, ArgumentListSyntax arguments, Location location) + { var initInfo = new ExpressionInfo(Context, - AnnotatedTypeSymbol.CreateNotAnnotated(initializerType), - Context.CreateLocation(initializer.ThisOrBaseKeyword.GetLocation()), + AnnotatedTypeSymbol.CreateNotAnnotated(type), + Context.CreateLocation(location), Kinds.ExprKind.CONSTRUCTOR_INIT, this, -1, @@ -103,7 +130,7 @@ namespace Semmle.Extraction.CSharp.Entities var init = new Expression(initInfo); - var target = Constructor.Create(Context, (IMethodSymbol?)symbolInfo.Symbol); + var target = Constructor.Create(Context, symbol); if (target is null) { Context.ModelError(Symbol, "Unable to resolve call"); @@ -112,21 +139,29 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.expr_call(init, target); - init.PopulateArguments(trapFile, initializer.ArgumentList, 0); + init.PopulateArguments(trapFile, arguments, 0); } - private ConstructorDeclarationSyntax? Syntax - { - get - { - return Symbol.DeclaringSyntaxReferences - .Select(r => r.GetSyntax()) - .OfType() - .FirstOrDefault(); - } - } + private ConstructorDeclarationSyntax? OrdinaryConstructorSyntax => + declaringReferenceSyntax + .OfType() + .FirstOrDefault(); - [return: NotNullIfNotNull("constructor")] + private TypeDeclarationSyntax? PrimaryConstructorSyntax => + declaringReferenceSyntax + .OfType() + .FirstOrDefault(t => t is ClassDeclarationSyntax or StructDeclarationSyntax or RecordDeclarationSyntax); + + private PrimaryConstructorBaseTypeSyntax? PrimaryBase => + PrimaryConstructorSyntax? + .BaseList? + .Types + .OfType() + .FirstOrDefault(); + + private bool IsPrimary => PrimaryConstructorSyntax is not null; + + [return: NotNullIfNotNull(nameof(constructor))] public static new Constructor? Create(Context cx, IMethodSymbol? constructor) { if (constructor is null) @@ -160,19 +195,20 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.Write(";constructor"); } - private ConstructorDeclarationSyntax? GetSyntax() => - Symbol.DeclaringSyntaxReferences.Select(r => r.GetSyntax()).OfType().FirstOrDefault(); - public override Microsoft.CodeAnalysis.Location? FullLocation => ReportingLocation; public override Microsoft.CodeAnalysis.Location? ReportingLocation { get { - var syn = GetSyntax(); - if (syn is not null) + if (OrdinaryConstructorSyntax is not null) { - return syn.Identifier.GetLocation(); + return OrdinaryConstructorSyntax.Identifier.GetLocation(); + } + + if (PrimaryConstructorSyntax is not null) + { + return PrimaryConstructorSyntax.Identifier.GetLocation(); } if (Symbol.IsImplicitlyDeclared) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs index feffcbb3a54..eba65db03b6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs @@ -54,12 +54,13 @@ namespace Semmle.Extraction.CSharp.Entities var block = Block; var expr = ExpressionBody; + Context.PopulateLater(() => ExtractInitializers(trapFile)); + if (block is not null || expr is not null) { Context.PopulateLater( () => { - ExtractInitializers(trapFile); if (block is not null) Statements.Block.Create(Context, block, this, 0); else @@ -232,7 +233,7 @@ namespace Semmle.Extraction.CSharp.Entities /// /// /// - [return: NotNullIfNotNull("methodDecl")] + [return: NotNullIfNotNull(nameof(methodDecl))] public static Method? Create(Context cx, IMethodSymbol? methodDecl) { if (methodDecl is null) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs index e3e3c0c6ae4..a3b7877af4e 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs @@ -1,5 +1,7 @@ +using System; using System.IO; using Microsoft.CodeAnalysis; +using Semmle.Util.Logging; namespace Semmle.Extraction.CSharp.Entities { @@ -25,7 +27,8 @@ namespace Semmle.Extraction.CSharp.Entities var mapped = Symbol.GetMappedLineSpan(); if (mapped.HasMappedPath && mapped.IsValid) { - var mappedLoc = Create(Context, Location.Create(mapped.Path, default, mapped.Span)); + var path = TryAdjustRelativeMappedFilePath(mapped.Path, Position.Path, Context.Extractor.Logger); + var mappedLoc = Create(Context, Location.Create(path, default, mapped.Span)); trapFile.locations_mapped(this, mappedLoc); } @@ -61,5 +64,25 @@ namespace Semmle.Extraction.CSharp.Entities public override NonGeneratedSourceLocation Create(Context cx, Location init) => new NonGeneratedSourceLocation(cx, init); } + + public static string TryAdjustRelativeMappedFilePath(string mappedToPath, string mappedFromPath, ILogger logger) + { + if (!Path.IsPathRooted(mappedToPath)) + { + try + { + var fullPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(mappedFromPath)!, mappedToPath)); + logger.LogDebug($"Found relative path in line mapping: '{mappedToPath}', interpreting it as '{fullPath}'"); + + mappedToPath = fullPath; + } + catch (Exception e) + { + logger.LogDebug($"Failed to compute absolute path for relative path in line mapping: '{mappedToPath}': {e}"); + } + } + + return mappedToPath; + } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs index 9e8c4c557dc..6d236220331 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs @@ -25,9 +25,11 @@ namespace Semmle.Extraction.CSharp.Entities { trapFile.directive_lines(this, kind); - if (!string.IsNullOrWhiteSpace(Symbol.File.ValueText)) + var path = Symbol.File.ValueText; + if (!string.IsNullOrWhiteSpace(path)) { - var file = File.Create(Context, Symbol.File.ValueText); + path = NonGeneratedSourceLocation.TryAdjustRelativeMappedFilePath(path, Symbol.SyntaxTree.FilePath, Context.Extractor.Logger); + var file = File.Create(Context, path); trapFile.directive_line_file(this, file); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs index 7706118cb6f..3e0c468d85b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs @@ -12,7 +12,8 @@ namespace Semmle.Extraction.CSharp.Entities protected override void PopulatePreprocessor(TextWriter trapFile) { - var file = File.Create(Context, Symbol.File.ValueText); + var path = NonGeneratedSourceLocation.TryAdjustRelativeMappedFilePath(Symbol.File.ValueText, Symbol.SyntaxTree.FilePath, Context.Extractor.Logger); + var file = File.Create(Context, path); trapFile.pragma_checksums(this, file, Symbol.Guid.ToString(), Symbol.Bytes.ToString()); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Statements/SyntheticEmptyBlock.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Statements/SyntheticEmptyBlock.cs new file mode 100644 index 00000000000..0b292d208ff --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Statements/SyntheticEmptyBlock.cs @@ -0,0 +1,24 @@ +using System.IO; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Semmle.Extraction.Entities; +using Semmle.Extraction.Kinds; + +namespace Semmle.Extraction.CSharp.Entities.Statements +{ + internal class SyntheticEmptyBlock : Statement + { + private SyntheticEmptyBlock(Context cx, BlockSyntax block, IStatementParentEntity parent, int child, Location location) + : base(cx, block, StmtKind.BLOCK, parent, child, location) { } + + public static SyntheticEmptyBlock Create(Context cx, IStatementParentEntity parent, int child, Location location) + { + var block = SyntaxFactory.Block(); + var ret = new SyntheticEmptyBlock(cx, block, parent, child, location); + ret.TryPopulate(); + return ret; + } + + protected override void PopulateStatement(TextWriter trapFile) { } + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs index 291dda12942..e3919d40800 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs @@ -57,7 +57,7 @@ namespace Semmle.Extraction.CSharp.Entities { return Kinds.TypeKind.TUPLE; } - return Symbol.IsInlineArray() + return Symbol.IsInlineArray() ? Kinds.TypeKind.INLINE_ARRAY : Kinds.TypeKind.STRUCT; } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index d242ee5c9ef..2f56bbfa3cc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; +using Semmle.Util; using Semmle.Util.Logging; using Semmle.Extraction.CSharp.Populators; @@ -240,6 +241,8 @@ namespace Semmle.Extraction.CSharp var cx = new Context(extractor, compilation.Clone(), trapWriter, new AssemblyScope(assembly, assemblyPath), addAssemblyTrapPrefix); compilationEntity = Entities.Compilation.Create(cx); + + extractor.CompilationInfos.ForEach(ci => trapWriter.Writer.compilation_info(compilationEntity, ci.key, ci.value)); } catch (Exception ex) // lgtm[cs/catch-of-all-exceptions] { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs index 3ae7b8a1d0e..d559d091214 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs @@ -13,10 +13,10 @@ namespace Semmle.Extraction.CSharp { } - public void Initialize(string outputPath, CSharpCompilation compilationIn, CommonOptions options) + public void Initialize(string outputPath, IEnumerable<(string, string)> compilationInfos, CSharpCompilation compilationIn, CommonOptions options) { compilation = compilationIn; - extractor = new StandaloneExtractor(outputPath, Logger, PathTransformer, options); + extractor = new StandaloneExtractor(outputPath, compilationInfos, Logger, PathTransformer, options); this.options = options; LogExtractorInfo(Extraction.Extractor.Version); SetReferencePaths(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/SymbolExtensions.cs b/csharp/extractor/Semmle.Extraction.CSharp/SymbolExtensions.cs index 6ebc0586efc..2ffdd9dbcd6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/SymbolExtensions.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/SymbolExtensions.cs @@ -591,7 +591,7 @@ namespace Semmle.Extraction.CSharp public static INamedTypeSymbol? GetNonObjectBaseType(this ITypeSymbol symbol, Context cx) => symbol is ITypeParameterSymbol || SymbolEqualityComparer.Default.Equals(symbol.BaseType, cx.Compilation.ObjectType) ? null : symbol.BaseType; - [return: NotNullIfNotNull("symbol")] + [return: NotNullIfNotNull(nameof(symbol))] public static IEntity? CreateEntity(this Context cx, ISymbol symbol) { if (symbol is null) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs index 4b89e1077f0..6f61119eb77 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs @@ -71,6 +71,9 @@ namespace Semmle.Extraction.CSharp internal static void compilation_expanded_args(this TextWriter trapFile, Compilation compilation, int index, string arg) => trapFile.WriteTuple("compilation_expanded_args", compilation, index, arg); + internal static void compilation_info(this TextWriter trapFile, Compilation compilation, string infoKey, string infoValue) => + trapFile.WriteTuple("compilation_info", compilation, infoKey, infoValue); + internal static void compilation_compiling_files(this TextWriter trapFile, Compilation compilation, int index, Extraction.Entities.File file) => trapFile.WriteTuple("compilation_compiling_files", compilation, index, file); diff --git a/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs b/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs index ba934120c45..6dcee31024a 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs @@ -84,7 +84,7 @@ namespace Semmle.Extraction.Tests Assert.Contains("StyleCop.Analyzers".ToLowerInvariant(), allPackages); } - private static void ImplicitUsingsTest(string line, bool expected) + private static void CsProjSettingsTest(string line, bool expected, Func func) { // Setup var lines = new List() @@ -94,28 +94,52 @@ namespace Semmle.Extraction.Tests var fileContent = new TestFileContent(lines); // Execute - var useImplicitUsings = fileContent.UseImplicitUsings; + var actual = func(fileContent); // Verify - Assert.Equal(expected, useImplicitUsings); + Assert.Equal(expected, actual); } [Fact] public void TestFileContent_ImplicitUsings0() { - ImplicitUsingsTest("false", false); + CsProjSettingsTest("false", false, fc => fc.UseImplicitUsings); } [Fact] public void TestFileContent_ImplicitUsings1() { - ImplicitUsingsTest("true", true); + CsProjSettingsTest("true", true, fc => fc.UseImplicitUsings); } [Fact] public void TestFileContent_ImplicitUsings2() { - ImplicitUsingsTest("enable", true); + CsProjSettingsTest("enable", true, fc => fc.UseImplicitUsings); + } + + [Fact] + public void TestFileContent_UseWpf0() + { + CsProjSettingsTest("false", false, fc => fc.UseWpf); + } + + [Fact] + public void TestFileContent_UseWpf1() + { + CsProjSettingsTest("true", true, fc => fc.UseWpf); + } + + [Fact] + public void TestFileContent_UseWindowsForms0() + { + CsProjSettingsTest("false", false, fc => fc.UseWindowsForms); + } + + [Fact] + public void TestFileContent_UseWindowsForms1() + { + CsProjSettingsTest("true", true, fc => fc.UseWindowsForms); } [Fact] diff --git a/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs index e4284f97cfd..362b7910c56 100644 --- a/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using Semmle.Util.Logging; +using CompilationInfo = (string key, string value); + namespace Semmle.Extraction { /// @@ -10,17 +12,19 @@ namespace Semmle.Extraction { public abstract ExtractorMode Mode { get; } public string OutputPath { get; } + public IEnumerable CompilationInfos { get; } /// /// Creates a new extractor instance for one compilation unit. /// /// The object used for logging. /// The object used for path transformations. - protected Extractor(string outputPath, ILogger logger, PathTransformer pathTransformer) + protected Extractor(string outputPath, IEnumerable compilationInfos, ILogger logger, PathTransformer pathTransformer) { OutputPath = outputPath; Logger = logger; PathTransformer = pathTransformer; + CompilationInfos = compilationInfos; } // Limit the number of error messages in the log file diff --git a/csharp/extractor/Semmle.Extraction/Extractor/StandaloneExtractor.cs b/csharp/extractor/Semmle.Extraction/Extractor/StandaloneExtractor.cs index d9f8725a1e2..67079a73214 100644 --- a/csharp/extractor/Semmle.Extraction/Extractor/StandaloneExtractor.cs +++ b/csharp/extractor/Semmle.Extraction/Extractor/StandaloneExtractor.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Semmle.Util.Logging; namespace Semmle.Extraction @@ -11,7 +12,7 @@ namespace Semmle.Extraction /// /// The object used for logging. /// The object used for path transformations. - public StandaloneExtractor(string outputPath, ILogger logger, PathTransformer pathTransformer, CommonOptions options) : base(outputPath, logger, pathTransformer) + public StandaloneExtractor(string outputPath, IEnumerable<(string, string)> compilationInfos, ILogger logger, PathTransformer pathTransformer, CommonOptions options) : base(outputPath, compilationInfos, logger, pathTransformer) { Mode = ExtractorMode.Standalone; if (options.QlTest) diff --git a/csharp/extractor/Semmle.Extraction/Extractor/TracingExtractor.cs b/csharp/extractor/Semmle.Extraction/Extractor/TracingExtractor.cs index dadda4c8488..4d54aef6d5b 100644 --- a/csharp/extractor/Semmle.Extraction/Extractor/TracingExtractor.cs +++ b/csharp/extractor/Semmle.Extraction/Extractor/TracingExtractor.cs @@ -1,3 +1,4 @@ +using System.Linq; using Semmle.Util.Logging; namespace Semmle.Extraction @@ -12,7 +13,7 @@ namespace Semmle.Extraction /// The name of the output DLL/EXE, or null if not specified (standalone extraction). /// The object used for logging. /// The object used for path transformations. - public TracingExtractor(string outputPath, ILogger logger, PathTransformer pathTransformer, CommonOptions options) : base(outputPath, logger, pathTransformer) + public TracingExtractor(string outputPath, ILogger logger, PathTransformer pathTransformer, CommonOptions options) : base(outputPath, Enumerable.Empty<(string, string)>(), logger, pathTransformer) { Mode = ExtractorMode.None; if (options.QlTest) diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 1e9fa50c21f..190b83b0f25 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.9 + +No user-facing changes. + ## 1.7.8 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.9.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.9.md new file mode 100644 index 00000000000..84107525ff7 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.9.md @@ -0,0 +1,3 @@ +## 1.7.9 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index e003efd5127..678da6bc37e 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.8 +lastReleaseVersion: 1.7.9 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 77b1c8b5154..1c28b3a7baf 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.8 +version: 1.7.9 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 1e9fa50c21f..190b83b0f25 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.9 + +No user-facing changes. + ## 1.7.8 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.9.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.9.md new file mode 100644 index 00000000000..84107525ff7 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.9.md @@ -0,0 +1,3 @@ +## 1.7.9 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index e003efd5127..678da6bc37e 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.8 +lastReleaseVersion: 1.7.9 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 9851e27c691..fb4aa233e9b 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.8 +version: 1.7.9 groups: - csharp - solorigate diff --git a/csharp/ql/consistency-queries/DataFlowConsistency.ql b/csharp/ql/consistency-queries/DataFlowConsistency.ql index e1eb8b15a56..0f9dead6b77 100644 --- a/csharp/ql/consistency-queries/DataFlowConsistency.ql +++ b/csharp/ql/consistency-queries/DataFlowConsistency.ql @@ -7,15 +7,6 @@ private import codeql.dataflow.internal.DataFlowImplConsistency private module Input implements InputSig { private import CsharpDataFlow - predicate uniqueEnclosingCallableExclude(Node n) { - // TODO: Remove once static initializers are folded into the - // static constructors - exists(ControlFlow::Node cfn | - cfn.getAstNode() = any(FieldOrProperty f | f.isStatic()).getAChild+() and - cfn = n.getControlFlowNode() - ) - } - predicate uniqueCallEnclosingCallableExclude(DataFlowCall call) { // TODO: Remove once static initializers are folded into the // static constructors @@ -30,6 +21,8 @@ private module Input implements InputSig { n instanceof ParameterNode or missingLocationExclude(n) + or + n instanceof FlowInsensitiveFieldNode } predicate missingLocationExclude(Node n) { diff --git a/csharp/ql/integration-tests/all-platforms/autobuild/test.py b/csharp/ql/integration-tests/all-platforms/autobuild/test.py index 6a1f8864145..89c7dbf7113 100644 --- a/csharp/ql/integration-tests/all-platforms/autobuild/test.py +++ b/csharp/ql/integration-tests/all-platforms/autobuild/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp") diff --git a/csharp/ql/integration-tests/all-platforms/cshtml/test.py b/csharp/ql/integration-tests/all-platforms/cshtml/test.py index 24cc83b4f2d..b9be34f1efb 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create(['dotnet build'], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create(['dotnet build'], lang="csharp") diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py index c0647f00385..b1f535c1727 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py index dfce788f220..c00c6f6e2e8 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/test.py @@ -2,4 +2,4 @@ import os from create_database_utils import * os.environ['CODEQL_EXTRACTOR_CSHARP_STANDALONE_EXTRACT_WEB_VIEWS'] = 'false' -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py index c0647f00385..b1f535c1727 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py index c0647f00385..b1f535c1727 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_net6/test.py @@ -1,4 +1,4 @@ import os from create_database_utils import * -run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create(lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py index 24cc83b4f2d..b9be34f1efb 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create(['dotnet build'], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create(['dotnet build'], lang="csharp") diff --git a/csharp/ql/integration-tests/all-platforms/standalone/test.py b/csharp/ql/integration-tests/all-platforms/standalone/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/test.py b/csharp/ql/integration-tests/linux-only/compiler_args/test.py index 6a1f8864145..89c7dbf7113 100644 --- a/csharp/ql/integration-tests/linux-only/compiler_args/test.py +++ b/csharp/ql/integration-tests/linux-only/compiler_args/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp") diff --git a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py index 2a7f375abba..7173ed4c6c2 100644 --- a/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py +++ b/csharp/ql/integration-tests/linux-only/standalone_dependencies_non_utf8_filename/test.py @@ -5,4 +5,4 @@ path = b'\xd2abcd.cs' with open(path, 'w') as file: file.write('class X { }\n') -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_multi_target/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected new file mode 100644 index 00000000000..720c83eff16 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.expected @@ -0,0 +1 @@ +| /Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql new file mode 100644 index 00000000000..e07e7c55e7d --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/Assemblies.ql @@ -0,0 +1,14 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = + s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 + + "/legacypackages".length(), s.length()) + // TODO: include all other assemblies from the test results. Initially disable because mono installations were problematic on ARM runners. + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config new file mode 100644 index 00000000000..7cf2791d738 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/nuget.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs new file mode 100644 index 00000000000..39a9e95bb6e --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json new file mode 100644 index 00000000000..5c3fd64fbd1 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "8.0.101" + } +} diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config new file mode 100644 index 00000000000..90071d0ca8c --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj new file mode 100644 index 00000000000..f7600103d99 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/proj/test.csproj @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/skip-on-platform-osx-arm b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/skip-on-platform-osx-arm new file mode 100644 index 00000000000..6ebb8d63fcc --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/skip-on-platform-osx-arm @@ -0,0 +1 @@ +Skipping the test on the ARM runners, as we're running into trouble with Mono and nuget. diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py new file mode 100644 index 00000000000..9142835c65f --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_no_sources/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create([], source="proj", lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/integration-tests/posix-only/warn_as_error/test.py b/csharp/ql/integration-tests/posix-only/warn_as_error/test.py index a0a7904259a..60f5c6422b7 100644 --- a/csharp/ql/integration-tests/posix-only/warn_as_error/test.py +++ b/csharp/ql/integration-tests/posix-only/warn_as_error/test.py @@ -2,6 +2,6 @@ import os from create_database_utils import * from diagnostics_test_utils import * -run_codeql_database_create(["./build.sh"], lang="csharp", extra_args=["--extractor-option=cil=false"]) +run_codeql_database_create(["./build.sh"], lang="csharp") check_diagnostics() diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py index 58074b430b2..72f47e38d22 100644 --- a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py @@ -1,3 +1,3 @@ from create_database_utils import * -run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true"]) diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 196cd5ecc92..95fd64c5270 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.8.9 + +### Minor Analysis Improvements + +* C# 12: The QL and data flow library now support primary constructors. +* Added a new database relation to store key-value pairs corresponding to compilations. The new relation is used in +buildless mode to surface information related to dependency fetching. + ## 0.8.8 ### Minor Analysis Improvements diff --git a/csharp/ql/lib/change-notes/released/0.8.9.md b/csharp/ql/lib/change-notes/released/0.8.9.md new file mode 100644 index 00000000000..811088d0be2 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/0.8.9.md @@ -0,0 +1,7 @@ +## 0.8.9 + +### Minor Analysis Improvements + +* C# 12: The QL and data flow library now support primary constructors. +* Added a new database relation to store key-value pairs corresponding to compilations. The new relation is used in +buildless mode to surface information related to dependency fetching. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index da0a61b4048..5290c29b7fe 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.9 diff --git a/csharp/ql/lib/ext/System.Collections.Immutable.model.yml b/csharp/ql/lib/ext/System.Collections.Immutable.model.yml index e121e6976a6..6244f979c5c 100644 --- a/csharp/ql/lib/ext/System.Collections.Immutable.model.yml +++ b/csharp/ql/lib/ext/System.Collections.Immutable.model.yml @@ -12,6 +12,8 @@ extensions: - ["System.Collections.Immutable", "IImmutableSet", True, "Add", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "IImmutableSet", True, "Clear", "()", "", "Argument[this].WithoutElement", "ReturnValue", "value", "manual"] - ["System.Collections.Immutable", "IImmutableStack", True, "Clear", "()", "", "Argument[this].WithoutElement", "ReturnValue", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableArray", False, "ToImmutableArray", "(System.Span)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Collections.Immutable", "ImmutableArray", False, "ToImmutableArray", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableArray+Builder", False, "AddRange", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableArray+Builder", False, "AddRange", "(System.Collections.Immutable.ImmutableArray)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] - ["System.Collections.Immutable", "ImmutableArray+Builder", False, "AddRange", "(System.Collections.Immutable.ImmutableArray+Builder)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.Linq.model.yml b/csharp/ql/lib/ext/System.Linq.model.yml index 0cfbfa7593c..89c0016d277 100644 --- a/csharp/ql/lib/ext/System.Linq.model.yml +++ b/csharp/ql/lib/ext/System.Linq.model.yml @@ -29,15 +29,15 @@ extensions: - ["System.Linq", "Enumerable", False, "Concat", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Enumerable", False, "Concat", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable)", "", "Argument[1].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Enumerable", False, "Count", "(System.Collections.Generic.IEnumerable,System.Func)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - - ["System.Linq", "Enumerable", False, "DefaultIfEmpty", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Enumerable", False, "DefaultIfEmpty", "(System.Collections.Generic.IEnumerable,TSource)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Enumerable", False, "DefaultIfEmpty", "(System.Collections.Generic.IEnumerable,TSource)", "", "Argument[1]", "ReturnValue", "value", "manual"] + - ["System.Linq", "Enumerable", False, "DefaultIfEmpty", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "Enumerable", False, "DefaultIfEmpty", "(System.Collections.Generic.IEnumerable,TSource)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "Enumerable", False, "DefaultIfEmpty", "(System.Collections.Generic.IEnumerable,TSource)", "", "Argument[1]", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Enumerable", False, "Distinct", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Enumerable", False, "Distinct", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Enumerable", False, "ElementAt", "(System.Collections.Generic.IEnumerable,System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - ["System.Linq", "Enumerable", False, "ElementAtOrDefault", "(System.Collections.Generic.IEnumerable,System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Enumerable", False, "Except", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Enumerable", False, "Except", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] + - ["System.Linq", "Enumerable", False, "Except", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "Enumerable", False, "Except", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Enumerable", False, "First", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - ["System.Linq", "Enumerable", False, "First", "(System.Collections.Generic.IEnumerable,System.Func)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - ["System.Linq", "Enumerable", False, "First", "(System.Collections.Generic.IEnumerable,System.Func)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] @@ -250,17 +250,17 @@ extensions: - ["System.Linq", "ParallelEnumerable", False, "Concat", "(System.Linq.ParallelQuery,System.Linq.ParallelQuery)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "Concat", "(System.Linq.ParallelQuery,System.Linq.ParallelQuery)", "", "Argument[1].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "Count", "(System.Linq.ParallelQuery,System.Func)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - - ["System.Linq", "ParallelEnumerable", False, "DefaultIfEmpty", "(System.Linq.ParallelQuery)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "ParallelEnumerable", False, "DefaultIfEmpty", "(System.Linq.ParallelQuery,TSource)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "ParallelEnumerable", False, "DefaultIfEmpty", "(System.Linq.ParallelQuery,TSource)", "", "Argument[1]", "ReturnValue", "value", "manual"] + - ["System.Linq", "ParallelEnumerable", False, "DefaultIfEmpty", "(System.Linq.ParallelQuery)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "ParallelEnumerable", False, "DefaultIfEmpty", "(System.Linq.ParallelQuery,TSource)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "ParallelEnumerable", False, "DefaultIfEmpty", "(System.Linq.ParallelQuery,TSource)", "", "Argument[1]", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "Distinct", "(System.Linq.ParallelQuery)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "Distinct", "(System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "ElementAt", "(System.Linq.ParallelQuery,System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "ElementAtOrDefault", "(System.Linq.ParallelQuery,System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Linq.ParallelQuery)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] + - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Linq.ParallelQuery)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "ParallelEnumerable", False, "Except", "(System.Linq.ParallelQuery,System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "First", "(System.Linq.ParallelQuery)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "First", "(System.Linq.ParallelQuery,System.Func)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - ["System.Linq", "ParallelEnumerable", False, "First", "(System.Linq.ParallelQuery,System.Func)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] @@ -496,15 +496,15 @@ extensions: - ["System.Linq", "Queryable", False, "Concat", "(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Queryable", False, "Concat", "(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)", "", "Argument[1].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Queryable", False, "Count", "(System.Linq.IQueryable,System.Linq.Expressions.Expression>)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - - ["System.Linq", "Queryable", False, "DefaultIfEmpty", "(System.Linq.IQueryable)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Queryable", False, "DefaultIfEmpty", "(System.Linq.IQueryable,TSource)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Queryable", False, "DefaultIfEmpty", "(System.Linq.IQueryable,TSource)", "", "Argument[1]", "ReturnValue", "value", "manual"] + - ["System.Linq", "Queryable", False, "DefaultIfEmpty", "(System.Linq.IQueryable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "Queryable", False, "DefaultIfEmpty", "(System.Linq.IQueryable,TSource)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "Queryable", False, "DefaultIfEmpty", "(System.Linq.IQueryable,TSource)", "", "Argument[1]", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Queryable", False, "Distinct", "(System.Linq.IQueryable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Queryable", False, "Distinct", "(System.Linq.IQueryable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Queryable", False, "ElementAt", "(System.Linq.IQueryable,System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - ["System.Linq", "Queryable", False, "ElementAtOrDefault", "(System.Linq.IQueryable,System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Queryable", False, "Except", "(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - - ["System.Linq", "Queryable", False, "Except", "(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] + - ["System.Linq", "Queryable", False, "Except", "(System.Linq.IQueryable,System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] + - ["System.Linq", "Queryable", False, "Except", "(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"] - ["System.Linq", "Queryable", False, "First", "(System.Linq.IQueryable)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] - ["System.Linq", "Queryable", False, "First", "(System.Linq.IQueryable,System.Linq.Expressions.Expression>)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"] - ["System.Linq", "Queryable", False, "First", "(System.Linq.IQueryable,System.Linq.Expressions.Expression>)", "", "Argument[0].Element", "ReturnValue", "value", "manual"] diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index c8ed5d7fa6a..36ce30e0ecb 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -374,12 +374,37 @@ extensions: - ["System", "Lazy", False, "Lazy", "(System.Func,System.Boolean)", "", "Argument[0].ReturnValue", "Argument[this].Property[System.Lazy`1.Value]", "value", "manual"] - ["System", "Lazy", False, "Lazy", "(System.Func,System.Threading.LazyThreadSafetyMode)", "", "Argument[0].ReturnValue", "Argument[this].Property[System.Lazy`1.Value]", "value", "manual"] - ["System", "Lazy", False, "get_Value", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System", "MemoryExtensions", False, "Replace", "(System.Span,T,T)", "", "Argument[2]", "Argument[0].Element", "value", "manual"] + - ["System", "MemoryExtensions", False, "Replace", "(System.ReadOnlySpan,System.Span,T,T)", "", "Argument[0].Element", "Argument[1].Element", "value", "manual"] + - ["System", "MemoryExtensions", False, "Replace", "(System.ReadOnlySpan,System.Span,T,T)", "", "Argument[3]", "Argument[1].Element", "value", "manual"] - ["System", "Nullable", False, "GetValueOrDefault", "()", "", "Argument[this].Property[System.Nullable`1.Value]", "ReturnValue", "value", "manual"] - ["System", "Nullable", False, "GetValueOrDefault", "(T)", "", "Argument[0]", "ReturnValue", "value", "manual"] - ["System", "Nullable", False, "GetValueOrDefault", "(T)", "", "Argument[this].Property[System.Nullable`1.Value]", "ReturnValue", "value", "manual"] - ["System", "Nullable", False, "Nullable", "(T)", "", "Argument[0]", "Argument[this].Property[System.Nullable`1.Value]", "value", "manual"] - ["System", "Nullable", False, "get_HasValue", "()", "", "Argument[this].Property[System.Nullable`1.Value]", "ReturnValue", "taint", "manual"] - ["System", "Nullable", False, "get_Value", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System", "ReadOnlySpan", False, "CopyTo", "(System.Span)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] + - ["System", "ReadOnlySpan", False, "get_Item", "(System.Int32)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] + - ["System", "ReadOnlySpan", False, "GetPinnableReference", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] + - ["System", "ReadOnlySpan", False, "Slice", "(System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System", "ReadOnlySpan", False, "Slice", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System", "ReadOnlySpan", False, "ReadOnlySpan", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] + - ["System", "ReadOnlySpan", False, "ReadOnlySpan", "(T[])", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] + - ["System", "ReadOnlySpan", False, "ReadOnlySpan", "(T[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] + - ["System", "ReadOnlySpan", False, "ToArray", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System", "ReadOnlySpan", False, "TryCopyTo", "(System.Span)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] + - ["System", "Span", False, "Clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"] + - ["System", "Span", False, "CopyTo", "(System.Span)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] + - ["System", "Span", False, "Fill", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] + - ["System", "Span", False, "get_Item", "(System.Int32)", "", "Argument[this].Element", "ReturnValue", "value", "manual"] + - ["System", "Span", False, "GetPinnableReference", "()", "", "Argument[this].Element", "ReturnValue", "value", "manual"] + - ["System", "Span", False, "Slice", "(System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System", "Span", False, "Slice", "(System.Int32,System.Int32)", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System", "Span", False, "Span", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "manual"] + - ["System", "Span", False, "Span", "(T[])", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] + - ["System", "Span", False, "Span", "(T[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this].Element", "value", "manual"] + - ["System", "Span", False, "ToArray", "()", "", "Argument[this].Element", "ReturnValue.Element", "value", "manual"] + - ["System", "Span", False, "TryCopyTo", "(System.Span)", "", "Argument[this].Element", "Argument[0].Element", "value", "manual"] - ["System", "String", False, "Clone", "()", "", "Argument[this]", "ReturnValue", "value", "manual"] - ["System", "String", False, "Concat", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] - ["System", "String", False, "Concat", "(System.Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"] diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index c3ddda30dce..2021ec96f30 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.8.8 +version: 0.8.9 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index dd67d2667e3..89f29458cc9 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -406,6 +406,26 @@ class InstanceConstructor extends Constructor { override string getAPrimaryQlClass() { result = "InstanceConstructor" } } +/** + * A primary constructor, for example `public class C(object o)` on line 1 in + * ```csharp + * public class C(object o) { + * ... + * } + * ``` + */ +class PrimaryConstructor extends Constructor { + PrimaryConstructor() { + // In the extractor we use the constructor location as the location for the + // synthesized empty body of the constructor. + this.getLocation() = this.getBody().getLocation() and + this.getDeclaringType().fromSource() and + this.fromSource() + } + + override string getAPrimaryQlClass() { result = "PrimaryConstructor" } +} + /** * A destructor, for example `~C() { }` on line 2 in * diff --git a/csharp/ql/lib/semmle/code/csharp/commons/Compilation.qll b/csharp/ql/lib/semmle/code/csharp/commons/Compilation.qll index df53084c835..c72a40e9ae0 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/Compilation.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/Compilation.qll @@ -83,4 +83,9 @@ class Compilation extends @compilation { /** Gets the elapsed seconds for the entire extractor process. */ float getElapsedSeconds() { compilation_finished(this, _, result) } + + /** + * Gets the piece of compilation information with the given key, if any. + */ + string getInfo(string key) { compilation_info(this, key, result) } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll index fc937b88fa9..e9cd7373975 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/ContentDataFlow.qll @@ -277,10 +277,6 @@ module Global { } } - // important to use `edges` and not `PathNode::getASuccessor()`, as the latter - // is not pruned for reachability - private predicate pathSucc = Flow::PathGraph::edges/2; - /** * Provides a big-step flow relation, where flow stops at read/store steps that * must be recorded, and flow via `subpaths` such that reads/stores inside @@ -290,10 +286,7 @@ module Global { private predicate reachesSink(Flow::PathNode node) { FlowConfig::isSink(node.getNode(), node.getState()) or - exists(Flow::PathNode mid | - pathSucc(node, mid) and - reachesSink(mid) - ) + reachesSink(node.getASuccessor()) } /** @@ -302,7 +295,7 @@ module Global { */ pragma[nomagic] private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) { - pathSucc(pred, succ) and + pred.getASuccessor() = succ and ( // we need to record reads/stores inside summarized callables Flow::PathGraph::subpaths(pred, _, _, succ) @@ -356,7 +349,7 @@ module Global { pragma[nomagic] private predicate step(Flow::PathNode pred, Flow::PathNode succ) { - pathSucc(pred, succ) and + pred.getASuccessor() = succ and not excludeStep(pred, succ) } @@ -471,7 +464,7 @@ module Global { exists(Flow::PathNode mid | nodeReaches(source, scReads, scStores, mid, reads, stores) and storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - pathSucc(mid, node) + mid.getASuccessor() = node ) } @@ -483,7 +476,7 @@ module Global { exists(Flow::PathNode mid | nodeReaches(source, scReads, scStores, mid, reads, stores) and readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and - pathSucc(mid, node) + mid.getASuccessor() = node ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index 8383859a6ea..871344878f7 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -89,6 +89,7 @@ class DataFlowSummarizedCallable instanceof FlowSummary::SummarizedCallable { string toString() { result = super.toString() } } +cached private module Cached { /** * The following heuristic is used to rank when to use source code or when to use summaries for DataFlowCallables. @@ -98,7 +99,8 @@ private module Cached { cached newtype TDataFlowCallable = TDotNetCallable(DotNet::Callable c) { c.isUnboundDeclaration() } or - TSummarizedCallable(DataFlowSummarizedCallable sc) + TSummarizedCallable(DataFlowSummarizedCallable sc) or + TFieldOrProperty(FieldOrProperty f) cached newtype TDataFlowCall = @@ -247,22 +249,33 @@ class ImplicitCapturedReturnKind extends ReturnKind, TImplicitCapturedReturnKind /** A callable used for data flow. */ class DataFlowCallable extends TDataFlowCallable { - /** Get the underlying source code callable, if any. */ + /** Gets the underlying source code callable, if any. */ DotNet::Callable asCallable() { this = TDotNetCallable(result) } - /** Get the underlying summarized callable, if any. */ + /** Gets the underlying summarized callable, if any. */ FlowSummary::SummarizedCallable asSummarizedCallable() { this = TSummarizedCallable(result) } - /** Get the underlying callable. */ + /** Gets the underlying field or property, if any. */ + FieldOrProperty asFieldOrProperty() { this = TFieldOrProperty(result) } + + /** Gets the underlying callable. */ DotNet::Callable getUnderlyingCallable() { result = this.asCallable() or result = this.asSummarizedCallable() } /** Gets a textual representation of this dataflow callable. */ - string toString() { result = this.getUnderlyingCallable().toString() } + string toString() { + result = this.getUnderlyingCallable().toString() + or + result = this.asFieldOrProperty().toString() + } /** Get the location of this dataflow callable. */ - Location getLocation() { result = this.getUnderlyingCallable().getLocation() } + Location getLocation() { + result = this.getUnderlyingCallable().getLocation() + or + result = this.asFieldOrProperty().getLocation() + } } /** A call relevant for data flow. */ diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 59610ae5975..af2c6354080 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -21,6 +21,7 @@ private import semmle.code.csharp.frameworks.system.threading.Tasks private import semmle.code.cil.Ssa::Ssa as CilSsa private import semmle.code.cil.internal.SsaImpl as CilSsaImpl private import codeql.util.Unit +private import codeql.util.Boolean /** Gets the callable in which this node occurs. */ DataFlowCallable nodeGetEnclosingCallable(Node n) { @@ -37,6 +38,19 @@ predicate isArgumentNode(ArgumentNode arg, DataFlowCall c, ArgumentPosition pos) arg.argumentOf(c, pos) } +/** + * Gets a control flow node used for data flow purposes for the primary constructor + * parameter access `pa`. + */ +private ControlFlow::Node getAPrimaryConstructorParameterCfn(ParameterAccess pa) { + pa.getTarget().getCallable() instanceof PrimaryConstructor and + ( + result = pa.(ParameterRead).getAControlFlowNode() + or + pa = any(AssignableDefinition def | result = def.getAControlFlowNode()).getTargetAccess() + ) +} + abstract class NodeImpl extends Node { /** Do not call: use `getEnclosingCallable()` instead. */ abstract DataFlowCallable getEnclosingCallableImpl(); @@ -69,6 +83,17 @@ abstract class NodeImpl extends Node { abstract string toStringImpl(); } +// TODO: Remove once static initializers are folded into the +// static constructors +private DataFlowCallable getEnclosingStaticFieldOrProperty(Expr e) { + result.asFieldOrProperty() = + any(FieldOrProperty f | + f.isStatic() and + e = f.getAChild+() and + not exists(e.getEnclosingCallable()) + ) +} + private class ExprNodeImpl extends ExprNode, NodeImpl { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = @@ -76,6 +101,8 @@ private class ExprNodeImpl extends ExprNode, NodeImpl { this.getExpr().(CIL::Expr).getEnclosingCallable().(DotNet::Callable), this.getControlFlowNodeImpl().getEnclosingCallable() ] + or + result = getEnclosingStaticFieldOrProperty(this.asExpr()) } override DotNet::Type getTypeImpl() { @@ -111,9 +138,22 @@ private module ThisFlow { n.(InstanceParameterNode).getCallable() = cfn.(ControlFlow::Nodes::EntryNode).getCallable() or n.asExprAtNode(cfn) = any(Expr e | e instanceof ThisAccess or e instanceof BaseAccess) + or + n = + any(InstanceParameterAccessNode pan | + pan.getUnderlyingControlFlowNode() = cfn and pan.isPreUpdate() + ) } - private predicate thisAccess(Node n, BasicBlock bb, int i) { thisAccess(n, bb.getNode(i)) } + private predicate thisAccess(Node n, BasicBlock bb, int i) { + thisAccess(n, bb.getNode(i)) + or + exists(Parameter p | n.(PrimaryConstructorThisAccessNode).getParameter() = p | + bb.getCallable() = p.getCallable() and + i = p.getPosition() + 1 and + not n instanceof PostUpdateNode + ) + } private predicate thisRank(Node n, BasicBlock bb, int rankix) { exists(int i | @@ -189,7 +229,7 @@ CIL::DataFlowNode asCilDataFlowNode(Node node) { /** Provides predicates related to local data flow. */ module LocalFlow { - private class LocalExprStepConfiguration extends ControlFlowReachabilityConfiguration { + class LocalExprStepConfiguration extends ControlFlowReachabilityConfiguration { LocalExprStepConfiguration() { this = "LocalExprStepConfiguration" } override predicate candidate( @@ -911,6 +951,13 @@ private module Cached { TFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) or TParamsArgumentNode(ControlFlow::Node callCfn) { callCfn = any(Call c | isParamsArg(c, _, _)).getAControlFlowNode() + } or + TFlowInsensitiveFieldNode(FieldOrProperty f) { f.isFieldLike() } or + TInstanceParameterAccessNode(ControlFlow::Node cfn, Boolean isPostUpdate) { + cfn = getAPrimaryConstructorParameterCfn(_) + } or + TPrimaryConstructorThisAccessNode(Parameter p, Boolean isPostUpdate) { + p.getCallable() instanceof PrimaryConstructor } /** @@ -947,14 +994,20 @@ private module Cached { TFieldContent(Field f) { f.isUnboundDeclaration() } or TPropertyContent(Property p) { p.isUnboundDeclaration() } or TElementContent() or - TSyntheticFieldContent(SyntheticField f) + TSyntheticFieldContent(SyntheticField f) or + TPrimaryConstructorParameterContent(Parameter p) { + p.getCallable() instanceof PrimaryConstructor + } cached newtype TContentApprox = TFieldApproxContent(string firstChar) { firstChar = approximateFieldContent(_) } or TPropertyApproxContent(string firstChar) { firstChar = approximatePropertyContent(_) } or TElementApproxContent() or - TSyntheticFieldApproxContent() + TSyntheticFieldApproxContent() or + TPrimaryConstructorParameterApproxContent(string firstChar) { + firstChar = approximatePrimaryConstructorParameterContent(_) + } pragma[nomagic] private predicate commonSubTypeGeneral(DataFlowTypeOrUnifiable t1, RelevantGvnType t2) { @@ -1021,6 +1074,12 @@ predicate nodeIsHidden(Node n) { n instanceof ParamsArgumentNode or n.asExpr() = any(WithExpr we).getInitializer() + or + n instanceof FlowInsensitiveFieldNode + or + n instanceof InstanceParameterAccessNode + or + n instanceof PrimaryConstructorThisAccessNode } /** A CIL SSA definition, viewed as a node in a data flow graph. */ @@ -1346,6 +1405,8 @@ private module ArgumentNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = cfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(cfn.getAstNode()) } override Type getTypeImpl() { result = cfn.getAstNode().(Expr).getType() } @@ -1385,6 +1446,8 @@ private module ArgumentNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = callCfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(callCfn.getAstNode()) } override Type getTypeImpl() { result = this.getParameter().getType() } @@ -1725,6 +1788,100 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { override string toStringImpl() { result = this.getSummaryNode().toString() } } +/** + * A data-flow node used to model reading and writing of primary constructor parameters. + * For example, in + * ```csharp + * public class C(object o) + * { + * public object GetParam() => o; // (1) + * + * public void SetParam(object value) => o = value; // (2) + * } + * ``` + * the first access to `o` (1) is modeled as `this.o_backing_field` and + * the second access to `o` (2) is modeled as `this.o_backing_field = value`. + * Both models need a pre-update this node, and the latter need an additional post-update this access, + * all of which are represented by an `InstanceParameterAccessNode` node. + */ +class InstanceParameterAccessNode extends NodeImpl, TInstanceParameterAccessNode { + private ControlFlow::Node cfn; + private boolean isPostUpdate; + private Parameter p; + + InstanceParameterAccessNode() { + this = TInstanceParameterAccessNode(cfn, isPostUpdate) and + exists(ParameterAccess pa | cfn = getAPrimaryConstructorParameterCfn(pa) and pa.getTarget() = p) + } + + override DataFlowCallable getEnclosingCallableImpl() { + result.asCallable() = cfn.getEnclosingCallable() + } + + override Type getTypeImpl() { result = cfn.getEnclosingCallable().getDeclaringType() } + + override ControlFlow::Nodes::ElementNode getControlFlowNodeImpl() { none() } + + override Location getLocationImpl() { result = cfn.getLocation() } + + override string toStringImpl() { result = "this" } + + /** + * Gets the underlying control flow node. + */ + ControlFlow::Node getUnderlyingControlFlowNode() { result = cfn } + + /** + * Gets the primary constructor parameter that this is a this access to. + */ + Parameter getParameter() { result = p } + + /** + * Holds if the this parameter access node corresponds to a pre-update node. + */ + predicate isPreUpdate() { isPostUpdate = false } +} + +/** + * A data-flow node used to synthesize the body of a primary constructor. + * + * For example, in + * ```csharp + * public class C(object o) { } + * ``` + * we synthesize the primary constructor for `C` as + * ```csharp + * public C(object o) => this.o_backing_field = o; + * ``` + * The synthesized (pre/post-update) this access is represented an `PrimaryConstructorThisAccessNode` node. + */ +class PrimaryConstructorThisAccessNode extends NodeImpl, TPrimaryConstructorThisAccessNode { + private Parameter p; + private boolean isPostUpdate; + + PrimaryConstructorThisAccessNode() { this = TPrimaryConstructorThisAccessNode(p, isPostUpdate) } + + override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = p.getCallable() } + + override Type getTypeImpl() { result = p.getCallable().getDeclaringType() } + + override ControlFlow::Nodes::ElementNode getControlFlowNodeImpl() { none() } + + override Location getLocationImpl() { result = p.getLocation() } + + override string toStringImpl() { result = "this" } + + /** + * Gets the primary constructor parameter that this is a this access to. + */ + Parameter getParameter() { result = p } + + /** + * Holds if this is a this access for a primary constructor parameter write. + */ + predicate isPostUpdate() { isPostUpdate = true } +} + /** A field or a property. */ class FieldOrProperty extends Assignable, Modifiable { FieldOrProperty() { @@ -1784,6 +1941,30 @@ private class FieldOrPropertyRead extends FieldOrPropertyAccess, AssignableRead } } +/** + * A data flow node used for control-flow insensitive flow through fields + * and properties. + * + * In global data flow this is used to model flow through static fields and + * properties, while for lambda flow we additionally use it to track assignments + * in constructors to uses within the same class. + */ +class FlowInsensitiveFieldNode extends NodeImpl, TFlowInsensitiveFieldNode { + private FieldOrProperty f; + + FlowInsensitiveFieldNode() { this = TFlowInsensitiveFieldNode(f) } + + override DataFlowCallable getEnclosingCallableImpl() { result.asFieldOrProperty() = f } + + override Type getTypeImpl() { result = f.getType() } + + override ControlFlow::Node getControlFlowNodeImpl() { none() } + + override Location getLocationImpl() { result = f.getLocation() } + + override string toStringImpl() { result = "[flow-insensitive] " + f } +} + /** * Holds if `pred` can flow to `succ`, by jumping from one callable to * another. Additional steps specified by the configuration are *not* @@ -1792,13 +1973,16 @@ private class FieldOrPropertyRead extends FieldOrPropertyAccess, AssignableRead predicate jumpStep(Node pred, Node succ) { pred.(NonLocalJumpNode).getAJumpSuccessor(true) = succ or - exists(FieldOrProperty fl, FieldOrPropertyRead flr | - fl.isStatic() and - fl.isFieldLike() and - fl.getAnAssignedValue() = pred.asExpr() and - fl.getAnAccess() = flr and - flr = succ.asExpr() and - flr.hasNonlocalValue() + exists(FieldOrProperty f | f.isStatic() | + f.getAnAssignedValue() = pred.asExpr() and + succ = TFlowInsensitiveFieldNode(f) + or + exists(FieldOrPropertyRead fr | + pred = TFlowInsensitiveFieldNode(f) and + f.getAnAccess() = fr and + fr = succ.asExpr() and + fr.hasNonlocalValue() + ) ) or FlowSummaryImpl::Private::Steps::summaryJumpStep(pred.(FlowSummaryNode).getSummaryNode(), @@ -1834,6 +2018,18 @@ private PropertyContent getResultContent() { result.getProperty() = any(SystemThreadingTasksTaskTClass c_).getResultProperty() } +private predicate primaryConstructorParameterStore( + SsaDefinitionExtNode node1, PrimaryConstructorParameterContent c, Node node2 +) { + exists(Ssa::ExplicitDefinition def, ControlFlow::Node cfn, Parameter p | + def = node1.getDefinitionExt() and + p = def.getSourceVariable().getAssignable() and + cfn = def.getControlFlowNode() and + node2 = TInstanceParameterAccessNode(cfn, true) and + c.getParameter() = p + ) +} + /** * Holds if data can flow from `node1` to `node2` via an assignment to * content `c`. @@ -1871,6 +2067,14 @@ predicate storeStep(Node node1, ContentSet c, Node node2) { c = getResultContent() ) or + primaryConstructorParameterStore(node1, c, node2) + or + exists(Parameter p | + node1 = TExplicitParameterNode(p) and + node2 = TPrimaryConstructorThisAccessNode(p, true) and + c.(PrimaryConstructorParameterContent).getParameter() = p + ) + or FlowSummaryImpl::Private::Steps::summaryStoreStep(node1.(FlowSummaryNode).getSummaryNode(), c, node2.(FlowSummaryNode).getSummaryNode()) } @@ -1963,6 +2167,14 @@ predicate readStep(Node node1, ContentSet c, Node node2) { node2.asExpr().(AwaitExpr).getExpr() = node1.asExpr() and c = getResultContent() or + node1 = + any(InstanceParameterAccessNode n | + n.getUnderlyingControlFlowNode() = node2.(ExprNode).getControlFlowNode() and + n.getParameter() = c.(PrimaryConstructorParameterContent).getParameter() and + n.isPreUpdate() + ) and + node2.asExpr() instanceof ParameterRead + or // node1 = (..., node2, ...) // node1.ItemX flows to node2 exists(TupleExpr te, int i, Expr item | @@ -2025,6 +2237,8 @@ predicate clearsContent(Node n, ContentSet c) { c.(FieldContent).getField() = f.getUnboundDeclaration() and not f.isRef() ) + or + n = any(PostUpdateNode n1 | primaryConstructorParameterStore(_, c, n1)).getPreUpdateNode() } /** @@ -2258,6 +2472,8 @@ module PostUpdateNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = cfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(oc) } override DotNet::Type getTypeImpl() { result = oc.getType() } @@ -2289,6 +2505,8 @@ module PostUpdateNodes { override DataFlowCallable getEnclosingCallableImpl() { result.asCallable() = cfn.getEnclosingCallable() + or + result = getEnclosingStaticFieldOrProperty(cfn.getAstNode()) } override Type getTypeImpl() { result = cfn.getAstNode().(Expr).getType() } @@ -2310,6 +2528,32 @@ module PostUpdateNodes { override Node getPreUpdateNode() { result.(FlowSummaryNode).getSummaryNode() = preUpdateNode } } + + private class InstanceParameterAccessPostUpdateNode extends PostUpdateNode, + InstanceParameterAccessNode + { + private ControlFlow::Node cfn; + + InstanceParameterAccessPostUpdateNode() { this = TInstanceParameterAccessNode(cfn, true) } + + override Node getPreUpdateNode() { result = TInstanceParameterAccessNode(cfn, false) } + + override string toStringImpl() { result = "[post] this" } + } + + private class PrimaryConstructorThisAccessPostUpdateNode extends PostUpdateNode, + PrimaryConstructorThisAccessNode + { + private Parameter p; + + PrimaryConstructorThisAccessPostUpdateNode() { + this = TPrimaryConstructorThisAccessNode(p, true) + } + + override Node getPreUpdateNode() { result = TPrimaryConstructorThisAccessNode(p, false) } + + override string toStringImpl() { result = "[post] this" } + } } private import PostUpdateNodes @@ -2437,6 +2681,24 @@ predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preserves nodeTo.asExpr().(EventRead).getTarget() = aee.getTarget() and preservesValue = false ) + or + preservesValue = true and + exists(FieldOrProperty f, FieldOrPropertyAccess fa | + fa = f.getAnAccess() and + fa.targetIsLocalInstance() + | + exists(AssignableDefinition def | + def.getTargetAccess() = fa and + nodeFrom.asExpr() = def.getSource() and + nodeTo = TFlowInsensitiveFieldNode(f) and + nodeFrom.getEnclosingCallable() instanceof Constructor + ) + or + nodeFrom = TFlowInsensitiveFieldNode(f) and + f.getAnAccess() = fa and + fa = nodeTo.asExpr() and + fa.(FieldOrPropertyRead).hasNonlocalValue() + ) } /** @@ -2468,6 +2730,11 @@ class ContentApprox extends TContentApprox { this = TElementApproxContent() and result = "element" or this = TSyntheticFieldApproxContent() and result = "approximated synthetic field" + or + exists(string firstChar | + this = TPrimaryConstructorParameterApproxContent(firstChar) and + result = "approximated parameter field " + firstChar + ) } } @@ -2481,6 +2748,14 @@ private string approximatePropertyContent(PropertyContent pc) { result = pc.getProperty().getName().prefix(1) } +/** + * Gets a string for approximating the name of a synthetic field corresponding + * to a primary constructor parameter. + */ +private string approximatePrimaryConstructorParameterContent(PrimaryConstructorParameterContent pc) { + result = pc.getParameter().getName().prefix(1) +} + /** Gets an approximated value for content `c`. */ pragma[nomagic] ContentApprox getContentApprox(Content c) { @@ -2491,6 +2766,9 @@ ContentApprox getContentApprox(Content c) { c instanceof ElementContent and result = TElementApproxContent() or c instanceof SyntheticFieldContent and result = TSyntheticFieldApproxContent() + or + result = + TPrimaryConstructorParameterApproxContent(approximatePrimaryConstructorParameterContent(c)) } /** diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index c686f226452..1dc3f77a450 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -239,6 +239,23 @@ class PropertyContent extends Content, TPropertyContent { override Location getLocation() { result = p.getLocation() } } +/** + * A reference to a synthetic field corresponding to a + * primary constructor parameter. + */ +class PrimaryConstructorParameterContent extends Content, TPrimaryConstructorParameterContent { + private Parameter p; + + PrimaryConstructorParameterContent() { this = TPrimaryConstructorParameterContent(p) } + + /** Gets the underlying parameter. */ + Parameter getParameter() { result = p } + + override string toString() { result = "parameter " + p.getName() } + + override Location getLocation() { result = p.getLocation() } +} + /** A reference to an element in a collection. */ class ElementContent extends Content, TElementContent { override string toString() { result = "element" } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index 8a1f2b5b296..8b7db48140a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -870,6 +870,39 @@ private module CapturedVariableImpl { ) ) } + + /** + * Holds if captured local scope variable `v` is written inside the callable + * to which `bb` belongs. + * + * In this case a pseudo-read is inserted at the exit node at index `i` in `bb`, + * in order to make the write live. + * + * Example: + * + * ```csharp + * class C { + * void M1() { + * int i = 0; + * void M2() { i = 2; }; + * M2(); + * System.Console.WriteLine(i); + * } + * } + * ``` + * + * The write to `i` inside `M2` on line 4 is live because of the implicit call + * definition on line 5. + */ + predicate capturedExitRead( + ControlFlow::BasicBlock bb, int i, CapturedWrittenLocalScopeSourceVariable v + ) { + exists(ControlFlow::Nodes::AnnotatedExitNode exit | + exit.isNormal() and + variableDefinition(bb.getAPredecessor*(), _, v, _) and + exit = bb.getNode(i) + ) + } } /** @@ -1083,7 +1116,7 @@ private predicate variableReadPseudo(ControlFlow::BasicBlock bb, int i, Ssa::Sou or refReadBeforeWrite(bb, i, v) or - capturedReadOut(bb, i, v, _, _, _) + CapturedVariableImpl::capturedExitRead(bb, i, v) or capturedReadIn(bb, i, v, _, _, _) } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index 034972b5f22..53b4cceb960 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -139,6 +139,79 @@ class LocalUrlSanitizer extends Sanitizer { LocalUrlSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() } } +/** + * An argument to a call to `List.Contains()` that is a sanitizer for URL redirects. + */ +private predicate isContainsUrlSanitizer(Guard guard, Expr e, AbstractValue v) { + guard = + any(MethodCall method | + exists(Method m | m = method.getTarget() | + m.hasName("Contains") and + e = method.getArgument(0) + ) and + v.(AbstractValues::BooleanValue).getValue() = true + ) +} + +/** + * An URL argument to a call to `.Contains()` that is a sanitizer for URL redirects. + * + * This `Contains` method is usually called on a list, but the sanitizer matches any call to a method + * called `Contains`, so other methods with the same name will also be considered sanitizers. + */ +class ContainsUrlSanitizer extends Sanitizer { + ContainsUrlSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} + +/** + * A check that the URL is relative, and therefore safe for URL redirects. + */ +private predicate isRelativeUrlSanitizer(Guard guard, Expr e, AbstractValue v) { + guard = + any(PropertyAccess access | + access.getProperty().hasFullyQualifiedName("System", "Uri", "IsAbsoluteUri") and + e = access.getQualifier() and + v.(AbstractValues::BooleanValue).getValue() = false + ) +} + +/** + * A check that the URL is relative, and therefore safe for URL redirects. + */ +class RelativeUrlSanitizer extends Sanitizer { + RelativeUrlSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} + +/** + * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. + * E.g. `url.Host == "example.org"` + */ +private predicate isHostComparisonSanitizer(Guard guard, Expr e, AbstractValue v) { + guard = + any(EqualityOperation comparison | + exists(PropertyAccess access | access = comparison.getAnOperand() | + access.getProperty().hasFullyQualifiedName("System", "Uri", "Host") and + e = access.getQualifier() + ) and + if comparison instanceof EQExpr + then v.(AbstractValues::BooleanValue).getValue() = true + else v.(AbstractValues::BooleanValue).getValue() = false + ) +} + +/** + * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. + */ +class HostComparisonSanitizer extends Sanitizer { + HostComparisonSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } +} + /** * A call to the getter of the RawUrl property, whose value is considered to be safe for URL * redirects. diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll index 5ad2b6bc675..1dea41c8a7c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/XSSQuery.qll @@ -42,14 +42,18 @@ predicate xssFlow(XssNode source, XssNode sink, string message) { */ module PathGraph { /** Holds if `(pred,succ)` is an edge in the graph of data flow path explanations. */ - query predicate edges(XssNode pred, XssNode succ) { - exists(XssTracking::PathNode a, XssTracking::PathNode b | XssTracking::PathGraph::edges(a, b) | + query predicate edges(XssNode pred, XssNode succ, string key, string val) { + exists(XssTracking::PathNode a, XssTracking::PathNode b | + XssTracking::PathGraph::edges(a, b, key, val) + | pred.asDataFlowNode() = a and succ.asDataFlowNode() = b ) or xssFlow(pred, succ, _) and - pred instanceof XssAspNode + pred instanceof XssAspNode and + key = "provenance" and + val = "" } /** Holds if `n` is a node in the graph of data flow path explanations. */ diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index f145a9a7275..c9ee11bd1ee 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -24,6 +24,12 @@ compilations( string cwd : string ref ); +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + /** * The arguments that were passed to the extractor for a compiler * invocation. If `id` is for the compiler invocation diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme.stats b/csharp/ql/lib/semmlecode.csharp.dbscheme.stats index acbf07eb460..e217f9cea60 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme.stats +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme.stats @@ -6,7 +6,7 @@ @diagnostic - 138225 + 138224 @extractor_message @@ -22,15 +22,15 @@ @file - 92269 + 92261 @folder - 34266 + 34263 @namespace - 206511 + 206514 @namespace_declaration @@ -41,12 +41,12 @@ 1202 - @using_namespace_directive - 286857 + @directive_if + 20769 - @directive_if - 20770 + @using_namespace_directive + 286854 @directive_elif @@ -61,20 +61,20 @@ 20338 - @directive_endregion - 38815 + @directive_region + 38812 - @directive_region - 38815 + @directive_endregion + 38812 @directive_line - 539554 + 539550 @directive_nullable - 467929 + 467925 @directive_warning @@ -88,21 +88,21 @@ @directive_undefine 68 - - @directive_define - 83 - @pragma_checksum 9570 + + @directive_define + 83 + @pragma_warning 57623 @typeref - 4008630 + 4008699 @bool_type @@ -158,23 +158,23 @@ @enum_type - 163756 + 163759 @struct_type - 716360 + 716372 @class_type - 4319642 + 4319716 @interface_type - 2787029 + 2787078 @delegate_type - 834337 + 834351 @null_type @@ -182,7 +182,7 @@ @type_parameter - 897766 + 897781 @pointer_type @@ -194,7 +194,7 @@ @array_type - 95570 + 95572 @void_type @@ -234,15 +234,15 @@ @attribute_default - 13884494 + 13884733 @attribute_return - 338129 + 338135 @attribute_assembly - 42997 + 42996 @attribute_module @@ -262,15 +262,15 @@ @type_mention - 3321290 - - - @location_default - 154018663 + 3322420 @type_parameter_constraints - 897766 + 897781 + + + @location_default + 154005847 @modifier @@ -278,43 +278,43 @@ @property - 5910461 + 5910563 @indexer - 103348 - - - @event - 60799 + 103350 @getter - 6006793 + 6006897 @setter - 895136 + 895152 + + + @event + 60800 @add_event_accessor - 60799 + 60800 @remove_event_accessor - 60799 + 60800 @operator - 146896 + 146898 @method - 17405743 + 17406043 @constructor - 5023369 + 5023456 @destructor @@ -326,15 +326,15 @@ @addressable_field - 9983265 + 9983437 @constant - 3003952 + 3004004 @addressable_local_variable - 617261 + 617257 @local_constant @@ -346,19 +346,19 @@ @parameter - 31463252 + 31463795 @block_stmt - 797354 + 797317 @expr_stmt - 866011 + 866006 @if_stmt - 371649 + 371632 @switch_stmt @@ -366,7 +366,7 @@ @while_stmt - 23332 + 23333 @do_stmt @@ -374,19 +374,19 @@ @for_stmt - 22829 + 22828 @foreach_stmt - 32476 + 32474 @break_stmt - 115989 + 115991 @continue_stmt - 10335 + 10334 @goto_stmt @@ -402,19 +402,19 @@ @throw_stmt - 175591 + 175588 @return_stmt - 374232 + 374214 @yield_stmt - 7199 + 7198 @try_stmt - 21813 + 21811 @checked_stmt @@ -430,11 +430,11 @@ @using_block_stmt - 9207 + 9206 @var_decl_stmt - 557026 + 557023 @const_decl_stmt @@ -458,11 +458,11 @@ @catch - 30235 + 30233 @case_stmt - 130469 + 130471 @local_function_stmt @@ -470,35 +470,31 @@ @using_decl_stmt - 13938 - - - @xmldtd - 72 + 13937 @bool_literal_expr - 517976 + 517984 @char_literal_expr - 75980 + 75977 @decimal_literal_expr - 185556 + 185559 @int_literal_expr - 4872986 + 4873070 @long_literal_expr - 10294 + 10293 @uint_literal_expr - 10266 + 10265 @ulong_literal_expr @@ -506,7 +502,7 @@ @float_literal_expr - 129367 + 129369 @double_literal_expr @@ -514,35 +510,35 @@ @utf16_string_literal_expr - 1936294 + 1936327 @null_literal_expr - 249869 + 249861 @this_access_expr - 1139948 + 1139940 @base_access_expr - 57395 + 57393 @local_variable_access_expr - 1800146 + 1800136 @parameter_access_expr - 1043216 + 1043167 @field_access_expr - 1360597 + 1361171 @property_access_expr - 1468662 + 1468688 @method_access_expr @@ -554,39 +550,39 @@ @indexer_access_expr - 73965 + 73964 @array_access_expr - 95246 + 95237 @type_access_expr - 1319846 + 1319868 @typeof_expr - 733314 + 733326 @method_invocation_expr - 1292967 + 1292925 @delegate_invocation_expr - 14028 + 14027 @operator_invocation_expr - 53468 + 53469 @cast_expr - 666675 + 666635 @object_creation_expr - 233005 + 232984 @explicit_delegate_creation_expr @@ -598,11 +594,11 @@ @array_creation_expr - 842373 + 842441 @default_expr - 475086 + 475094 @plus_expr @@ -610,7 +606,7 @@ @minus_expr - 83951 + 83947 @bit_not_expr @@ -618,11 +614,11 @@ @log_not_expr - 69873 + 69874 @post_incr_expr - 34721 + 34720 @post_decr_expr @@ -638,7 +634,7 @@ @mul_expr - 13675 + 13674 @div_expr @@ -650,15 +646,15 @@ @add_expr - 89979 + 89975 @sub_expr - 32232 + 32231 @lshift_expr - 20398 + 20397 @rshift_expr @@ -666,11 +662,11 @@ @lt_expr - 42477 + 42475 @gt_expr - 26006 + 26005 @le_expr @@ -682,15 +678,15 @@ @eq_expr - 167785 + 167777 @ne_expr - 126217 + 126219 @bit_and_expr - 19734 + 19733 @bit_xor_expr @@ -698,23 +694,23 @@ @bit_or_expr - 37842 + 37840 @log_and_expr - 64043 + 64040 @log_or_expr - 40881 + 40879 @is_expr - 27102 + 27099 @as_expr - 25540 + 25539 @null_coalescing_expr @@ -722,15 +718,15 @@ @conditional_expr - 25478 + 25477 @simple_assign_expr - 1445790 + 1445815 @assign_add_expr - 10986 + 10985 @assign_sub_expr @@ -770,15 +766,15 @@ @object_init_expr - 192700 + 192703 @collection_init_expr - 17878 + 17877 @array_init_expr - 836437 + 836505 @checked_expr @@ -786,11 +782,11 @@ @unchecked_expr - 2774 + 2773 @constructor_init_expr - 48761 + 48759 @add_event_expr @@ -802,11 +798,11 @@ @local_var_decl_expr - 619056 + 619052 @lambda_expr - 246845 + 246837 @anonymous_method_expr @@ -814,7 +810,7 @@ @pointer_indirection_expr - 8988 + 8987 @address_of_expr @@ -826,15 +822,15 @@ @await_expr - 111126 + 111125 @nameof_expr - 60900 + 60898 @interpolated_string_expr - 45840 + 45841 @unknown_expr @@ -842,7 +838,7 @@ @throw_expr - 6054 + 6053 @tuple_expr @@ -854,7 +850,7 @@ @ref_expr - 3050 + 3049 @discard_expr @@ -886,7 +882,7 @@ @switch_case_expr - 13129 + 13128 @assign_coalesce_expr @@ -914,7 +910,7 @@ @not_pattern_expr - 4716 + 4720 @and_pattern_expr @@ -922,7 +918,7 @@ @or_pattern_expr - 3133 + 3131 @function_pointer_invocation_expr @@ -958,7 +954,7 @@ @define_symbol_expr - 40316 + 40315 @par_expr @@ -984,13 +980,17 @@ @spread_element_expr 15 + + @xmldtd + 72 + @xmlelement - 67061685 + 67055539 @xmlattribute - 45633086 + 45628904 @xmlnamespace @@ -1002,27 +1002,27 @@ @xmlcharacters - 50185384 + 50180784 @singlelinecomment - 835561 + 835522 @xmldoccomment - 1480701 + 1480593 @multilinecomment - 102857 + 102852 @commentblock - 452781 + 452748 @asp_close_tag - 24358 + 24357 @asp_code @@ -1042,15 +1042,15 @@ @asp_open_tag - 33602 + 33601 @asp_quoted_string - 58511 + 58509 @asp_text - 60439 + 60436 @asp_xml_directive @@ -1957,11 +1957,11 @@ 0 - @cil_field + @cil_parameter 0 - @cil_parameter + @cil_field 0 @@ -2056,6 +2056,86 @@ + + compilation_info + 0 + + + id + 0 + + + info_key + 0 + + + info_value + 0 + + + + + id + info_key + + + 12 + + + + + + id + info_value + + + 12 + + + + + + info_key + id + + + 12 + + + + + + info_key + info_value + + + 12 + + + + + + info_value + id + + + 12 + + + + + + info_value + info_key + + + 12 + + + + + + compilation_args 17990 @@ -2354,7 +2434,7 @@ compilation_expanded_args - 593387 + 593382 id @@ -2684,7 +2764,7 @@ 1 2 - 59242 + 59241 2 @@ -2710,7 +2790,7 @@ 1 2 - 59323 + 59322 2 @@ -2730,7 +2810,7 @@ compilation_compiling_files - 49166 + 49163 id @@ -2742,7 +2822,7 @@ file - 33857 + 33855 @@ -2939,57 +3019,62 @@ 1 2 - 23 + 14 2 3 - 897 + 905 3 5 - 140 + 144 5 6 - 729 + 725 6 7 - 84 + 83 7 8 - 326 + 328 8 10 - 281 + 202 10 - 14 - 314 + 13 + 281 - 14 - 21 - 294 + 13 + 19 + 274 - 21 - 67 + 19 + 35 + 267 + + + 35 + 140 263 - 67 - 348 - 157 + 140 + 343 + 21 @@ -3005,7 +3090,7 @@ 1 2 - 21716 + 21715 2 @@ -3031,17 +3116,17 @@ 1 2 - 23811 + 23185 2 3 - 9329 + 9805 3 32 - 716 + 864 @@ -3051,7 +3136,7 @@ compilation_referencing_files - 466141 + 466138 id @@ -3290,57 +3375,57 @@ 1 5 - 343 + 370 5 6 - 499 + 613 6 7 - 890 + 755 7 - 22 + 23 + 370 + + + 23 + 29 377 - - 22 - 29 - 384 - 29 - 36 - 357 - - - 36 - 48 + 33 337 - 48 - 64 + 33 + 46 350 - 64 - 67 - 276 + 46 + 63 + 343 - 67 - 70 + 63 + 69 + 350 + + + 69 + 73 411 - 70 - 80 - 263 + 73 + 83 + 209 @@ -3422,62 +3507,62 @@ 2 5 - 330 + 323 5 6 - 242 + 296 6 7 - 620 + 593 7 - 8 - 310 + 9 + 418 - 8 - 14 - 384 - - - 14 - 23 + 9 + 19 370 - 23 - 30 - 404 + 19 + 26 + 418 - 30 - 37 - 391 + 26 + 33 + 411 - 37 - 66 + 33 + 40 + 384 + + + 40 + 69 + 370 + + + 69 + 71 + 343 + + + 71 + 74 377 - 66 - 70 - 391 - - - 70 - 72 - 310 - - - 72 - 78 - 323 + 74 + 82 + 148 @@ -3487,7 +3572,7 @@ compilation_time - 11250 + 11249 id @@ -3503,7 +3588,7 @@ seconds - 6581 + 6580 @@ -3549,12 +3634,12 @@ 6 7 - 7 + 12 7 8 - 1599 + 1594 @@ -3648,34 +3733,34 @@ 12 - 282 - 283 + 280 + 281 2 - 297 - 298 + 290 + 291 2 - 368 - 369 + 372 + 373 2 - 370 - 371 + 382 + 383 2 - 638 - 639 - 2 + 639 + 640 + 5 640 641 - 5 + 2 @@ -3691,17 +3776,17 @@ 1 2 - 5593 + 5545 2 6 - 524 + 589 6 17 - 463 + 446 @@ -3717,7 +3802,7 @@ 1 2 - 6581 + 6580 @@ -3733,17 +3818,17 @@ 1 2 - 5686 + 5648 2 3 - 428 + 468 3 5 - 466 + 463 @@ -3753,11 +3838,11 @@ diagnostic_for - 138225 + 138224 diagnostic - 138225 + 138224 compilation @@ -3783,7 +3868,7 @@ 1 2 - 138225 + 138224 @@ -3799,7 +3884,7 @@ 1 2 - 138225 + 138224 @@ -3815,7 +3900,7 @@ 1 2 - 138225 + 138224 @@ -4099,11 +4184,11 @@ diagnostics - 138225 + 138224 id - 138225 + 138224 severity @@ -4123,7 +4208,7 @@ location - 138225 + 138224 @@ -4137,7 +4222,7 @@ 1 2 - 138225 + 138224 @@ -4153,7 +4238,7 @@ 1 2 - 138225 + 138224 @@ -4169,7 +4254,7 @@ 1 2 - 138225 + 138224 @@ -4185,7 +4270,7 @@ 1 2 - 138225 + 138224 @@ -4201,7 +4286,7 @@ 1 2 - 138225 + 138224 @@ -4597,7 +4682,7 @@ 1 2 - 138225 + 138224 @@ -4613,7 +4698,7 @@ 1 2 - 138225 + 138224 @@ -4629,7 +4714,7 @@ 1 2 - 138225 + 138224 @@ -4645,7 +4730,7 @@ 1 2 - 138225 + 138224 @@ -4661,7 +4746,7 @@ 1 2 - 138225 + 138224 @@ -4699,7 +4784,7 @@ stack_trace - 295 + 282 @@ -4912,8 +4997,8 @@ 1 - 294 - 295 + 281 + 282 1 @@ -5008,8 +5093,8 @@ 12 - 295 - 296 + 282 + 283 1 @@ -5141,16 +5226,11 @@ 1 2 - 21 - - - 2 - 3 - 36 + 57 3 - 207 + 193 5 @@ -5292,17 +5372,17 @@ 1 2 - 4034 + 4028 2 3 - 491 + 518 3 - 8 - 124 + 12 + 103 @@ -5413,12 +5493,12 @@ 1 2 - 7220 + 7254 2 4 - 413 + 379 @@ -5434,47 +5514,47 @@ 1 2 - 98 + 79 2 3 - 43 + 44 3 4 - 26 + 24 4 6 - 27 + 26 6 - 11 + 9 23 - 11 - 24 - 23 + 9 + 16 + 22 - 24 - 42 + 16 + 34 24 - 45 - 199 - 23 + 35 + 80 + 22 - 229 - 2173 - 8 + 85 + 2137 + 18 @@ -5490,7 +5570,7 @@ 1 2 - 295 + 282 @@ -5506,7 +5586,7 @@ 1 2 - 295 + 282 @@ -5522,11 +5602,11 @@ 1 2 - 292 + 279 2 - 55 + 37 3 @@ -5543,42 +5623,47 @@ 1 2 - 112 + 95 2 3 - 53 + 47 3 4 - 25 + 28 4 - 6 + 5 + 15 + + + 5 + 7 26 - 6 - 13 - 23 + 7 + 17 + 24 - 13 - 29 - 23 + 18 + 37 + 24 - 29 - 97 - 23 + 37 + 609 + 22 - 158 - 778 - 10 + 809 + 810 + 1 @@ -5594,47 +5679,47 @@ 1 2 - 102 + 85 2 3 - 48 + 47 3 4 - 24 + 23 4 5 - 15 + 16 5 7 - 24 - - - 7 - 18 - 24 - - - 18 - 37 26 - 38 - 178 + 7 + 14 + 22 + + + 14 + 30 23 - 192 - 1141 - 9 + 31 + 62 + 22 + + + 63 + 1135 + 18 @@ -5652,11 +5737,11 @@ cpu_seconds - 1123 + 1110 elapsed_seconds - 1602 + 1607 @@ -5702,22 +5787,22 @@ 1 2 - 784 + 772 2 3 - 235 + 220 3 - 5 - 95 + 4 + 87 - 5 - 6 - 7 + 4 + 7 + 30 @@ -5733,22 +5818,22 @@ 1 2 - 784 + 772 2 3 - 235 + 220 3 - 5 - 95 + 4 + 87 - 5 - 6 - 7 + 4 + 7 + 30 @@ -5764,12 +5849,7 @@ 1 2 - 1597 - - - 2 - 3 - 5 + 1607 @@ -5785,12 +5865,7 @@ 1 2 - 1597 - - - 2 - 3 - 5 + 1607 @@ -6003,31 +6078,31 @@ locations_default - 154018663 + 154005847 id - 154018663 + 154005847 file - 85470 + 85462 beginLine - 373111 + 373077 beginColumn - 11199 + 11198 endLine - 387784 + 387748 endColumn - 15840 + 15839 @@ -6041,7 +6116,7 @@ 1 2 - 154018663 + 154005847 @@ -6057,7 +6132,7 @@ 1 2 - 154018663 + 154005847 @@ -6073,7 +6148,7 @@ 1 2 - 154018663 + 154005847 @@ -6089,7 +6164,7 @@ 1 2 - 154018663 + 154005847 @@ -6105,7 +6180,7 @@ 1 2 - 154018663 + 154005847 @@ -6126,22 +6201,22 @@ 14 29 - 6446 + 6445 29 56 - 6476 + 6478 56 99 - 6543 + 6540 99 147 - 6551 + 6550 147 @@ -6156,32 +6231,32 @@ 383 562 - 6486 + 6478 562 - 889 - 6413 + 887 + 6410 - 889 + 887 1560 - 6691 + 6701 1561 2241 - 6659 + 6658 2243 4570 - 6624 + 6623 4570 25909 - 6421 + 6420 26296 @@ -6202,22 +6277,22 @@ 1 9 - 7100 + 7099 9 17 - 7002 + 6999 17 27 - 6799 + 6801 27 44 - 6664 + 6663 44 @@ -6227,12 +6302,12 @@ 65 101 - 6458 + 6455 101 151 - 6997 + 6999 151 @@ -6242,12 +6317,12 @@ 229 401 - 6541 + 6538 401 674 - 6413 + 6415 674 @@ -6257,7 +6332,7 @@ 1032 2141 - 6426 + 6425 2149 @@ -6283,7 +6358,7 @@ 6 10 - 6907 + 6906 10 @@ -6293,17 +6368,17 @@ 18 27 - 7579 + 7578 27 38 - 6844 + 6846 38 51 - 6631 + 6628 51 @@ -6313,7 +6388,7 @@ 64 82 - 6699 + 6698 82 @@ -6323,17 +6398,17 @@ 106 126 - 7544 + 7543 126 167 - 6433 + 6435 167 229 - 6503 + 6500 229 @@ -6354,17 +6429,17 @@ 1 9 - 6955 + 6954 9 18 - 6599 + 6596 18 27 - 6701 + 6703 27 @@ -6374,47 +6449,47 @@ 43 72 - 6521 + 6523 72 112 - 6536 + 6530 112 190 - 7235 + 7237 190 285 - 6899 + 6901 285 - 483 - 6413 + 484 + 6593 - 483 - 830 - 6559 + 484 + 841 + 6410 - 830 - 1376 - 6428 + 841 + 1381 + 7237 - 1378 - 2594 - 6488 + 1381 + 2762 + 6433 - 2594 + 2765 135652 - 5523 + 4733 @@ -6430,12 +6505,12 @@ 1 12 - 7045 + 7044 12 23 - 6832 + 6831 23 @@ -6445,12 +6520,12 @@ 37 51 - 6488 + 6490 51 66 - 6536 + 6533 66 @@ -6460,12 +6535,12 @@ 86 107 - 6556 + 6555 107 131 - 6634 + 6633 131 @@ -6475,22 +6550,22 @@ 153 183 - 7047 + 7049 183 226 - 7123 + 7117 226 304 - 6418 + 6423 304 4355 - 4603 + 4600 @@ -6511,67 +6586,67 @@ 2 3 - 30302 + 30300 3 6 - 29575 + 29573 6 7 - 18315 + 18313 7 9 - 33662 + 33659 9 11 - 28221 + 28219 11 15 - 28337 + 28334 15 21 - 29583 + 29580 21 29 - 28560 + 28557 29 47 - 28700 + 28698 47 84 - 28144 + 28141 84 146 - 28166 + 28164 146 946 - 27993 + 27991 946 - 61760 - 27690 + 61765 + 27687 @@ -6587,67 +6662,67 @@ 1 2 - 39449 + 39445 2 3 - 14324 + 14322 3 4 - 51910 + 51905 4 5 - 40206 + 40202 5 6 - 18776 + 18775 6 7 - 17656 + 17654 7 8 - 20020 + 20018 8 11 - 32037 + 32034 11 20 - 29199 + 29196 20 35 - 29472 + 29470 35 59 - 28078 + 28076 59 366 - 28028 + 28026 366 32788 - 23949 + 23947 @@ -6663,62 +6738,62 @@ 1 2 - 22675 + 22673 2 3 - 54623 + 54618 3 4 - 40512 + 40508 4 5 - 27920 + 27918 5 7 - 32210 + 32207 7 9 - 24089 + 24087 9 12 - 28184 + 28181 12 17 - 31498 + 31495 17 26 - 29134 + 29131 26 43 - 28893 + 28891 43 89 - 28352 + 28349 89 2349 - 25015 + 25012 @@ -6734,47 +6809,47 @@ 1 2 - 58517 + 58511 2 3 - 97605 + 97596 3 4 - 60741 + 60735 4 5 - 32341 + 32338 5 6 - 21888 + 21886 6 8 - 33208 + 33205 8 11 - 30320 + 30317 11 16 - 28221 + 28219 16 1412 - 10267 + 10266 @@ -6790,72 +6865,72 @@ 1 2 - 6654 + 6653 2 3 - 38529 + 38525 3 4 - 21547 + 21545 4 5 - 20664 + 20663 5 6 - 27171 + 27168 6 8 - 31894 + 31892 8 11 - 29791 + 29788 11 15 - 28347 + 28344 15 22 - 31313 + 31310 22 33 - 28342 + 28339 33 53 - 28036 + 28033 53 80 - 28700 + 28698 80 146 - 28271 + 28269 146 4143 - 23846 + 23844 @@ -6910,7 +6985,7 @@ 130043 - 9382463 + 9382473 152 @@ -6927,7 +7002,7 @@ 1 2 - 6496 + 6495 2 @@ -6951,7 +7026,7 @@ 404 - 6302 + 6301 842 @@ -7111,72 +7186,72 @@ 1 2 - 26331 + 26328 2 4 - 28660 + 28657 4 6 - 29382 + 29379 6 7 - 14574 + 14573 7 8 - 21562 + 21560 8 10 - 32504 + 32501 10 14 - 31972 + 31969 14 20 - 29588 + 29585 20 28 - 29498 + 29495 28 45 - 29420 + 29417 45 83 - 29723 + 29720 83 147 - 29116 + 29114 147 987 - 29101 + 29099 987 60323 - 26346 + 26343 @@ -7192,7 +7267,7 @@ 1 2 - 44634 + 44630 2 @@ -7202,57 +7277,57 @@ 3 4 - 39394 + 39390 4 5 - 56862 + 56857 5 7 - 31375 + 31373 7 8 - 17255 + 17253 8 9 - 23846 + 23844 9 13 - 31917 + 31914 13 26 - 29836 + 29833 26 45 - 29711 + 29708 45 78 - 29104 + 29101 78 500 - 29124 + 29121 500 32902 - 22134 + 22132 @@ -7268,47 +7343,47 @@ 1 2 - 86415 + 86407 2 3 - 84936 + 84928 3 4 - 60991 + 60986 4 5 - 31817 + 31814 5 6 - 21344 + 21342 6 8 - 33288 + 33285 8 11 - 30380 + 30377 11 17 - 30789 + 30786 17 72 - 7820 + 7819 @@ -7324,62 +7399,62 @@ 1 2 - 31280 + 31277 2 3 - 44220 + 44216 3 4 - 46033 + 46029 4 5 - 28274 + 28271 5 7 - 35901 + 35898 7 9 - 25601 + 25599 9 12 - 30418 + 30415 12 17 - 33569 + 33566 17 26 - 29864 + 29861 26 44 - 30195 + 30192 44 93 - 29086 + 29084 93 2350 - 23337 + 23335 @@ -7395,72 +7470,72 @@ 1 2 - 33542 + 33539 2 3 - 26053 + 26050 3 4 - 10909 + 10908 4 5 - 37245 + 37242 5 6 - 21221 + 21219 6 8 - 34332 + 34328 8 11 - 28312 + 28309 11 16 - 33379 + 33376 16 24 - 31982 + 31979 24 38 - 30368 + 30365 38 62 - 29808 + 29806 62 102 - 29254 + 29252 102 183 - 29159 + 29156 183 4143 - 12215 + 12214 @@ -7476,12 +7551,12 @@ 1 2 - 10477 + 10476 2 17 - 1216 + 1215 17 @@ -7517,7 +7592,7 @@ 1 2 - 10663 + 10662 2 @@ -7536,13 +7611,13 @@ 337 - 11710 - 1188 + 11711 + 1190 - 11710 - 28030 - 373 + 11721 + 28029 + 371 @@ -7558,7 +7633,7 @@ 1 2 - 10645 + 10644 2 @@ -7573,17 +7648,17 @@ 20 227 - 1190 - - - 228 - 25708 1188 - 26375 + 227 + 25452 + 1188 + + + 25707 121783 - 225 + 228 @@ -7599,12 +7674,12 @@ 1 2 - 11172 + 11171 2 6 - 1414 + 1413 6 @@ -7614,12 +7689,12 @@ 19 123 - 1198 + 1193 123 429 - 817 + 822 @@ -7635,7 +7710,7 @@ 1 2 - 10635 + 10634 2 @@ -7670,15 +7745,15 @@ locations_mapped - 997818 + 997878 id - 997818 + 997878 mapped_to - 757706 + 757768 @@ -7692,7 +7767,7 @@ 1 2 - 997818 + 997878 @@ -7708,12 +7783,12 @@ 1 2 - 683525 + 683587 2 4 - 58534 + 58533 4 @@ -7728,19 +7803,19 @@ numlines - 67413091 + 67406913 element_id - 67412921 + 67406743 num_lines - 8226 + 8225 num_code - 8128 + 8127 num_comment @@ -7758,7 +7833,7 @@ 1 2 - 67412788 + 67406610 2 @@ -7779,7 +7854,7 @@ 1 2 - 67412790 + 67406612 2 @@ -7800,7 +7875,7 @@ 1 2 - 67412908 + 67406730 2 @@ -7846,7 +7921,7 @@ 9 12 - 712 + 711 12 @@ -7918,7 +7993,7 @@ 1 2 - 6120 + 6119 2 @@ -7928,7 +8003,7 @@ 3 7 - 702 + 701 7 @@ -8015,7 +8090,7 @@ 1 2 - 6318 + 6317 2 @@ -8046,7 +8121,7 @@ 1 2 - 6308 + 6307 2 @@ -8475,7 +8550,7 @@ 1 2 - 13266 + 13267 2 @@ -8496,7 +8571,7 @@ 1 2 - 13266 + 13267 2 @@ -8717,15 +8792,15 @@ files - 92269 + 92261 id - 92269 + 92261 name - 92269 + 92261 @@ -8739,7 +8814,7 @@ 1 2 - 92269 + 92261 @@ -8755,7 +8830,7 @@ 1 2 - 92269 + 92261 @@ -8765,15 +8840,15 @@ folders - 34266 + 34263 id - 34266 + 34263 name - 34266 + 34263 @@ -8787,7 +8862,7 @@ 1 2 - 34266 + 34263 @@ -8803,7 +8878,7 @@ 1 2 - 34266 + 34263 @@ -8813,15 +8888,15 @@ containerparent - 126531 + 126520 parent - 34266 + 34263 child - 126531 + 126520 @@ -8835,12 +8910,12 @@ 1 2 - 20885 + 20883 2 3 - 4736 + 4735 3 @@ -8850,17 +8925,17 @@ 4 7 - 3109 + 3108 7 17 - 2600 + 2599 17 546 - 1211 + 1210 @@ -8876,7 +8951,7 @@ 1 2 - 126531 + 126520 @@ -8886,11 +8961,11 @@ file_extraction_mode - 57603 + 57602 file - 57603 + 57602 mode @@ -8908,7 +8983,7 @@ 1 2 - 57603 + 57602 @@ -8934,15 +9009,15 @@ namespaces - 206511 + 206514 id - 206511 + 206514 name - 67588 + 67590 @@ -8956,7 +9031,7 @@ 1 2 - 206511 + 206514 @@ -8972,7 +9047,7 @@ 1 2 - 40635 + 40636 2 @@ -9138,15 +9213,15 @@ parent_namespace - 8107543 + 8107683 child_id - 8107543 + 8107683 namespace_id - 204927 + 204930 @@ -9160,7 +9235,7 @@ 1 2 - 8107543 + 8107683 @@ -9176,22 +9251,22 @@ 1 2 - 43207 + 43208 2 3 - 28475 + 28476 3 4 - 19319 + 19320 4 5 - 13949 + 13950 5 @@ -9211,7 +9286,7 @@ 11 16 - 15595 + 15596 16 @@ -9236,11 +9311,11 @@ parent_namespace_declaration - 185725 + 185724 child_id - 184424 + 184422 namespace_id @@ -9258,7 +9333,7 @@ 1 2 - 184120 + 184119 2 @@ -9309,22 +9384,22 @@ using_global - 9372 + 9371 id - 9372 + 9371 using_namespace_directives - 286857 + 286854 id - 286857 + 286854 namespace_id @@ -9342,7 +9417,7 @@ 1 2 - 286857 + 286854 @@ -9501,15 +9576,15 @@ using_directive_location - 286958 + 286956 id - 286958 + 286956 loc - 286890 + 286888 @@ -9523,7 +9598,7 @@ 1 2 - 286958 + 286956 @@ -9539,7 +9614,7 @@ 1 2 - 286823 + 286821 2 @@ -9554,11 +9629,11 @@ directive_ifs - 20770 + 20769 id - 20770 + 20769 branchTaken @@ -9580,7 +9655,7 @@ 1 2 - 20770 + 20769 @@ -9596,7 +9671,7 @@ 1 2 - 20770 + 20769 @@ -9706,7 +9781,7 @@ parent - 178 + 177 index @@ -10422,7 +10497,7 @@ start - 20770 + 20769 @@ -10452,7 +10527,7 @@ 1 2 - 20770 + 20769 @@ -10462,11 +10537,11 @@ directive_define_symbols - 40316 + 40315 id - 40316 + 40315 name @@ -10484,7 +10559,7 @@ 1 2 - 40316 + 40315 @@ -10565,15 +10640,15 @@ directive_regions - 38815 + 38812 id - 38815 + 38812 name - 18813 + 18812 @@ -10587,7 +10662,7 @@ 1 2 - 38815 + 38812 @@ -10603,7 +10678,7 @@ 1 2 - 15530 + 15529 2 @@ -10628,15 +10703,15 @@ directive_endregions - 38815 + 38812 id - 38815 + 38812 start - 38815 + 38812 @@ -10650,7 +10725,7 @@ 1 2 - 38815 + 38812 @@ -10666,7 +10741,7 @@ 1 2 - 38815 + 38812 @@ -10676,11 +10751,11 @@ directive_lines - 539554 + 539550 id - 539554 + 539550 kind @@ -10698,7 +10773,7 @@ 1 2 - 539554 + 539550 @@ -10739,11 +10814,11 @@ directive_line_value - 119550 + 119549 id - 119550 + 119549 line @@ -10761,7 +10836,7 @@ 1 2 - 119550 + 119549 @@ -10837,11 +10912,11 @@ directive_line_file - 175157 + 175155 id - 175157 + 175155 file @@ -10859,7 +10934,7 @@ 1 2 - 175157 + 175155 @@ -10935,11 +11010,11 @@ directive_line_offset - 55607 + 55606 id - 55607 + 55606 offset @@ -10957,7 +11032,7 @@ 1 2 - 55607 + 55606 @@ -11023,11 +11098,11 @@ directive_line_span - 55607 + 55606 id - 55607 + 55606 startLine @@ -11057,7 +11132,7 @@ 1 2 - 55607 + 55606 @@ -11073,7 +11148,7 @@ 1 2 - 55607 + 55606 @@ -11089,7 +11164,7 @@ 1 2 - 55607 + 55606 @@ -11105,7 +11180,7 @@ 1 2 - 55607 + 55606 @@ -12111,11 +12186,11 @@ directive_nullables - 467929 + 467925 id - 467929 + 467925 setting @@ -12137,7 +12212,7 @@ 1 2 - 467929 + 467925 @@ -12153,7 +12228,7 @@ 1 2 - 467929 + 467925 @@ -12743,7 +12818,7 @@ pragma_warning_error_codes - 57637 + 57636 id @@ -12769,7 +12844,7 @@ 1 2 - 57610 + 57609 2 @@ -12790,7 +12865,7 @@ 1 2 - 57610 + 57609 2 @@ -12914,15 +12989,15 @@ preprocessor_directive_location - 1075331 + 1075323 id - 1075331 + 1075323 loc - 1075331 + 1075323 @@ -12936,7 +13011,7 @@ 1 2 - 1075331 + 1075323 @@ -12952,7 +13027,7 @@ 1 2 - 1075331 + 1075323 @@ -12962,11 +13037,11 @@ preprocessor_directive_compilation - 1075331 + 1075323 id - 1075331 + 1075323 compilation @@ -12984,7 +13059,7 @@ 1 2 - 1075331 + 1075323 @@ -13070,11 +13145,11 @@ preprocessor_directive_active - 1075331 + 1075323 id - 1075331 + 1075323 active @@ -13092,7 +13167,7 @@ 1 2 - 1075331 + 1075323 @@ -13123,11 +13198,11 @@ types - 9818809 + 9818978 id - 9818809 + 9818978 kind @@ -13135,7 +13210,7 @@ name - 2815649 + 2815698 @@ -13149,7 +13224,7 @@ 1 2 - 9818809 + 9818978 @@ -13165,7 +13240,7 @@ 1 2 - 9818809 + 9818978 @@ -13268,17 +13343,17 @@ 1 2 - 2509678 + 2509722 2 4 - 213897 + 213901 4 26166 - 92073 + 92074 @@ -13294,12 +13369,12 @@ 1 2 - 2793613 + 2793662 2 7 - 22035 + 22036 @@ -13309,15 +13384,15 @@ typerefs - 4008630 + 4008699 id - 4008630 + 4008699 name - 2703433 + 2703480 @@ -13331,7 +13406,7 @@ 1 2 - 4008630 + 4008699 @@ -13347,12 +13422,12 @@ 1 2 - 2495770 + 2495813 2 17 - 202807 + 202811 17 @@ -13367,15 +13442,15 @@ typeref_type - 3978097 + 3978165 id - 3978097 + 3978165 typeId - 3978097 + 3978165 @@ -13389,7 +13464,7 @@ 1 2 - 3978097 + 3978165 @@ -13405,7 +13480,7 @@ 1 2 - 3978097 + 3978165 @@ -13415,11 +13490,11 @@ array_element_type - 95570 + 95572 array - 95570 + 95572 dimension @@ -13431,7 +13506,7 @@ element - 95262 + 95263 @@ -13445,7 +13520,7 @@ 1 2 - 95570 + 95572 @@ -13461,7 +13536,7 @@ 1 2 - 95570 + 95572 @@ -13477,7 +13552,7 @@ 1 2 - 95570 + 95572 @@ -13639,7 +13714,7 @@ 1 2 - 94994 + 94996 2 @@ -13660,7 +13735,7 @@ 1 2 - 95262 + 95263 @@ -13676,7 +13751,7 @@ 1 2 - 94994 + 94996 2 @@ -13787,11 +13862,11 @@ enum_underlying_type - 163756 + 163759 enum_id - 163756 + 163759 underlying_type_id @@ -13809,7 +13884,7 @@ 1 2 - 163756 + 163759 @@ -13870,15 +13945,15 @@ delegate_return_type - 834337 + 834351 delegate_id - 834337 + 834351 return_type_id - 303790 + 303795 @@ -13892,7 +13967,7 @@ 1 2 - 834337 + 834351 @@ -13908,12 +13983,12 @@ 1 2 - 269759 + 269763 2 4 - 24463 + 24464 4 @@ -13996,15 +14071,15 @@ extend - 3329675 + 3329732 sub - 3329078 + 3329136 super - 487957 + 487965 @@ -14018,7 +14093,7 @@ 1 2 - 3328482 + 3328539 2 @@ -14039,22 +14114,22 @@ 1 2 - 330578 + 330584 2 3 - 75736 + 75737 3 5 - 43783 + 43784 5 97 - 36602 + 36603 97 @@ -14080,15 +14155,15 @@ implement - 11230275 + 11230469 sub - 3882135 + 3882202 super - 2387792 + 2387833 @@ -14102,32 +14177,32 @@ 1 2 - 1315813 + 1315836 2 3 - 1049078 + 1049097 3 4 - 724754 + 724767 4 6 - 297638 + 297643 6 9 - 320620 + 320626 9 31 - 174229 + 174232 @@ -14143,27 +14218,27 @@ 1 2 - 1138518 + 1138538 2 3 - 715557 + 715570 3 5 - 204988 + 204992 5 6 - 182006 + 182009 6 109829 - 146720 + 146722 @@ -14173,11 +14248,11 @@ type_location - 5294918 + 5295009 id - 5063017 + 5063104 loc @@ -14195,12 +14270,12 @@ 1 2 - 4974730 + 4974816 2 551 - 88287 + 88288 @@ -14216,7 +14291,7 @@ 1 2 - 2324 + 2325 2 @@ -14329,11 +14404,11 @@ tuple_element - 115837 + 115839 tuple - 47178 + 47179 index @@ -14341,7 +14416,7 @@ field - 115837 + 115839 @@ -14649,7 +14724,7 @@ 1 2 - 115837 + 115839 @@ -14665,7 +14740,7 @@ 1 2 - 115837 + 115839 @@ -14675,11 +14750,11 @@ attributes - 14223261 + 14223506 id - 14223261 + 14223506 kind @@ -14691,7 +14766,7 @@ target - 12263944 + 12264155 @@ -14705,7 +14780,7 @@ 1 2 - 14223261 + 14223506 @@ -14721,7 +14796,7 @@ 1 2 - 14223261 + 14223506 @@ -14737,7 +14812,7 @@ 1 2 - 14223261 + 14223506 @@ -15004,17 +15079,17 @@ 1 2 - 11192109 + 11192302 2 4 - 963404 + 963421 4 4012 - 108430 + 108432 @@ -15030,12 +15105,12 @@ 1 2 - 12146728 + 12146937 2 3 - 117215 + 117217 @@ -15051,12 +15126,12 @@ 1 2 - 11399937 + 11400133 2 29 - 864006 + 864021 @@ -15066,11 +15141,11 @@ attribute_location - 14224002 + 14224247 id - 14223261 + 14223506 loc @@ -15088,7 +15163,7 @@ 1 2 - 14222541 + 14222786 2 @@ -15179,19 +15254,19 @@ type_mention - 3321290 + 3322420 id - 3321290 + 3322420 type_id - 93833 + 93831 parent - 2593907 + 2594238 @@ -15205,7 +15280,7 @@ 1 2 - 3321290 + 3322420 @@ -15221,7 +15296,7 @@ 1 2 - 3321290 + 3322420 @@ -15242,52 +15317,52 @@ 2 3 - 18104 + 18106 3 4 - 10214 + 10207 4 5 - 7731 + 7735 5 6 - 4996 + 4991 6 7 - 6410 + 6347 7 10 - 7565 + 7628 10 16 - 7147 + 7154 16 36 - 7084 + 7080 36 - 1554 + 1547 7038 - 1562 - 103797 - 238 + 1553 + 103831 + 240 @@ -15303,7 +15378,7 @@ 1 2 - 29401 + 29400 2 @@ -15313,12 +15388,12 @@ 3 4 - 7880 + 7878 4 5 - 6972 + 6975 5 @@ -15328,17 +15403,17 @@ 6 8 - 7353 + 7304 8 13 - 7518 + 7530 13 30 - 7045 + 7082 30 @@ -15347,7 +15422,7 @@ 949 - 77995 + 78000 275 @@ -15364,17 +15439,17 @@ 1 2 - 2213046 + 2213261 2 3 - 271676 + 271774 3 851 - 109183 + 109202 @@ -15390,12 +15465,12 @@ 1 2 - 2538060 + 2538267 2 40 - 55846 + 55971 @@ -15405,15 +15480,15 @@ type_mention_location - 3321290 + 3322420 id - 3321290 + 3322420 loc - 2857143 + 2857079 @@ -15427,7 +15502,7 @@ 1 2 - 3321290 + 3322420 @@ -15443,12 +15518,12 @@ 1 2 - 2673133 + 2673027 2 213 - 184009 + 184052 @@ -15458,11 +15533,11 @@ type_annotation - 924250 + 924266 id - 924250 + 924266 annotation @@ -15480,7 +15555,7 @@ 1 2 - 924250 + 924266 @@ -15574,7 +15649,7 @@ nullability_parent - 83203 + 83204 nullability @@ -15855,7 +15930,7 @@ 7 14 - 1920 + 1921 14 @@ -15870,11 +15945,11 @@ type_nullability - 40400690 + 40401386 id - 40392995 + 40393691 nullability @@ -15892,7 +15967,7 @@ 1 2 - 40385793 + 40386490 2 @@ -15968,11 +16043,11 @@ expr_flowstate - 6546823 + 6545248 id - 6546823 + 6545248 state @@ -15990,7 +16065,7 @@ 1 2 - 6546823 + 6545248 @@ -16004,13 +16079,13 @@ 12 - 238162 - 238163 + 238130 + 238131 2 - 2567260 - 2567261 + 2566670 + 2566671 2 @@ -16021,11 +16096,11 @@ type_parameters - 897766 + 897781 id - 897766 + 897781 index @@ -16033,7 +16108,7 @@ generic_id - 486432 + 486441 variance @@ -16051,7 +16126,7 @@ 1 2 - 897766 + 897781 @@ -16067,7 +16142,7 @@ 1 2 - 897766 + 897781 @@ -16083,7 +16158,7 @@ 1 2 - 897766 + 897781 @@ -16297,17 +16372,17 @@ 1 2 - 356465 + 356471 2 3 - 75219 + 75220 3 9 - 38239 + 38240 9 @@ -16328,17 +16403,17 @@ 1 2 - 356465 + 356471 2 3 - 75219 + 75220 3 9 - 38239 + 38240 9 @@ -16359,7 +16434,7 @@ 1 2 - 485232 + 485240 2 @@ -16452,11 +16527,11 @@ type_arguments - 6159213 + 6159319 id - 1600674 + 1600702 index @@ -16464,7 +16539,7 @@ constructed_id - 4581294 + 4581373 @@ -16478,12 +16553,12 @@ 1 2 - 1361387 + 1361410 2 3 - 218979 + 218983 3 @@ -16504,37 +16579,37 @@ 1 2 - 707019 + 707031 2 3 - 283071 + 283075 3 4 - 199371 + 199375 4 5 - 99480 + 99481 5 7 - 121824 + 121826 7 11 - 126474 + 126476 11 10327 - 63432 + 63433 @@ -16712,17 +16787,17 @@ 1 2 - 3249206 + 3249262 2 3 - 1220160 + 1220181 3 22 - 111928 + 111930 @@ -16738,17 +16813,17 @@ 1 2 - 3213261 + 3213317 2 3 - 1223987 + 1224008 3 22 - 144045 + 144048 @@ -16758,15 +16833,15 @@ constructed_generic - 4581294 + 4581373 constructed - 4581294 + 4581373 generic - 89830 + 89832 @@ -16780,7 +16855,7 @@ 1 2 - 4581294 + 4581373 @@ -16846,15 +16921,15 @@ type_parameter_constraints - 897766 + 897781 id - 897766 + 897781 param_id - 897766 + 897781 @@ -16868,7 +16943,7 @@ 1 2 - 897766 + 897781 @@ -16884,7 +16959,7 @@ 1 2 - 897766 + 897781 @@ -16930,11 +17005,11 @@ general_type_parameter_constraints - 345681 + 345670 id - 344379 + 344368 kind @@ -16952,7 +17027,7 @@ 1 2 - 343078 + 343067 2 @@ -17003,15 +17078,15 @@ specific_type_parameter_constraints - 250871 + 250875 id - 244698 + 244702 base_id - 45347 + 45348 @@ -17025,7 +17100,7 @@ 1 2 - 240110 + 240114 2 @@ -17076,11 +17151,11 @@ specific_type_parameter_nullability - 44236 + 44237 id - 43989 + 43990 base_id @@ -17102,7 +17177,7 @@ 1 2 - 43742 + 43743 2 @@ -17123,7 +17198,7 @@ 1 2 - 43989 + 43990 @@ -17468,11 +17543,11 @@ has_modifiers - 86999480 + 87000980 id - 57380757 + 57381746 mod_id @@ -17490,17 +17565,17 @@ 1 2 - 29261602 + 29262107 2 3 - 26624852 + 26625311 3 5 - 1494301 + 1494327 @@ -17601,11 +17676,11 @@ compiler_generated - 479150 + 479159 id - 479150 + 479159 @@ -17710,19 +17785,19 @@ nested_types - 1913887 + 1913920 id - 1913887 + 1913920 declaring_type_id - 774464 + 774477 unbound_id - 1613719 + 1613746 @@ -17736,7 +17811,7 @@ 1 2 - 1913887 + 1913920 @@ -17752,7 +17827,7 @@ 1 2 - 1913887 + 1913920 @@ -17768,27 +17843,27 @@ 1 2 - 455139 + 455147 2 3 - 135877 + 135879 3 4 - 62321 + 62322 4 6 - 58083 + 58084 6 22 - 58165 + 58166 22 @@ -17809,27 +17884,27 @@ 1 2 - 456662 + 456670 2 3 - 136247 + 136250 3 4 - 61951 + 61952 4 6 - 58042 + 58043 6 24 - 58289 + 58290 24 @@ -17850,12 +17925,12 @@ 1 2 - 1556417 + 1556444 2 691 - 57301 + 57302 @@ -17871,12 +17946,12 @@ 1 2 - 1565861 + 1565888 2 691 - 47857 + 47858 @@ -17886,27 +17961,27 @@ properties - 5910461 + 5910563 id - 5910461 + 5910563 name - 1742991 + 1743021 declaring_type_id - 1511276 + 1511302 type_id - 597519 + 597529 unbound_id - 5336459 + 5336551 @@ -17920,7 +17995,7 @@ 1 2 - 5910461 + 5910563 @@ -17936,7 +18011,7 @@ 1 2 - 5910461 + 5910563 @@ -17952,7 +18027,7 @@ 1 2 - 5910461 + 5910563 @@ -17968,7 +18043,7 @@ 1 2 - 5910461 + 5910563 @@ -17984,22 +18059,22 @@ 1 2 - 1266289 + 1266311 2 3 - 219638 + 219642 3 6 - 146638 + 146640 6 9450 - 110426 + 110428 @@ -18015,22 +18090,22 @@ 1 2 - 1267276 + 1267298 2 3 - 219165 + 219168 3 6 - 146905 + 146908 6 5564 - 109644 + 109646 @@ -18046,12 +18121,12 @@ 1 2 - 1585099 + 1585126 2 6 - 137852 + 137854 6 @@ -18072,22 +18147,22 @@ 1 2 - 1273223 + 1273245 2 3 - 224370 + 224374 3 6 - 144621 + 144624 6 8011 - 100776 + 100778 @@ -18103,37 +18178,37 @@ 1 2 - 549785 + 549794 2 3 - 348705 + 348711 3 4 - 196244 + 196247 4 5 - 130466 + 130468 5 7 - 125363 + 125365 7 14 - 113965 + 113966 14 3362 - 46746 + 46747 @@ -18149,37 +18224,37 @@ 1 2 - 630048 + 630059 2 3 - 270293 + 270298 3 4 - 196656 + 196659 4 5 - 132626 + 132628 5 7 - 125198 + 125201 7 15 - 117359 + 117361 15 3362 - 39092 + 39093 @@ -18195,32 +18270,32 @@ 1 2 - 636488 + 636499 2 3 - 426026 + 426033 3 4 - 180895 + 180898 4 5 - 100282 + 100284 5 9 - 124252 + 124254 9 56 - 43330 + 43331 @@ -18236,37 +18311,37 @@ 1 2 - 549785 + 549794 2 3 - 348705 + 348711 3 4 - 196244 + 196247 4 5 - 130466 + 130468 5 7 - 125363 + 125365 7 14 - 113965 + 113966 14 3362 - 46746 + 46747 @@ -18282,27 +18357,27 @@ 1 2 - 329611 + 329617 2 3 - 122709 + 122711 3 4 - 38804 + 38805 4 7 - 51540 + 51541 7 36 - 44956 + 44957 36 @@ -18323,17 +18398,17 @@ 1 2 - 477422 + 477430 2 3 - 66539 + 66540 3 11 - 44976 + 44977 11 @@ -18354,12 +18429,12 @@ 1 2 - 345660 + 345666 2 3 - 117894 + 117896 3 @@ -18369,12 +18444,12 @@ 4 7 - 46890 + 46891 7 66 - 44832 + 44833 66 @@ -18395,17 +18470,17 @@ 1 2 - 331340 + 331345 2 3 - 125075 + 125077 3 4 - 38804 + 38805 4 @@ -18415,12 +18490,12 @@ 7 45 - 44976 + 44977 45 72507 - 6830 + 6831 @@ -18436,12 +18511,12 @@ 1 2 - 5254406 + 5254497 2 1890 - 82053 + 82054 @@ -18457,7 +18532,7 @@ 1 2 - 5336459 + 5336551 @@ -18473,12 +18548,12 @@ 1 2 - 5254406 + 5254497 2 1890 - 82053 + 82054 @@ -18494,7 +18569,7 @@ 1 2 - 5319300 + 5319391 2 @@ -18509,11 +18584,11 @@ property_location - 6046297 + 6046401 id - 5910461 + 5910563 loc @@ -18531,12 +18606,12 @@ 1 2 - 5818182 + 5818282 2 34 - 92278 + 92280 @@ -18622,11 +18697,11 @@ indexers - 103348 + 103350 id - 103348 + 103350 name @@ -18634,7 +18709,7 @@ declaring_type_id - 92628 + 92630 type_id @@ -18656,7 +18731,7 @@ 1 2 - 103348 + 103350 @@ -18672,7 +18747,7 @@ 1 2 - 103348 + 103350 @@ -18688,7 +18763,7 @@ 1 2 - 103348 + 103350 @@ -18704,7 +18779,7 @@ 1 2 - 103348 + 103350 @@ -18879,7 +18954,7 @@ 1 2 - 83575 + 83577 2 @@ -18905,7 +18980,7 @@ 1 2 - 92566 + 92568 2 @@ -18926,7 +19001,7 @@ 1 2 - 87649 + 87651 2 @@ -18947,7 +19022,7 @@ 1 2 - 83575 + 83577 2 @@ -18978,7 +19053,7 @@ 2 3 - 6295 + 6296 3 @@ -19009,7 +19084,7 @@ 1 2 - 21747 + 21748 2 @@ -19160,7 +19235,7 @@ 1 2 - 29895 + 29896 2 @@ -19175,11 +19250,11 @@ indexer_location - 104747 + 104749 id - 103348 + 103350 loc @@ -19197,7 +19272,7 @@ 1 2 - 101949 + 101950 2 @@ -19268,11 +19343,11 @@ accessors - 6901930 + 6902049 id - 6901930 + 6902049 kind @@ -19280,15 +19355,15 @@ name - 2155562 + 2155599 declaring_member_id - 6013027 + 6013131 unbound_id - 6177257 + 6177364 @@ -19302,7 +19377,7 @@ 1 2 - 6901930 + 6902049 @@ -19318,7 +19393,7 @@ 1 2 - 6901930 + 6902049 @@ -19334,7 +19409,7 @@ 1 2 - 6901930 + 6902049 @@ -19350,7 +19425,7 @@ 1 2 - 6901930 + 6902049 @@ -19450,22 +19525,22 @@ 1 2 - 1548043 + 1548070 2 3 - 284449 + 284454 3 6 - 187253 + 187256 6 3848 - 135815 + 135818 @@ -19481,7 +19556,7 @@ 1 2 - 2155397 + 2155434 2 @@ -19502,22 +19577,22 @@ 1 2 - 1548043 + 1548070 2 3 - 284449 + 284454 3 6 - 187253 + 187256 6 3848 - 135815 + 135818 @@ -19533,22 +19608,22 @@ 1 2 - 1560512 + 1560539 2 3 - 291383 + 291388 3 6 - 181080 + 181083 6 3822 - 122585 + 122588 @@ -19564,12 +19639,12 @@ 1 2 - 5124125 + 5124213 2 3 - 888902 + 888917 @@ -19585,12 +19660,12 @@ 1 2 - 5124125 + 5124213 2 3 - 888902 + 888917 @@ -19606,12 +19681,12 @@ 1 2 - 5125051 + 5125139 2 3 - 887976 + 887991 @@ -19627,12 +19702,12 @@ 1 2 - 5124125 + 5124213 2 3 - 888902 + 888917 @@ -19648,12 +19723,12 @@ 1 2 - 6082118 + 6082223 2 1890 - 95138 + 95140 @@ -19669,7 +19744,7 @@ 1 2 - 6177257 + 6177364 @@ -19685,7 +19760,7 @@ 1 2 - 6177257 + 6177364 @@ -19701,12 +19776,12 @@ 1 2 - 6082118 + 6082223 2 1890 - 95138 + 95140 @@ -19727,11 +19802,11 @@ accessor_location - 7067127 + 7067248 id - 6901930 + 6902049 loc @@ -19749,12 +19824,12 @@ 1 2 - 6784549 + 6784666 2 34 - 117380 + 117382 @@ -19840,11 +19915,11 @@ events - 60799 + 60800 id - 60799 + 60800 name @@ -19852,7 +19927,7 @@ declaring_type_id - 25224 + 25225 type_id @@ -19860,7 +19935,7 @@ unbound_id - 54029 + 54030 @@ -19874,7 +19949,7 @@ 1 2 - 60799 + 60800 @@ -19890,7 +19965,7 @@ 1 2 - 60799 + 60800 @@ -19906,7 +19981,7 @@ 1 2 - 60799 + 60800 @@ -19922,7 +19997,7 @@ 1 2 - 60799 + 60800 @@ -20041,7 +20116,7 @@ 2 3 - 5472 + 5473 3 @@ -20216,7 +20291,7 @@ 1 2 - 7797 + 7798 2 @@ -20350,7 +20425,7 @@ 1 2 - 52219 + 52220 2 @@ -20371,7 +20446,7 @@ 1 2 - 54029 + 54030 @@ -20387,7 +20462,7 @@ 1 2 - 52219 + 52220 2 @@ -20408,7 +20483,7 @@ 1 2 - 53700 + 53701 2 @@ -20423,7 +20498,7 @@ event_location - 73181 + 73180 id @@ -20496,11 +20571,11 @@ event_accessors - 121598 + 121600 id - 121598 + 121600 kind @@ -20512,11 +20587,11 @@ declaring_event_id - 60799 + 60800 unbound_id - 108059 + 108061 @@ -20530,7 +20605,7 @@ 1 2 - 121598 + 121600 @@ -20546,7 +20621,7 @@ 1 2 - 121598 + 121600 @@ -20562,7 +20637,7 @@ 1 2 - 121598 + 121600 @@ -20578,7 +20653,7 @@ 1 2 - 121598 + 121600 @@ -20746,7 +20821,7 @@ 1 2 - 31232 + 31233 2 @@ -20782,7 +20857,7 @@ 2 3 - 60799 + 60800 @@ -20798,7 +20873,7 @@ 2 3 - 60799 + 60800 @@ -20814,7 +20889,7 @@ 2 3 - 60799 + 60800 @@ -20830,7 +20905,7 @@ 2 3 - 60799 + 60800 @@ -20846,7 +20921,7 @@ 1 2 - 104438 + 104440 2 @@ -20867,7 +20942,7 @@ 1 2 - 108059 + 108061 @@ -20883,7 +20958,7 @@ 1 2 - 108059 + 108061 @@ -20899,7 +20974,7 @@ 1 2 - 104438 + 104440 2 @@ -20914,7 +20989,7 @@ event_accessor_location - 146362 + 146361 id @@ -20987,11 +21062,11 @@ operators - 146896 + 146898 id - 146896 + 146898 name @@ -21007,11 +21082,11 @@ type_id - 22451 + 22452 unbound_id - 119041 + 119043 @@ -21025,7 +21100,7 @@ 1 2 - 146896 + 146898 @@ -21041,7 +21116,7 @@ 1 2 - 146896 + 146898 @@ -21057,7 +21132,7 @@ 1 2 - 146896 + 146898 @@ -21073,7 +21148,7 @@ 1 2 - 146896 + 146898 @@ -21089,7 +21164,7 @@ 1 2 - 146896 + 146898 @@ -21828,7 +21903,7 @@ 1 2 - 22451 + 22452 2 @@ -21956,7 +22031,7 @@ 1 2 - 16988 + 16989 2 @@ -21987,12 +22062,12 @@ 1 2 - 16988 + 16989 2 4 - 1920 + 1921 4 @@ -22018,7 +22093,7 @@ 1 2 - 19089 + 19090 2 @@ -22090,7 +22165,7 @@ 1 2 - 116100 + 116102 2 @@ -22111,7 +22186,7 @@ 1 2 - 119041 + 119043 @@ -22127,7 +22202,7 @@ 1 2 - 119041 + 119043 @@ -22143,7 +22218,7 @@ 1 2 - 116100 + 116102 2 @@ -22164,7 +22239,7 @@ 1 2 - 116280 + 116282 2 @@ -22179,15 +22254,15 @@ operator_location - 238354 + 238350 id - 94950 + 94949 loc - 10923 + 10928 @@ -22206,7 +22281,7 @@ 2 3 - 76788 + 76786 3 @@ -22237,7 +22312,7 @@ 2 5 - 865 + 870 5 @@ -22257,15 +22332,15 @@ constant_value - 3005248 + 3005300 id - 3003952 + 3004004 value - 955297 + 955314 @@ -22279,7 +22354,7 @@ 1 2 - 3003067 + 3003119 2 @@ -22300,17 +22375,17 @@ 1 2 - 763559 + 763572 2 3 - 102052 + 102053 3 9 - 73061 + 73063 9 @@ -22325,27 +22400,27 @@ methods - 17405743 + 17406043 id - 17405743 + 17406043 name - 4654192 + 4654272 declaring_type_id - 3635132 + 3635194 type_id - 1167652 + 1167672 unbound_id - 14310664 + 14310911 @@ -22359,7 +22434,7 @@ 1 2 - 17405743 + 17406043 @@ -22375,7 +22450,7 @@ 1 2 - 17405743 + 17406043 @@ -22391,7 +22466,7 @@ 1 2 - 17405743 + 17406043 @@ -22407,7 +22482,7 @@ 1 2 - 17405743 + 17406043 @@ -22423,22 +22498,22 @@ 1 2 - 3332494 + 3332551 2 3 - 557171 + 557181 3 5 - 372860 + 372866 5 30 - 349548 + 349554 30 @@ -22459,22 +22534,22 @@ 1 2 - 3459380 + 3459439 2 3 - 498224 + 498232 3 6 - 416438 + 416445 6 15129 - 280149 + 280154 @@ -22490,17 +22565,17 @@ 1 2 - 4249666 + 4249739 2 7 - 349404 + 349410 7 3080 - 55120 + 55121 @@ -22516,22 +22591,22 @@ 1 2 - 3392573 + 3392631 2 3 - 574042 + 574052 3 5 - 366770 + 366776 5 14243 - 320805 + 320811 @@ -22547,42 +22622,42 @@ 1 2 - 1267606 + 1267628 2 3 - 821992 + 822006 3 4 - 350083 + 350089 4 5 - 236921 + 236925 5 6 - 207210 + 207214 6 9 - 321093 + 321099 9 17 - 281054 + 281059 17 1325 - 149168 + 149171 @@ -22598,37 +22673,37 @@ 1 2 - 1315648 + 1315671 2 3 - 850756 + 850771 3 4 - 360659 + 360665 4 5 - 283215 + 283219 5 6 - 241180 + 241184 6 10 - 303851 + 303857 10 89 - 272680 + 272685 89 @@ -22649,32 +22724,32 @@ 1 2 - 1738053 + 1738083 2 3 - 858636 + 858651 3 4 - 372881 + 372887 4 5 - 307555 + 307560 5 10 - 283667 + 283672 10 272 - 74337 + 74338 @@ -22690,42 +22765,42 @@ 1 2 - 1267606 + 1267628 2 3 - 821992 + 822006 3 4 - 350083 + 350089 4 5 - 236921 + 236925 5 6 - 207210 + 207214 6 9 - 321093 + 321099 9 17 - 281054 + 281059 17 1325 - 149168 + 149171 @@ -22741,32 +22816,32 @@ 1 2 - 670786 + 670798 2 3 - 190216 + 190219 3 4 - 84048 + 84050 4 7 - 103121 + 103123 7 25 - 87999 + 88000 25 239280 - 31479 + 31480 @@ -22782,22 +22857,22 @@ 1 2 - 817877 + 817891 2 3 - 156699 + 156702 3 5 - 96826 + 96827 5 33 - 87649 + 87651 33 @@ -22818,27 +22893,27 @@ 1 2 - 762386 + 762399 2 3 - 184413 + 184417 3 4 - 74275 + 74277 4 9 - 91682 + 91683 9 76756 - 54894 + 54895 @@ -22854,27 +22929,27 @@ 1 2 - 673872 + 673884 2 3 - 191738 + 191741 3 4 - 84522 + 84523 4 7 - 102895 + 102897 7 27 - 87958 + 87959 27 @@ -22895,12 +22970,12 @@ 1 2 - 13875626 + 13875865 2 4984 - 435038 + 435045 @@ -22916,7 +22991,7 @@ 1 2 - 14310664 + 14310911 @@ -22932,12 +23007,12 @@ 1 2 - 13875626 + 13875865 2 4984 - 435038 + 435045 @@ -22953,12 +23028,12 @@ 1 2 - 14180568 + 14180813 2 1923 - 130095 + 130098 @@ -22968,15 +23043,15 @@ method_location - 17716426 + 17716731 id - 17405743 + 17406043 loc - 9011 + 9012 @@ -22990,12 +23065,12 @@ 1 2 - 17203367 + 17203664 2 34 - 202375 + 202379 @@ -23086,23 +23161,23 @@ constructors - 5023369 + 5023456 id - 5023369 + 5023456 name - 2237718 + 2237756 declaring_type_id - 3721855 + 3721919 unbound_id - 4648822 + 4648902 @@ -23116,7 +23191,7 @@ 1 2 - 5023369 + 5023456 @@ -23132,7 +23207,7 @@ 1 2 - 5023369 + 5023456 @@ -23148,7 +23223,7 @@ 1 2 - 5023369 + 5023456 @@ -23164,22 +23239,22 @@ 1 2 - 1580572 + 1580599 2 3 - 438762 + 438769 3 7 - 180010 + 180013 7 29898 - 38372 + 38373 @@ -23195,17 +23270,17 @@ 1 2 - 2032626 + 2032661 2 5 - 178159 + 178162 5 14950 - 26932 + 26933 @@ -23221,17 +23296,17 @@ 1 2 - 1604933 + 1604961 2 3 - 440243 + 440251 3 8 - 171142 + 171145 8 @@ -23252,17 +23327,17 @@ 1 2 - 2716107 + 2716154 2 3 - 861455 + 861470 3 55 - 144292 + 144295 @@ -23278,7 +23353,7 @@ 1 2 - 3721855 + 3721919 @@ -23294,17 +23369,17 @@ 1 2 - 2716107 + 2716154 2 3 - 861455 + 861470 3 55 - 144292 + 144295 @@ -23320,12 +23395,12 @@ 1 2 - 4603166 + 4603245 2 1890 - 45655 + 45656 @@ -23341,7 +23416,7 @@ 1 2 - 4648822 + 4648902 @@ -23357,12 +23432,12 @@ 1 2 - 4603166 + 4603245 2 1890 - 45655 + 45656 @@ -23372,11 +23447,11 @@ constructor_location - 5171571 + 5171660 id - 5023369 + 5023456 loc @@ -23394,12 +23469,12 @@ 1 2 - 4954587 + 4954672 2 306 - 68782 + 68783 @@ -23726,7 +23801,7 @@ destructor_location - 4649 + 4650 id @@ -23804,15 +23879,15 @@ overrides - 3995009 + 3995078 id - 3990298 + 3990366 base_id - 1238286 + 1238308 @@ -23826,7 +23901,7 @@ 1 2 - 3985586 + 3985655 2 @@ -23847,22 +23922,22 @@ 1 2 - 835942 + 835956 2 3 - 192252 + 192256 3 5 - 107957 + 107958 5 28 - 93451 + 93453 28 @@ -23877,15 +23952,15 @@ explicitly_implements - 1640816 + 1640844 id - 1640425 + 1640453 interface_id - 107525 + 107526 @@ -23899,7 +23974,7 @@ 1 2 - 1640034 + 1640062 2 @@ -23920,7 +23995,7 @@ 1 2 - 54894 + 54895 2 @@ -23930,7 +24005,7 @@ 3 4 - 6830 + 6831 4 @@ -24314,11 +24389,11 @@ fields - 12987217 + 12987441 id - 12987217 + 12987441 kind @@ -24326,19 +24401,19 @@ name - 5002321 + 5002407 declaring_type_id - 2950909 + 2950960 type_id - 2616421 + 2616467 unbound_id - 12547385 + 12547601 @@ -24352,7 +24427,7 @@ 1 2 - 12987217 + 12987441 @@ -24368,7 +24443,7 @@ 1 2 - 12987217 + 12987441 @@ -24384,7 +24459,7 @@ 1 2 - 12987217 + 12987441 @@ -24400,7 +24475,7 @@ 1 2 - 12987217 + 12987441 @@ -24416,7 +24491,7 @@ 1 2 - 12987217 + 12987441 @@ -24537,22 +24612,22 @@ 1 2 - 3909664 + 3909731 2 3 - 577849 + 577859 3 8 - 381666 + 381673 8 15557 - 133140 + 133143 @@ -24568,12 +24643,12 @@ 1 2 - 4889508 + 4889592 2 3 - 112812 + 112814 @@ -24589,22 +24664,22 @@ 1 2 - 3910713 + 3910781 2 3 - 578384 + 578394 3 8 - 381543 + 381549 8 15557 - 131680 + 131682 @@ -24620,17 +24695,17 @@ 1 2 - 4380503 + 4380578 2 3 - 372613 + 372619 3 15557 - 249204 + 249208 @@ -24646,22 +24721,22 @@ 1 2 - 3938119 + 3938187 2 3 - 578219 + 578229 3 9 - 380699 + 380706 9 15557 - 105282 + 105284 @@ -24677,42 +24752,42 @@ 1 2 - 806643 + 806657 2 3 - 748292 + 748305 3 4 - 411623 + 411630 4 5 - 257948 + 257953 5 6 - 174290 + 174293 6 8 - 222930 + 222934 8 14 - 227107 + 227110 14 6823 - 102072 + 102074 @@ -24728,12 +24803,12 @@ 1 2 - 2817871 + 2817920 2 3 - 133038 + 133040 @@ -24749,42 +24824,42 @@ 1 2 - 806828 + 806842 2 3 - 748272 + 748285 3 4 - 411603 + 411610 4 5 - 257990 + 257994 5 6 - 174270 + 174273 6 8 - 223053 + 223057 8 14 - 226963 + 226966 14 6823 - 101928 + 101930 @@ -24800,32 +24875,32 @@ 1 2 - 1103849 + 1103868 2 3 - 812404 + 812418 3 4 - 381234 + 381241 4 5 - 207972 + 207975 5 7 - 225872 + 225876 7 612 - 219576 + 219580 @@ -24841,42 +24916,42 @@ 1 2 - 806643 + 806657 2 3 - 748292 + 748305 3 4 - 411623 + 411630 4 5 - 257948 + 257953 5 6 - 174290 + 174293 6 8 - 222930 + 222934 8 14 - 227107 + 227110 14 6823 - 102072 + 102074 @@ -24892,27 +24967,27 @@ 1 2 - 1788812 + 1788843 2 3 - 320661 + 320667 3 5 - 237517 + 237522 5 15 - 200565 + 200568 15 68300 - 68864 + 68865 @@ -24928,12 +25003,12 @@ 1 2 - 2540561 + 2540605 2 3 - 75860 + 75861 @@ -24949,22 +25024,22 @@ 1 2 - 1915616 + 1915649 2 3 - 308892 + 308898 3 5 - 202108 + 202111 5 37646 - 189804 + 189807 @@ -24980,22 +25055,22 @@ 1 2 - 1970531 + 1970564 2 3 - 313110 + 313115 3 6 - 205503 + 205506 6 23118 - 127277 + 127279 @@ -25011,27 +25086,27 @@ 1 2 - 1793729 + 1793760 2 3 - 322328 + 322333 3 5 - 235789 + 235793 5 15 - 197417 + 197420 15 67097 - 67156 + 67158 @@ -25047,12 +25122,12 @@ 1 2 - 12474961 + 12475176 2 1890 - 72424 + 72425 @@ -25068,7 +25143,7 @@ 1 2 - 12547385 + 12547601 @@ -25084,7 +25159,7 @@ 1 2 - 12547385 + 12547601 @@ -25100,12 +25175,12 @@ 1 2 - 12474961 + 12475176 2 1890 - 72424 + 72425 @@ -25121,7 +25196,7 @@ 1 2 - 12524835 + 12525051 2 @@ -25136,11 +25211,11 @@ field_location - 13100668 + 13100894 id - 12871956 + 12872178 loc @@ -25158,12 +25233,12 @@ 1 2 - 12723404 + 12723624 2 283 - 148551 + 148554 @@ -25249,11 +25324,11 @@ localvars - 618980 + 618977 id - 618980 + 618977 kind @@ -25269,11 +25344,11 @@ type_id - 31963 + 31962 parent_id - 618980 + 618977 @@ -25287,7 +25362,7 @@ 1 2 - 618980 + 618977 @@ -25303,7 +25378,7 @@ 1 2 - 618980 + 618977 @@ -25319,7 +25394,7 @@ 1 2 - 618980 + 618977 @@ -25335,7 +25410,7 @@ 1 2 - 618980 + 618977 @@ -25351,7 +25426,7 @@ 1 2 - 618980 + 618977 @@ -25508,7 +25583,7 @@ 1 2 - 112983 + 112982 2 @@ -25529,7 +25604,7 @@ 1 2 - 98443 + 98442 2 @@ -25550,7 +25625,7 @@ 1 2 - 97836 + 97835 2 @@ -25825,7 +25900,7 @@ 1 2 - 23340 + 23339 2 @@ -25892,7 +25967,7 @@ 1 2 - 618980 + 618977 @@ -25908,7 +25983,7 @@ 1 2 - 618980 + 618977 @@ -25924,7 +25999,7 @@ 1 2 - 618980 + 618977 @@ -25940,7 +26015,7 @@ 1 2 - 618980 + 618977 @@ -25956,7 +26031,7 @@ 1 2 - 618980 + 618977 @@ -25966,15 +26041,15 @@ localvar_location - 618980 + 618977 id - 618980 + 618977 loc - 618980 + 618977 @@ -25988,7 +26063,7 @@ 1 2 - 618980 + 618977 @@ -26004,7 +26079,7 @@ 1 2 - 618980 + 618977 @@ -26014,19 +26089,19 @@ params - 31463252 + 31463795 id - 31463252 + 31463795 name - 1755563 + 1755593 type_id - 2360118 + 2360159 index @@ -26038,11 +26113,11 @@ parent_id - 17473887 + 17474189 unbound_id - 25163121 + 25163555 @@ -26056,7 +26131,7 @@ 1 2 - 31463252 + 31463795 @@ -26072,7 +26147,7 @@ 1 2 - 31463252 + 31463795 @@ -26088,7 +26163,7 @@ 1 2 - 31463252 + 31463795 @@ -26104,7 +26179,7 @@ 1 2 - 31463252 + 31463795 @@ -26120,7 +26195,7 @@ 1 2 - 31463252 + 31463795 @@ -26136,7 +26211,7 @@ 1 2 - 31463252 + 31463795 @@ -26152,37 +26227,37 @@ 1 2 - 778558 + 778572 2 3 - 321772 + 321778 3 4 - 144354 + 144356 4 6 - 159209 + 159212 6 10 - 135095 + 135097 10 26 - 133264 + 133266 26 82408 - 83308 + 83309 @@ -26198,22 +26273,22 @@ 1 2 - 1424367 + 1424391 2 3 - 172665 + 172668 3 12 - 132523 + 132525 12 15932 - 26006 + 26007 @@ -26229,22 +26304,22 @@ 1 2 - 1213596 + 1213617 2 3 - 297576 + 297581 3 4 - 115940 + 115942 4 23 - 128449 + 128452 @@ -26260,17 +26335,17 @@ 1 2 - 1598123 + 1598150 2 3 - 132050 + 132052 3 7 - 25389 + 25390 @@ -26286,37 +26361,37 @@ 1 2 - 778558 + 778572 2 3 - 321772 + 321778 3 4 - 144354 + 144356 4 6 - 159209 + 159212 6 10 - 135095 + 135097 10 26 - 133264 + 133266 26 82408 - 83308 + 83309 @@ -26332,37 +26407,37 @@ 1 2 - 795491 + 795505 2 3 - 328089 + 328094 3 4 - 155505 + 155508 4 5 - 102854 + 102856 5 8 - 139189 + 139192 8 19 - 135630 + 135632 19 69269 - 98801 + 98802 @@ -26378,37 +26453,37 @@ 1 2 - 1148620 + 1148640 2 3 - 332903 + 332909 3 4 - 201141 + 201144 4 5 - 155999 + 156002 5 8 - 185031 + 185034 8 18 - 178529 + 178532 18 107768 - 157892 + 157895 @@ -26424,22 +26499,22 @@ 1 2 - 1573083 + 1573110 2 3 - 396130 + 396137 3 4 - 179517 + 179520 4 12 - 180895 + 180898 12 @@ -26460,22 +26535,22 @@ 1 2 - 1703529 + 1703558 2 3 - 413989 + 413997 3 5 - 179496 + 179499 5 70 - 63103 + 63104 @@ -26491,12 +26566,12 @@ 1 2 - 2211834 + 2211872 2 6 - 148284 + 148286 @@ -26512,37 +26587,37 @@ 1 2 - 1179750 + 1179771 2 3 - 314571 + 314576 3 4 - 201017 + 201021 4 5 - 156617 + 156619 5 8 - 183076 + 183079 8 19 - 178817 + 178820 19 87339 - 146267 + 146270 @@ -26558,37 +26633,37 @@ 1 2 - 1156747 + 1156767 2 3 - 333706 + 333711 3 4 - 213465 + 213469 4 5 - 154621 + 154623 5 8 - 193775 + 193778 8 19 - 180504 + 180507 19 100456 - 127297 + 127299 @@ -27201,27 +27276,27 @@ 1 2 - 9861646 + 9861816 2 3 - 4448647 + 4448724 3 4 - 1719824 + 1719854 4 8 - 1312151 + 1312173 8 70 - 131618 + 131620 @@ -27237,27 +27312,27 @@ 1 2 - 9861625 + 9861795 2 3 - 4448647 + 4448724 3 4 - 1719824 + 1719854 4 8 - 1312171 + 1312194 8 70 - 131618 + 131620 @@ -27273,22 +27348,22 @@ 1 2 - 10469864 + 10470044 2 3 - 4359784 + 4359859 3 4 - 1575840 + 1575867 4 43 - 1068398 + 1068417 @@ -27304,27 +27379,27 @@ 1 2 - 9861646 + 9861816 2 3 - 4448647 + 4448724 3 4 - 1719824 + 1719854 4 8 - 1312151 + 1312173 8 70 - 131618 + 131620 @@ -27340,12 +27415,12 @@ 1 2 - 16675165 + 16675453 2 5 - 798722 + 798735 @@ -27361,27 +27436,27 @@ 1 2 - 9861646 + 9861816 2 3 - 4448647 + 4448724 3 4 - 1719824 + 1719854 4 8 - 1312151 + 1312173 8 70 - 131618 + 131620 @@ -27397,12 +27472,12 @@ 1 2 - 24343803 + 24344223 2 21044 - 819317 + 819331 @@ -27418,7 +27493,7 @@ 1 2 - 25163059 + 25163493 2 @@ -27439,12 +27514,12 @@ 1 2 - 24923710 + 24924140 2 11733 - 239410 + 239415 @@ -27460,7 +27535,7 @@ 1 2 - 25163121 + 25163555 @@ -27476,7 +27551,7 @@ 1 2 - 25163100 + 25163534 2 @@ -27497,12 +27572,12 @@ 1 2 - 24343803 + 24344223 2 21044 - 819317 + 819331 @@ -27512,11 +27587,11 @@ param_location - 32043550 + 32044103 id - 31455722 + 31456264 loc @@ -27534,12 +27609,12 @@ 1 2 - 31081257 + 31081793 2 283 - 374465 + 374471 @@ -27625,11 +27700,11 @@ scoped_annotation - 382468 + 382475 id - 382468 + 382475 kind @@ -27647,7 +27722,7 @@ 1 2 - 382468 + 382475 @@ -27673,11 +27748,11 @@ statements - 3047866 + 3047725 id - 3047866 + 3047725 kind @@ -27695,7 +27770,7 @@ 1 2 - 3047866 + 3047725 @@ -27791,19 +27866,19 @@ stmt_parent - 2600530 + 2600410 stmt - 2600530 + 2600410 index - 6149 + 6148 parent - 1245075 + 1245017 @@ -27817,7 +27892,7 @@ 1 2 - 2600530 + 2600410 @@ -27833,7 +27908,7 @@ 1 2 - 2600530 + 2600410 @@ -27961,27 +28036,27 @@ 1 2 - 802507 + 802470 2 3 - 236422 + 236411 3 4 - 77805 + 77802 4 9 - 99413 + 99408 9 3407 - 28926 + 28925 @@ -27997,27 +28072,27 @@ 1 2 - 802507 + 802470 2 3 - 236422 + 236411 3 4 - 77805 + 77802 4 9 - 99413 + 99408 9 3407 - 28926 + 28925 @@ -28027,11 +28102,11 @@ stmt_parent_top_level - 447336 + 447315 stmt - 447336 + 447315 index @@ -28039,7 +28114,7 @@ parent - 422479 + 422460 @@ -28053,7 +28128,7 @@ 1 2 - 447336 + 447315 @@ -28069,7 +28144,7 @@ 1 2 - 447336 + 447315 @@ -28117,12 +28192,12 @@ 1 2 - 399538 + 399519 2 5 - 22941 + 22940 @@ -28138,7 +28213,7 @@ 1 2 - 422479 + 422460 @@ -28148,15 +28223,15 @@ stmt_location - 3047859 + 3047718 id - 3047859 + 3047718 loc - 2947337 + 2947201 @@ -28170,7 +28245,7 @@ 1 2 - 3047859 + 3047718 @@ -28186,12 +28261,12 @@ 1 2 - 2852235 + 2852104 2 5 - 95101 + 95097 @@ -28201,11 +28276,11 @@ catch_type - 30235 + 30233 catch_id - 30235 + 30233 type_id @@ -28227,7 +28302,7 @@ 1 2 - 30235 + 30233 @@ -28243,7 +28318,7 @@ 1 2 - 30235 + 30233 @@ -28372,11 +28447,11 @@ foreach_stmt_info - 32431 + 32428 id - 32431 + 32428 kind @@ -28394,7 +28469,7 @@ 1 2 - 32431 + 32428 @@ -28420,15 +28495,15 @@ foreach_stmt_desugar - 162122 + 162110 id - 32431 + 32428 symbol - 19968 + 19966 kind @@ -28451,7 +28526,7 @@ 5 6 - 32397 + 32394 @@ -28472,7 +28547,7 @@ 5 6 - 32397 + 32394 @@ -28534,7 +28609,7 @@ 1 2 - 19968 + 19966 @@ -28601,19 +28676,19 @@ expressions - 12065066 + 12065274 id - 12065066 + 12065274 kind - 176 + 282 type_id - 110007 + 95429 @@ -28627,7 +28702,7 @@ 1 2 - 12065066 + 12065274 @@ -28643,7 +28718,7 @@ 1 2 - 12065066 + 12065274 @@ -28657,69 +28732,64 @@ 12 - 5 - 84 - 14 + 1 + 37 + 25 - 95 - 270 - 14 + 47 + 133 + 23 - 341 - 797 - 14 + 134 + 544 + 23 - 819 - 1281 - 14 + 570 + 985 + 23 - 1537 - 2495 - 14 + 1041 + 1502 + 23 - 2609 - 4357 - 14 + 1512 + 1811 + 23 - 4453 - 6679 - 14 + 1901 + 3636 + 23 - 7465 - 13714 - 14 + 4438 + 6455 + 23 - 14409 - 23536 - 14 + 7058 + 14022 + 23 - 27017 - 46515 - 14 + 14452 + 28402 + 23 - 49854 - 183862 - 14 + 32648 + 169673 + 23 - 313497 - 578005 - 14 - - - 745202 - 753853 - 3 + 172052 + 1144418 + 23 @@ -28735,57 +28805,52 @@ 1 2 - 45 + 91 2 - 5 - 16 + 7 + 25 - 5 - 9 - 10 + 8 + 12 + 23 - 9 - 14 - 16 + 12 + 27 + 23 - 16 - 46 - 14 + 29 + 102 + 23 - 46 - 116 - 14 + 162 + 320 + 23 - 131 - 397 - 14 + 320 + 863 + 23 - 513 - 1251 - 14 + 915 + 4194 + 23 - 1355 - 8712 - 14 + 4905 + 13903 + 23 - 11608 - 19250 - 14 - - - 25103 - 25104 - 1 + 16571 + 16572 + 2 @@ -28801,57 +28866,57 @@ 1 2 - 25224 + 19361 2 3 - 10899 + 13919 3 4 - 7688 + 5455 4 5 - 6125 + 8090 5 7 - 8804 + 7637 7 11 - 10105 + 8729 11 17 - 8699 + 7698 17 - 28 - 8457 + 30 + 7273 - 28 - 50 - 8437 + 30 + 60 + 7182 - 50 - 121 - 8266 + 60 + 238 + 7161 - 121 - 1192575 - 7298 + 238 + 919701 + 2916 @@ -28867,42 +28932,42 @@ 1 2 - 43908 + 34716 2 3 - 14177 + 21172 3 4 - 15581 + 11492 4 5 - 9412 + 6989 5 6 - 7149 + 5465 6 8 - 9488 + 6872 8 13 - 9035 + 7208 13 - 54 - 1256 + 60 + 1512 @@ -28912,19 +28977,19 @@ expr_parent - 11682392 + 11682627 expr - 11682392 + 11682627 index - 40692 + 40690 parent - 7822739 + 7823161 @@ -28938,7 +29003,7 @@ 1 2 - 11682392 + 11682627 @@ -28954,7 +29019,7 @@ 1 2 - 11682392 + 11682627 @@ -28975,7 +29040,7 @@ 4 5 - 21178 + 21177 5 @@ -28990,7 +29055,7 @@ 10 11 - 5956 + 5955 11 @@ -28999,7 +29064,7 @@ 66 - 3205894 + 3205889 882 @@ -29021,7 +29086,7 @@ 4 5 - 21178 + 21177 5 @@ -29036,7 +29101,7 @@ 10 11 - 5956 + 5955 11 @@ -29045,7 +29110,7 @@ 66 - 3205894 + 3205889 882 @@ -29062,17 +29127,17 @@ 1 2 - 5080347 + 5080905 2 3 - 2351800 + 2351683 3 22534 - 390591 + 390573 @@ -29088,17 +29153,17 @@ 1 2 - 5080347 + 5080905 2 3 - 2351800 + 2351683 3 22534 - 390591 + 390573 @@ -29108,11 +29173,11 @@ expr_parent_top_level - 6487240 + 6487352 expr - 6487240 + 6487352 index @@ -29120,7 +29185,7 @@ parent - 4784143 + 4784226 @@ -29134,7 +29199,7 @@ 1 2 - 6487240 + 6487352 @@ -29150,7 +29215,7 @@ 1 2 - 6487240 + 6487352 @@ -29328,17 +29393,17 @@ 1 2 - 4124138 + 4124209 2 3 - 343479 + 343485 3 15 - 316526 + 316531 @@ -29354,17 +29419,17 @@ 1 2 - 4127780 + 4127851 2 3 - 340845 + 340851 3 15 - 315517 + 315523 @@ -29407,11 +29472,11 @@ implicitly_typed_object_creation - 14529 + 14530 id - 14529 + 14530 @@ -29471,26 +29536,26 @@ expr_compiler_generated - 12064345 + 12064553 id - 12064345 + 12064553 expr_value - 8310207 + 8310351 id - 8310207 + 8310351 value - 718788 + 718800 @@ -29504,7 +29569,7 @@ 1 2 - 8310207 + 8310351 @@ -29520,17 +29585,17 @@ 1 2 - 505569 + 505578 2 3 - 110652 + 110654 3 4 - 55367 + 55368 4 @@ -29545,15 +29610,15 @@ expr_call - 1966214 + 1966123 caller_id - 1966214 + 1966123 target_id - 257183 + 257171 @@ -29567,7 +29632,7 @@ 1 2 - 1966214 + 1966123 @@ -29583,22 +29648,22 @@ 1 2 - 137524 + 137518 2 3 - 51110 + 51107 3 4 - 19301 + 19300 4 6 - 19324 + 19323 6 @@ -29618,15 +29683,15 @@ expr_access - 4483718 + 4484304 accesser_id - 4483718 + 4484304 target_id - 1084843 + 1084863 @@ -29640,7 +29705,7 @@ 1 2 - 4483718 + 4484304 @@ -29656,32 +29721,32 @@ 1 2 - 362211 + 361965 2 3 - 236534 + 236660 3 4 - 166823 + 166914 4 5 - 102369 + 102379 5 7 - 99561 + 99569 7 15 - 84344 + 84375 15 @@ -29696,15 +29761,15 @@ expr_location - 12065066 + 12065274 id - 12065066 + 12065274 loc - 10110422 + 7880074 @@ -29718,7 +29783,7 @@ 1 2 - 12065066 + 12065274 @@ -29734,17 +29799,17 @@ 1 2 - 8365713 + 6971739 2 3 - 1650623 + 852056 3 - 9205 - 94085 + 163205 + 56279 @@ -29853,11 +29918,11 @@ expr_argument - 1774404 + 1774394 id - 1774404 + 1774394 mode @@ -29875,7 +29940,7 @@ 1 2 - 1774404 + 1774394 @@ -29911,11 +29976,11 @@ expr_argument_name - 840180 + 840195 id - 840180 + 840195 name @@ -29933,7 +29998,7 @@ 1 2 - 840180 + 840195 @@ -30082,11 +30147,11 @@ xmlEncoding - 51268 + 51263 id - 51268 + 51263 encoding @@ -30104,7 +30169,7 @@ 1 2 - 51268 + 51263 @@ -30598,27 +30663,27 @@ xmlElements - 67061685 + 67055539 id - 67061685 + 67055539 name - 5082 + 5081 parentid - 27351687 + 27349180 idx - 78615 + 78608 fileid - 51263 + 51258 @@ -30632,7 +30697,7 @@ 1 2 - 67061685 + 67055539 @@ -30648,7 +30713,7 @@ 1 2 - 67061685 + 67055539 @@ -30664,7 +30729,7 @@ 1 2 - 67061685 + 67055539 @@ -30680,7 +30745,7 @@ 1 2 - 67061685 + 67055539 @@ -30865,27 +30930,27 @@ 1 2 - 16075227 + 16073753 2 3 - 5276599 + 5276115 3 4 - 2405163 + 2404943 4 6 - 2305179 + 2304967 6 31356 - 1289517 + 1289399 @@ -30901,22 +30966,22 @@ 1 2 - 19033145 + 19031401 2 3 - 4597119 + 4596698 3 4 - 2298956 + 2298745 4 121 - 1422465 + 1422335 @@ -30932,27 +30997,27 @@ 1 2 - 16075227 + 16073753 2 3 - 5276599 + 5276115 3 4 - 2405163 + 2404943 4 6 - 2305179 + 2304967 6 31356 - 1289517 + 1289399 @@ -30968,7 +31033,7 @@ 1 2 - 27351687 + 27349180 @@ -30984,22 +31049,22 @@ 1 2 - 35502 + 35499 2 4 - 7000 + 6999 4 11 - 4864 + 4863 12 15 - 3317 + 3316 15 @@ -31019,7 +31084,7 @@ 64 506 - 5902 + 5901 506 @@ -31040,7 +31105,7 @@ 1 2 - 77672 + 77665 2 @@ -31061,22 +31126,22 @@ 1 2 - 35502 + 35499 2 4 - 7000 + 6999 4 11 - 4864 + 4863 12 15 - 3317 + 3316 15 @@ -31096,7 +31161,7 @@ 64 506 - 5902 + 5901 506 @@ -31117,22 +31182,22 @@ 1 2 - 35502 + 35499 2 4 - 7000 + 6999 4 11 - 4864 + 4863 12 15 - 3317 + 3316 15 @@ -31152,7 +31217,7 @@ 64 506 - 5902 + 5901 506 @@ -31173,7 +31238,7 @@ 1 15 - 4345 + 4344 15 @@ -31188,42 +31253,42 @@ 103 172 - 4380 + 4379 173 236 - 4049 + 4048 237 351 - 4563 + 4562 351 564 - 3886 + 3885 564 804 - 3851 + 3850 806 996 - 4222 + 4221 997 1436 - 4330 + 4329 1441 2336 - 3861 + 3860 2342 @@ -31269,12 +31334,12 @@ 13 14 - 5982 + 5981 14 15 - 7168 + 7167 15 @@ -31315,17 +31380,17 @@ 1 6 - 4167 + 4166 6 19 - 3974 + 3973 19 48 - 3856 + 3855 48 @@ -31340,7 +31405,7 @@ 94 142 - 3851 + 3850 142 @@ -31350,7 +31415,7 @@ 209 314 - 4375 + 4374 314 @@ -31365,17 +31430,17 @@ 592 903 - 3846 + 3845 904 1647 - 3906 + 3905 1647 45210 - 3530 + 3529 @@ -31416,7 +31481,7 @@ 48 67 - 3861 + 3860 67 @@ -31426,12 +31491,12 @@ 96 152 - 3984 + 3983 152 199 - 3851 + 3850 199 @@ -31461,15 +31526,15 @@ xmlAttrs - 45633086 + 45628904 id - 45633086 + 45628904 elementid - 45273709 + 45269560 name @@ -31477,7 +31542,7 @@ value - 1023366 + 1023272 idx @@ -31485,7 +31550,7 @@ fileid - 50827 + 50822 @@ -31499,7 +31564,7 @@ 1 2 - 45633086 + 45628904 @@ -31515,7 +31580,7 @@ 1 2 - 45633086 + 45628904 @@ -31531,7 +31596,7 @@ 1 2 - 45633086 + 45628904 @@ -31547,7 +31612,7 @@ 1 2 - 45633086 + 45628904 @@ -31563,7 +31628,7 @@ 1 2 - 45633086 + 45628904 @@ -31579,12 +31644,12 @@ 1 2 - 45082031 + 45077900 2 14 - 191678 + 191660 @@ -31600,12 +31665,12 @@ 1 2 - 45082031 + 45077900 2 14 - 191678 + 191660 @@ -31621,12 +31686,12 @@ 1 2 - 45082239 + 45078108 2 13 - 191469 + 191452 @@ -31642,12 +31707,12 @@ 1 2 - 45082031 + 45077900 2 14 - 191678 + 191660 @@ -31663,7 +31728,7 @@ 1 2 - 45273709 + 45269560 @@ -31826,7 +31891,7 @@ 2 3 - 173 + 172 3 @@ -31959,52 +32024,52 @@ 1 2 - 172793 + 172777 2 3 - 292861 + 292834 3 4 - 91964 + 91955 4 5 - 61906 + 61901 5 6 - 46745 + 46741 6 8 - 84367 + 84359 8 13 - 89343 + 89335 13 37 - 77116 + 77108 37 165 - 77301 + 77294 165 509314 - 28966 + 28963 @@ -32020,52 +32085,52 @@ 1 2 - 172808 + 172792 2 3 - 292871 + 292844 3 4 - 91959 + 91950 4 5 - 61914 + 61908 5 6 - 46755 + 46751 6 8 - 84374 + 84366 8 13 - 89323 + 89315 13 37 - 77090 + 77083 37 165 - 77301 + 77294 165 509314 - 28966 + 28963 @@ -32081,12 +32146,12 @@ 1 2 - 914089 + 914005 2 3 - 108654 + 108644 3 @@ -32107,7 +32172,7 @@ 1 2 - 1021525 + 1021432 2 @@ -32128,47 +32193,47 @@ 1 2 - 186372 + 186355 2 3 - 344114 + 344083 3 4 - 95278 + 95269 4 5 - 44927 + 44923 5 6 - 51602 + 51597 6 8 - 77928 + 77921 8 15 - 82381 + 82373 15 68 - 77993 + 77986 68 10155 - 62766 + 62761 @@ -32554,7 +32619,7 @@ 1 12 - 3989 + 3988 12 @@ -32584,7 +32649,7 @@ 228 406 - 3806 + 3805 407 @@ -32609,7 +32674,7 @@ 1605 3016 - 3846 + 3845 3021 @@ -32630,17 +32695,17 @@ 1 10 - 3851 + 3850 10 30 - 3916 + 3915 30 61 - 3836 + 3835 61 @@ -32650,22 +32715,22 @@ 105 146 - 4084 + 4083 146 221 - 3821 + 3820 222 343 - 3821 + 3820 343 446 - 3816 + 3815 446 @@ -32680,7 +32745,7 @@ 789 1329 - 4385 + 4384 1334 @@ -32706,22 +32771,22 @@ 1 2 - 3124 + 3123 2 3 - 19561 + 19559 3 4 - 13087 + 13086 4 5 - 6160 + 6159 5 @@ -32757,7 +32822,7 @@ 10 27 - 4079 + 4078 27 @@ -32767,12 +32832,12 @@ 43 61 - 4267 + 4266 61 79 - 4355 + 4354 79 @@ -32782,7 +32847,7 @@ 116 180 - 3896 + 3895 181 @@ -32807,7 +32872,7 @@ 601 1116 - 3866 + 3865 1117 @@ -32828,7 +32893,7 @@ 1 2 - 43059 + 43055 2 @@ -32838,7 +32903,7 @@ 3 5 - 4420 + 4419 5 @@ -33249,11 +33314,11 @@ xmlHasNs - 357552 + 357558 elementId - 357552 + 357558 nsId @@ -33275,7 +33340,7 @@ 1 2 - 357552 + 357558 @@ -33291,7 +33356,7 @@ 1 2 - 357552 + 357558 @@ -33684,7 +33749,7 @@ 1 2 - 5211 + 5210 2 @@ -33715,7 +33780,7 @@ 1 2 - 5582 + 5581 2 @@ -33766,19 +33831,19 @@ xmlChars - 50185384 + 50180784 id - 50185384 + 50180784 text - 1818383 + 1818216 parentid - 31637371 + 31634472 idx @@ -33790,7 +33855,7 @@ fileid - 49072 + 49067 @@ -33804,7 +33869,7 @@ 1 2 - 50185384 + 50180784 @@ -33820,7 +33885,7 @@ 1 2 - 50185384 + 50180784 @@ -33836,7 +33901,7 @@ 1 2 - 50185384 + 50180784 @@ -33852,7 +33917,7 @@ 1 2 - 50185384 + 50180784 @@ -33868,7 +33933,7 @@ 1 2 - 50185384 + 50180784 @@ -33884,62 +33949,62 @@ 1 2 - 190103 + 190086 2 3 - 423627 + 423589 3 4 - 100448 + 100439 4 5 - 177339 + 177322 5 6 - 53810 + 53806 6 8 - 152883 + 152869 8 10 - 147492 + 147478 10 12 - 103316 + 103307 12 15 - 93307 + 93299 15 21 - 150877 + 150863 21 67 - 136906 + 136894 67 1003068 - 88268 + 88260 @@ -33955,62 +34020,62 @@ 1 2 - 190238 + 190221 2 3 - 423657 + 423619 3 4 - 100471 + 100462 4 5 - 177379 + 177362 5 6 - 53821 + 53816 6 8 - 152860 + 152846 8 10 - 147507 + 147494 10 12 - 103334 + 103325 12 15 - 93380 + 93372 15 21 - 151010 + 150996 21 67 - 136678 + 136666 67 1000575 - 88042 + 88034 @@ -34026,12 +34091,12 @@ 1 2 - 1784617 + 1784454 2 33 - 33765 + 33762 @@ -34047,7 +34112,7 @@ 1 2 - 1818380 + 1818213 2 @@ -34068,57 +34133,57 @@ 1 2 - 256834 + 256810 2 3 - 492795 + 492750 3 4 - 134153 + 134141 4 5 - 137260 + 137247 5 6 - 63556 + 63550 6 8 - 148901 + 148887 8 10 - 138669 + 138656 10 12 - 119814 + 119803 12 15 - 79134 + 79127 15 20 - 138228 + 138215 20 15105 - 109033 + 109023 @@ -34134,22 +34199,22 @@ 1 2 - 19074302 + 19072554 2 3 - 9103155 + 9102321 3 5 - 2902380 + 2902114 5 61 - 557533 + 557482 @@ -34165,22 +34230,22 @@ 1 2 - 19076544 + 19074795 2 3 - 9111876 + 9111041 3 4 - 2305525 + 2305313 4 47 - 1143426 + 1143321 @@ -34196,22 +34261,22 @@ 1 2 - 19074302 + 19072554 2 3 - 9103155 + 9102321 3 5 - 2902380 + 2902114 5 61 - 557533 + 557482 @@ -34227,7 +34292,7 @@ 1 2 - 31636775 + 31633875 2 @@ -34248,7 +34313,7 @@ 1 2 - 31637371 + 31634472 @@ -34649,7 +34714,7 @@ 9 38 - 4084 + 4083 38 @@ -34684,7 +34749,7 @@ 578 710 - 3896 + 3895 712 @@ -34730,7 +34795,7 @@ 27 53 - 3703 + 3702 53 @@ -34745,7 +34810,7 @@ 95 144 - 4390 + 4389 145 @@ -34755,7 +34820,7 @@ 208 310 - 4425 + 4424 311 @@ -34765,7 +34830,7 @@ 417 564 - 3718 + 3717 564 @@ -34796,7 +34861,7 @@ 1 9 - 3801 + 3800 9 @@ -34806,17 +34871,17 @@ 31 56 - 3826 + 3825 56 84 - 3856 + 3855 84 111 - 3891 + 3890 111 @@ -34846,17 +34911,17 @@ 700 1079 - 3698 + 3697 1083 1973 - 3733 + 3732 1984 61987 - 2773 + 2772 @@ -34877,32 +34942,32 @@ 2 3 - 2417 + 2416 3 4 - 5814 + 5813 4 5 - 10698 + 10697 5 6 - 7973 + 7972 6 7 - 5265 + 5264 7 9 - 3906 + 3905 9 @@ -34928,7 +34993,7 @@ 1 2 - 48844 + 48839 2 @@ -34943,15 +35008,15 @@ xmllocations - 162941664 + 162926731 xmlElement - 162936973 + 162922041 location - 142841448 + 142828357 @@ -34965,7 +35030,7 @@ 1 2 - 162936925 + 162921993 2 @@ -34986,17 +35051,17 @@ 1 2 - 123085053 + 123073773 2 3 - 19575384 + 19573590 3 15 - 181009 + 180993 @@ -35006,11 +35071,11 @@ commentline - 1860877 + 1860741 id - 1860877 + 1860741 kind @@ -35018,11 +35083,11 @@ text - 694980 + 694930 rawtext - 701319 + 701268 @@ -35036,7 +35101,7 @@ 1 2 - 1860877 + 1860741 @@ -35052,7 +35117,7 @@ 1 2 - 1860877 + 1860741 @@ -35068,7 +35133,7 @@ 1 2 - 1860877 + 1860741 @@ -35162,17 +35227,17 @@ 1 2 - 581306 + 581264 2 3 - 64409 + 64405 3 21238 - 49263 + 49260 @@ -35188,7 +35253,7 @@ 1 2 - 692739 + 692688 2 @@ -35209,7 +35274,7 @@ 1 2 - 690769 + 690719 2 @@ -35230,17 +35295,17 @@ 1 2 - 588189 + 588146 2 3 - 63719 + 63714 3 21237 - 49411 + 49407 @@ -35256,7 +35321,7 @@ 1 2 - 701319 + 701268 @@ -35272,7 +35337,7 @@ 1 2 - 701319 + 701268 @@ -35282,15 +35347,15 @@ commentline_location - 1860877 + 1860741 id - 1860877 + 1860741 loc - 1860877 + 1860741 @@ -35304,7 +35369,7 @@ 1 2 - 1860877 + 1860741 @@ -35320,7 +35385,7 @@ 1 2 - 1860877 + 1860741 @@ -35330,26 +35395,26 @@ commentblock - 452781 + 452748 id - 452781 + 452748 commentblock_location - 452781 + 452748 id - 452781 + 452748 loc - 452781 + 452748 @@ -35363,7 +35428,7 @@ 1 2 - 452781 + 452748 @@ -35379,7 +35444,7 @@ 1 2 - 452781 + 452748 @@ -35389,15 +35454,15 @@ commentblock_binding - 1636303 + 1636184 id - 452781 + 452748 entity - 706277 + 706226 bindtype @@ -35415,17 +35480,17 @@ 1 2 - 28774 + 28772 2 3 - 104425 + 104417 3 4 - 319581 + 319558 @@ -35441,17 +35506,17 @@ 1 3 - 29091 + 29089 3 4 - 104108 + 104100 4 5 - 319581 + 319558 @@ -35467,17 +35532,17 @@ 1 2 - 498310 + 498273 2 3 - 169548 + 169535 3 526 - 38419 + 38416 @@ -35493,22 +35558,22 @@ 1 2 - 267419 + 267400 2 3 - 275954 + 275934 3 4 - 151323 + 151312 4 5 - 11580 + 11579 @@ -35580,15 +35645,15 @@ commentblock_child - 2294166 + 2293999 id - 452781 + 452748 commentline - 1860118 + 1859983 index @@ -35606,37 +35671,37 @@ 1 2 - 140807 + 140797 2 3 - 43751 + 43747 3 4 - 103836 + 103829 4 5 - 35306 + 35303 5 6 - 58466 + 58462 6 10 - 39528 + 39525 10 323 - 31084 + 31081 @@ -35657,37 +35722,37 @@ 2 3 - 137332 + 137322 3 4 - 49739 + 49735 4 5 - 98663 + 98656 5 6 - 34095 + 34092 6 7 - 58217 + 58213 7 11 - 39257 + 39254 11 324 - 30846 + 30844 @@ -35703,7 +35768,7 @@ 1 2 - 1860118 + 1859983 @@ -35719,12 +35784,12 @@ 1 2 - 1426071 + 1425967 2 3 - 434047 + 434015 @@ -35836,11 +35901,11 @@ asp_elements - 184021 + 184013 id - 184021 + 184013 kind @@ -35848,7 +35913,7 @@ loc - 184021 + 184013 @@ -35862,7 +35927,7 @@ 1 2 - 184021 + 184013 @@ -35878,7 +35943,7 @@ 1 2 - 184021 + 184013 @@ -36006,7 +36071,7 @@ 1 2 - 184021 + 184013 @@ -36022,7 +36087,7 @@ 1 2 - 184021 + 184013 @@ -36623,11 +36688,11 @@ asp_element_body - 147088 + 147082 element - 147088 + 147082 body @@ -36645,7 +36710,7 @@ 1 2 - 147088 + 147082 @@ -36661,7 +36726,7 @@ 1 2 - 8192 + 8191 2 @@ -36696,11 +36761,11 @@ asp_tag_attribute - 49276 + 49274 tag - 20205 + 20204 index @@ -36712,7 +36777,7 @@ attribute - 49276 + 49274 @@ -36726,7 +36791,7 @@ 1 2 - 5725 + 5724 2 @@ -36767,7 +36832,7 @@ 1 2 - 5725 + 5724 2 @@ -36808,7 +36873,7 @@ 1 2 - 5725 + 5724 2 @@ -37320,7 +37385,7 @@ 1 2 - 49276 + 49274 @@ -37336,7 +37401,7 @@ 1 2 - 49276 + 49274 @@ -37352,7 +37417,7 @@ 1 2 - 49276 + 49274 @@ -37362,11 +37427,11 @@ asp_tag_name - 33602 + 33601 tag - 33602 + 33601 name @@ -37384,7 +37449,7 @@ 1 2 - 33602 + 33601 @@ -41302,11 +41367,11 @@ metadata_handle - 47747658 + 47748481 entity - 46752588 + 46753394 location @@ -41314,7 +41379,7 @@ handle - 2013738 + 2013773 @@ -41328,12 +41393,12 @@ 1 2 - 46104557 + 46105352 2 551 - 648030 + 648041 @@ -41349,12 +41414,12 @@ 1 2 - 46139288 + 46140083 2 124 - 613300 + 613310 @@ -41512,67 +41577,67 @@ 1 2 - 285396 + 285400 2 3 - 118203 + 118205 3 5 - 172521 + 172524 5 7 - 143572 + 143574 7 9 - 149436 + 149438 9 11 - 99130 + 99132 11 14 - 182253 + 182256 14 19 - 159476 + 159479 19 25 - 178632 + 178635 25 35 - 152625 + 152628 35 48 - 152584 + 152586 48 120 - 151740 + 151743 120 401 - 68165 + 68166 @@ -41588,67 +41653,67 @@ 1 2 - 285375 + 285380 2 3 - 118203 + 118205 3 5 - 172521 + 172524 5 7 - 143572 + 143574 7 9 - 149436 + 149438 9 11 - 99130 + 99132 11 14 - 182253 + 182256 14 19 - 159476 + 159479 19 25 - 178632 + 178635 25 35 - 152625 + 152628 35 48 - 152584 + 152586 48 120 - 151720 + 151722 120 551 - 68206 + 68207 diff --git a/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/old.dbscheme b/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/old.dbscheme new file mode 100644 index 00000000000..f145a9a7275 --- /dev/null +++ b/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/old.dbscheme @@ -0,0 +1,2094 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_field | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..c9ee11bd1ee --- /dev/null +++ b/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/semmlecode.csharp.dbscheme @@ -0,0 +1,2100 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + unique int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +compiler_generated(unique int id: @modifiable ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, array = 3, this = 4 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_compiler_generated( + unique int id: @expr ref); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); + +/* Common Intermediate Language - CIL */ + +case @cil_instruction.opcode of + 0 = @cil_nop +| 1 = @cil_break +| 2 = @cil_ldarg_0 +| 3 = @cil_ldarg_1 +| 4 = @cil_ldarg_2 +| 5 = @cil_ldarg_3 +| 6 = @cil_ldloc_0 +| 7 = @cil_ldloc_1 +| 8 = @cil_ldloc_2 +| 9 = @cil_ldloc_3 +| 10 = @cil_stloc_0 +| 11 = @cil_stloc_1 +| 12 = @cil_stloc_2 +| 13 = @cil_stloc_3 +| 14 = @cil_ldarg_s +| 15 = @cil_ldarga_s +| 16 = @cil_starg_s +| 17 = @cil_ldloc_s +| 18 = @cil_ldloca_s +| 19 = @cil_stloc_s +| 20 = @cil_ldnull +| 21 = @cil_ldc_i4_m1 +| 22 = @cil_ldc_i4_0 +| 23 = @cil_ldc_i4_1 +| 24 = @cil_ldc_i4_2 +| 25 = @cil_ldc_i4_3 +| 26 = @cil_ldc_i4_4 +| 27 = @cil_ldc_i4_5 +| 28 = @cil_ldc_i4_6 +| 29 = @cil_ldc_i4_7 +| 30 = @cil_ldc_i4_8 +| 31 = @cil_ldc_i4_s +| 32 = @cil_ldc_i4 +| 33 = @cil_ldc_i8 +| 34 = @cil_ldc_r4 +| 35 = @cil_ldc_r8 +| 37 = @cil_dup +| 38 = @cil_pop +| 39 = @cil_jmp +| 40 = @cil_call +| 41 = @cil_calli +| 42 = @cil_ret +| 43 = @cil_br_s +| 44 = @cil_brfalse_s +| 45 = @cil_brtrue_s +| 46 = @cil_beq_s +| 47 = @cil_bge_s +| 48 = @cil_bgt_s +| 49 = @cil_ble_s +| 50 = @cil_blt_s +| 51 = @cil_bne_un_s +| 52 = @cil_bge_un_s +| 53 = @cil_bgt_un_s +| 54 = @cil_ble_un_s +| 55 = @cil_blt_un_s +| 56 = @cil_br +| 57 = @cil_brfalse +| 58 = @cil_brtrue +| 59 = @cil_beq +| 60 = @cil_bge +| 61 = @cil_bgt +| 62 = @cil_ble +| 63 = @cil_blt +| 64 = @cil_bne_un +| 65 = @cil_bge_un +| 66 = @cil_bgt_un +| 67 = @cil_ble_un +| 68 = @cil_blt_un +| 69 = @cil_switch +| 70 = @cil_ldind_i1 +| 71 = @cil_ldind_u1 +| 72 = @cil_ldind_i2 +| 73 = @cil_ldind_u2 +| 74 = @cil_ldind_i4 +| 75 = @cil_ldind_u4 +| 76 = @cil_ldind_i8 +| 77 = @cil_ldind_i +| 78 = @cil_ldind_r4 +| 79 = @cil_ldind_r8 +| 80 = @cil_ldind_ref +| 81 = @cil_stind_ref +| 82 = @cil_stind_i1 +| 83 = @cil_stind_i2 +| 84 = @cil_stind_i4 +| 85 = @cil_stind_i8 +| 86 = @cil_stind_r4 +| 87 = @cil_stind_r8 +| 88 = @cil_add +| 89 = @cil_sub +| 90 = @cil_mul +| 91 = @cil_div +| 92 = @cil_div_un +| 93 = @cil_rem +| 94 = @cil_rem_un +| 95 = @cil_and +| 96 = @cil_or +| 97 = @cil_xor +| 98 = @cil_shl +| 99 = @cil_shr +| 100 = @cil_shr_un +| 101 = @cil_neg +| 102 = @cil_not +| 103 = @cil_conv_i1 +| 104 = @cil_conv_i2 +| 105 = @cil_conv_i4 +| 106 = @cil_conv_i8 +| 107 = @cil_conv_r4 +| 108 = @cil_conv_r8 +| 109 = @cil_conv_u4 +| 110 = @cil_conv_u8 +| 111 = @cil_callvirt +| 112 = @cil_cpobj +| 113 = @cil_ldobj +| 114 = @cil_ldstr +| 115 = @cil_newobj +| 116 = @cil_castclass +| 117 = @cil_isinst +| 118 = @cil_conv_r_un +| 121 = @cil_unbox +| 122 = @cil_throw +| 123 = @cil_ldfld +| 124 = @cil_ldflda +| 125 = @cil_stfld +| 126 = @cil_ldsfld +| 127 = @cil_ldsflda +| 128 = @cil_stsfld +| 129 = @cil_stobj +| 130 = @cil_conv_ovf_i1_un +| 131 = @cil_conv_ovf_i2_un +| 132 = @cil_conv_ovf_i4_un +| 133 = @cil_conv_ovf_i8_un +| 134 = @cil_conv_ovf_u1_un +| 135 = @cil_conv_ovf_u2_un +| 136 = @cil_conv_ovf_u4_un +| 137 = @cil_conv_ovf_u8_un +| 138 = @cil_conv_ovf_i_un +| 139 = @cil_conv_ovf_u_un +| 140 = @cil_box +| 141 = @cil_newarr +| 142 = @cil_ldlen +| 143 = @cil_ldelema +| 144 = @cil_ldelem_i1 +| 145 = @cil_ldelem_u1 +| 146 = @cil_ldelem_i2 +| 147 = @cil_ldelem_u2 +| 148 = @cil_ldelem_i4 +| 149 = @cil_ldelem_u4 +| 150 = @cil_ldelem_i8 +| 151 = @cil_ldelem_i +| 152 = @cil_ldelem_r4 +| 153 = @cil_ldelem_r8 +| 154 = @cil_ldelem_ref +| 155 = @cil_stelem_i +| 156 = @cil_stelem_i1 +| 157 = @cil_stelem_i2 +| 158 = @cil_stelem_i4 +| 159 = @cil_stelem_i8 +| 160 = @cil_stelem_r4 +| 161 = @cil_stelem_r8 +| 162 = @cil_stelem_ref +| 163 = @cil_ldelem +| 164 = @cil_stelem +| 165 = @cil_unbox_any +| 179 = @cil_conv_ovf_i1 +| 180 = @cil_conv_ovf_u1 +| 181 = @cil_conv_ovf_i2 +| 182 = @cil_conv_ovf_u2 +| 183 = @cil_conv_ovf_i4 +| 184 = @cil_conv_ovf_u4 +| 185 = @cil_conv_ovf_i8 +| 186 = @cil_conv_ovf_u8 +| 194 = @cil_refanyval +| 195 = @cil_ckinfinite +| 198 = @cil_mkrefany +| 208 = @cil_ldtoken +| 209 = @cil_conv_u2 +| 210 = @cil_conv_u1 +| 211 = @cil_conv_i +| 212 = @cil_conv_ovf_i +| 213 = @cil_conv_ovf_u +| 214 = @cil_add_ovf +| 215 = @cil_add_ovf_un +| 216 = @cil_mul_ovf +| 217 = @cil_mul_ovf_un +| 218 = @cil_sub_ovf +| 219 = @cil_sub_ovf_un +| 220 = @cil_endfinally +| 221 = @cil_leave +| 222 = @cil_leave_s +| 223 = @cil_stind_i +| 224 = @cil_conv_u +| 65024 = @cil_arglist +| 65025 = @cil_ceq +| 65026 = @cil_cgt +| 65027 = @cil_cgt_un +| 65028 = @cil_clt +| 65029 = @cil_clt_un +| 65030 = @cil_ldftn +| 65031 = @cil_ldvirtftn +| 65033 = @cil_ldarg +| 65034 = @cil_ldarga +| 65035 = @cil_starg +| 65036 = @cil_ldloc +| 65037 = @cil_ldloca +| 65038 = @cil_stloc +| 65039 = @cil_localloc +| 65041 = @cil_endfilter +| 65042 = @cil_unaligned +| 65043 = @cil_volatile +| 65044 = @cil_tail +| 65045 = @cil_initobj +| 65046 = @cil_constrained +| 65047 = @cil_cpblk +| 65048 = @cil_initblk +| 65050 = @cil_rethrow +| 65052 = @cil_sizeof +| 65053 = @cil_refanytype +| 65054 = @cil_readonly +; + +// CIL ignored instructions + +@cil_ignore = @cil_nop | @cil_break | @cil_volatile | @cil_unaligned; + +// CIL local/parameter/field access + +@cil_ldarg_any = @cil_ldarg_0 | @cil_ldarg_1 | @cil_ldarg_2 | @cil_ldarg_3 | @cil_ldarg_s | @cil_ldarga_s | @cil_ldarg | @cil_ldarga; +@cil_starg_any = @cil_starg | @cil_starg_s; + +@cil_ldloc_any = @cil_ldloc_0 | @cil_ldloc_1 | @cil_ldloc_2 | @cil_ldloc_3 | @cil_ldloc_s | @cil_ldloca_s | @cil_ldloc | @cil_ldloca; +@cil_stloc_any = @cil_stloc_0 | @cil_stloc_1 | @cil_stloc_2 | @cil_stloc_3 | @cil_stloc_s | @cil_stloc; + +@cil_ldfld_any = @cil_ldfld | @cil_ldsfld | @cil_ldsflda | @cil_ldflda; +@cil_stfld_any = @cil_stfld | @cil_stsfld; + +@cil_local_access = @cil_stloc_any | @cil_ldloc_any; +@cil_arg_access = @cil_starg_any | @cil_ldarg_any; +@cil_read_access = @cil_ldloc_any | @cil_ldarg_any | @cil_ldfld_any; +@cil_write_access = @cil_stloc_any | @cil_starg_any | @cil_stfld_any; + +@cil_stack_access = @cil_local_access | @cil_arg_access; +@cil_field_access = @cil_ldfld_any | @cil_stfld_any; + +@cil_access = @cil_read_access | @cil_write_access; + +// CIL constant/literal instructions + +@cil_ldc_i = @cil_ldc_i4_any | @cil_ldc_i8; + +@cil_ldc_i4_any = @cil_ldc_i4_m1 | @cil_ldc_i4_0 | @cil_ldc_i4_1 | @cil_ldc_i4_2 | @cil_ldc_i4_3 | + @cil_ldc_i4_4 | @cil_ldc_i4_5 | @cil_ldc_i4_6 | @cil_ldc_i4_7 | @cil_ldc_i4_8 | @cil_ldc_i4_s | @cil_ldc_i4; + +@cil_ldc_r = @cil_ldc_r4 | @cil_ldc_r8; + +@cil_literal = @cil_ldnull | @cil_ldc_i | @cil_ldc_r | @cil_ldstr; + +// Control flow + +@cil_conditional_jump = @cil_binary_jump | @cil_unary_jump; +@cil_binary_jump = @cil_beq_s | @cil_bge_s | @cil_bgt_s | @cil_ble_s | @cil_blt_s | + @cil_bne_un_s | @cil_bge_un_s | @cil_bgt_un_s | @cil_ble_un_s | @cil_blt_un_s | + @cil_beq | @cil_bge | @cil_bgt | @cil_ble | @cil_blt | + @cil_bne_un | @cil_bge_un | @cil_bgt_un | @cil_ble_un | @cil_blt_un; +@cil_unary_jump = @cil_brfalse_s | @cil_brtrue_s | @cil_brfalse | @cil_brtrue | @cil_switch; +@cil_unconditional_jump = @cil_br | @cil_br_s | @cil_leave_any; +@cil_leave_any = @cil_leave | @cil_leave_s; +@cil_jump = @cil_unconditional_jump | @cil_conditional_jump; + +// CIL call instructions + +@cil_call_any = @cil_jmp | @cil_call | @cil_calli | @cil_tail | @cil_callvirt | @cil_newobj; + +// CIL expression instructions + +@cil_expr = @cil_literal | @cil_binary_expr | @cil_unary_expr | @cil_call_any | @cil_read_access | + @cil_newarr | @cil_ldtoken | @cil_sizeof | + @cil_ldftn | @cil_ldvirtftn | @cil_localloc | @cil_mkrefany | @cil_refanytype | @cil_arglist | @cil_dup; + +@cil_unary_expr = + @cil_conversion_operation | @cil_unary_arithmetic_operation | @cil_unary_bitwise_operation| + @cil_ldlen | @cil_isinst | @cil_box | @cil_ldobj | @cil_castclass | @cil_unbox_any | + @cil_ldind | @cil_unbox; + +@cil_conversion_operation = + @cil_conv_i1 | @cil_conv_i2 | @cil_conv_i4 | @cil_conv_i8 | + @cil_conv_u1 | @cil_conv_u2 | @cil_conv_u4 | @cil_conv_u8 | + @cil_conv_ovf_i | @cil_conv_ovf_i_un | @cil_conv_ovf_i1 | @cil_conv_ovf_i1_un | + @cil_conv_ovf_i2 | @cil_conv_ovf_i2_un | @cil_conv_ovf_i4 | @cil_conv_ovf_i4_un | + @cil_conv_ovf_i8 | @cil_conv_ovf_i8_un | @cil_conv_ovf_u | @cil_conv_ovf_u_un | + @cil_conv_ovf_u1 | @cil_conv_ovf_u1_un | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_ovf_u4 | @cil_conv_ovf_u4_un | @cil_conv_ovf_u8 | @cil_conv_ovf_u8_un | + @cil_conv_r4 | @cil_conv_r8 | @cil_conv_ovf_u2 | @cil_conv_ovf_u2_un | + @cil_conv_i | @cil_conv_u | @cil_conv_r_un; + +@cil_ldind = @cil_ldind_i | @cil_ldind_i1 | @cil_ldind_i2 | @cil_ldind_i4 | @cil_ldind_i8 | + @cil_ldind_r4 | @cil_ldind_r8 | @cil_ldind_ref | @cil_ldind_u1 | @cil_ldind_u2 | @cil_ldind_u4; + +@cil_stind = @cil_stind_i | @cil_stind_i1 | @cil_stind_i2 | @cil_stind_i4 | @cil_stind_i8 | + @cil_stind_r4 | @cil_stind_r8 | @cil_stind_ref; + +@cil_bitwise_operation = @cil_binary_bitwise_operation | @cil_unary_bitwise_operation; + +@cil_binary_bitwise_operation = @cil_and | @cil_or | @cil_xor | @cil_shr | @cil_shr | @cil_shr_un | @cil_shl; + +@cil_binary_arithmetic_operation = @cil_add | @cil_sub | @cil_mul | @cil_div | @cil_div_un | + @cil_rem | @cil_rem_un | @cil_add_ovf | @cil_add_ovf_un | @cil_mul_ovf | @cil_mul_ovf_un | + @cil_sub_ovf | @cil_sub_ovf_un; + +@cil_unary_bitwise_operation = @cil_not; + +@cil_binary_expr = @cil_binary_arithmetic_operation | @cil_binary_bitwise_operation | @cil_read_array | @cil_comparison_operation; + +@cil_unary_arithmetic_operation = @cil_neg; + +@cil_comparison_operation = @cil_cgt_un | @cil_ceq | @cil_cgt | @cil_clt | @cil_clt_un; + +// Elements that retrieve an address of something +@cil_read_ref = @cil_ldloca_s | @cil_ldarga_s | @cil_ldflda | @cil_ldsflda | @cil_ldelema; + +// CIL array instructions + +@cil_read_array = + @cil_ldelem | @cil_ldelema | @cil_ldelem_i1 | @cil_ldelem_ref | @cil_ldelem_i | + @cil_ldelem_i1 | @cil_ldelem_i2 | @cil_ldelem_i4 | @cil_ldelem_i8 | @cil_ldelem_r4 | + @cil_ldelem_r8 | @cil_ldelem_u1 | @cil_ldelem_u2 | @cil_ldelem_u4; + +@cil_write_array = @cil_stelem | @cil_stelem_ref | + @cil_stelem_i | @cil_stelem_i1 | @cil_stelem_i2 | @cil_stelem_i4 | @cil_stelem_i8 | + @cil_stelem_r4 | @cil_stelem_r8; + +@cil_throw_any = @cil_throw | @cil_rethrow; + +#keyset[impl, index] +cil_instruction( + unique int id: @cil_instruction, + int opcode: int ref, + int index: int ref, + int impl: @cil_method_implementation ref); + +cil_jump( + unique int instruction: @cil_jump ref, + int target: @cil_instruction ref); + +cil_access( + unique int instruction: @cil_instruction ref, + int target: @cil_accessible ref); + +cil_value( + unique int instruction: @cil_literal ref, + string value: string ref); + +#keyset[instruction, index] +cil_switch( + int instruction: @cil_switch ref, + int index: int ref, + int target: @cil_instruction ref); + +cil_instruction_location( + unique int id: @cil_instruction ref, + int loc: @location ref); + +cil_type_location( + int id: @cil_type ref, + int loc: @location ref); + +cil_method_location( + int id: @cil_method ref, + int loc: @location ref); + +@cil_namespace = @namespace; + +@cil_type_container = @cil_type | @cil_namespace | @cil_method; + +case @cil_type.kind of + 0 = @cil_valueorreftype +| 1 = @cil_typeparameter +| 2 = @cil_array_type +| 3 = @cil_pointer_type +| 4 = @cil_function_pointer_type +; + +cil_type( + unique int id: @cil_type, + string name: string ref, + int kind: int ref, + int parent: @cil_type_container ref, + int sourceDecl: @cil_type ref); + +cil_pointer_type( + unique int id: @cil_pointer_type ref, + int pointee: @cil_type ref); + +cil_array_type( + unique int id: @cil_array_type ref, + int element_type: @cil_type ref, + int rank: int ref); + +cil_function_pointer_return_type( + unique int id: @cil_function_pointer_type ref, + int return_type: @cil_type ref); + +cil_method( + unique int id: @cil_method, + string name: string ref, + int parent: @cil_type ref, + int return_type: @cil_type ref); + +cil_method_source_declaration( + unique int method: @cil_method ref, + int source: @cil_method ref); + +cil_method_implementation( + unique int id: @cil_method_implementation, + int method: @cil_method ref, + int location: @assembly ref); + +cil_implements( + int id: @cil_method ref, + int decl: @cil_method ref); + +#keyset[parent, name] +cil_field( + unique int id: @cil_field, + int parent: @cil_type ref, + string name: string ref, + int field_type: @cil_type ref); + +@cil_element = @cil_instruction | @cil_declaration | @cil_handler | @cil_attribute | @cil_namespace; +@cil_named_element = @cil_declaration | @cil_namespace; +@cil_declaration = @cil_variable | @cil_method | @cil_type | @cil_member; +@cil_accessible = @cil_declaration; +@cil_variable = @cil_field | @cil_stack_variable; +@cil_stack_variable = @cil_local_variable | @cil_parameter; +@cil_member = @cil_method | @cil_type | @cil_field | @cil_property | @cil_event; +@cil_custom_modifier_receiver = @cil_method | @cil_property | @cil_parameter | @cil_field | @cil_function_pointer_type; +@cil_parameterizable = @cil_method | @cil_function_pointer_type; +@cil_has_type_annotation = @cil_stack_variable | @cil_property | @cil_field | @cil_method | @cil_function_pointer_type; + +#keyset[parameterizable, index] +cil_parameter( + unique int id: @cil_parameter, + int parameterizable: @cil_parameterizable ref, + int index: int ref, + int param_type: @cil_type ref); + +cil_parameter_in(unique int id: @cil_parameter ref); +cil_parameter_out(unique int id: @cil_parameter ref); + +cil_setter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +#keyset[id, modifier] +cil_custom_modifiers( + int id: @cil_custom_modifier_receiver ref, + int modifier: @cil_type ref, + int kind: int ref); // modreq: 1, modopt: 0 + +cil_type_annotation( + int id: @cil_has_type_annotation ref, + int annotation: int ref); + +cil_getter(unique int prop: @cil_property ref, + int method: @cil_method ref); + +cil_adder(unique int event: @cil_event ref, + int method: @cil_method ref); + +cil_remover(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_raiser(unique int event: @cil_event ref, int method: @cil_method ref); + +cil_property( + unique int id: @cil_property, + int parent: @cil_type ref, + string name: string ref, + int property_type: @cil_type ref); + +#keyset[parent, name] +cil_event(unique int id: @cil_event, + int parent: @cil_type ref, + string name: string ref, + int event_type: @cil_type ref); + +#keyset[impl, index] +cil_local_variable( + unique int id: @cil_local_variable, + int impl: @cil_method_implementation ref, + int index: int ref, + int var_type: @cil_type ref); + +cil_function_pointer_calling_conventions( + int id: @cil_function_pointer_type ref, + int kind: int ref); + +// CIL handlers (exception handlers etc). + +case @cil_handler.kind of + 0 = @cil_catch_handler +| 1 = @cil_filter_handler +| 2 = @cil_finally_handler +| 4 = @cil_fault_handler +; + +#keyset[impl, index] +cil_handler( + unique int id: @cil_handler, + int impl: @cil_method_implementation ref, + int index: int ref, + int kind: int ref, + int try_start: @cil_instruction ref, + int try_end: @cil_instruction ref, + int handler_start: @cil_instruction ref); + +cil_handler_filter( + unique int id: @cil_handler ref, + int filter_start: @cil_instruction ref); + +cil_handler_type( + unique int id: @cil_handler ref, + int catch_type: @cil_type ref); + +@cil_controlflow_node = @cil_entry_point | @cil_instruction; + +@cil_entry_point = @cil_method_implementation | @cil_handler; + +@cil_dataflow_node = @cil_instruction | @cil_variable | @cil_method; + +cil_method_stack_size( + unique int method: @cil_method_implementation ref, + int size: int ref); + +// CIL modifiers + +cil_public(int id: @cil_member ref); +cil_private(int id: @cil_member ref); +cil_protected(int id: @cil_member ref); +cil_internal(int id: @cil_member ref); +cil_static(int id: @cil_member ref); +cil_sealed(int id: @cil_member ref); +cil_virtual(int id: @cil_method ref); +cil_abstract(int id: @cil_member ref); +cil_class(int id: @cil_type ref); +cil_interface(int id: @cil_type ref); +cil_security(int id: @cil_member ref); +cil_requiresecobject(int id: @cil_method ref); +cil_specialname(int id: @cil_method ref); +cil_newslot(int id: @cil_method ref); + +cil_base_class(unique int id: @cil_type ref, int base: @cil_type ref); +cil_base_interface(int id: @cil_type ref, int base: @cil_type ref); +cil_enum_underlying_type(unique int id: @cil_type ref, int underlying: @cil_type ref); + +#keyset[unbound, index] +cil_type_parameter( + int unbound: @cil_member ref, + int index: int ref, + int param: @cil_typeparameter ref); + +#keyset[bound, index] +cil_type_argument( + int bound: @cil_member ref, + int index: int ref, + int t: @cil_type ref); + +// CIL type parameter constraints + +cil_typeparam_covariant(int tp: @cil_typeparameter ref); +cil_typeparam_contravariant(int tp: @cil_typeparameter ref); +cil_typeparam_class(int tp: @cil_typeparameter ref); +cil_typeparam_struct(int tp: @cil_typeparameter ref); +cil_typeparam_new(int tp: @cil_typeparameter ref); +cil_typeparam_constraint(int tp: @cil_typeparameter ref, int supertype: @cil_type ref); + +// CIL attributes + +cil_attribute( + unique int attributeid: @cil_attribute, + int element: @cil_declaration ref, + int constructor: @cil_method ref); + +#keyset[attribute_id, param] +cil_attribute_named_argument( + int attribute_id: @cil_attribute ref, + string param: string ref, + string value: string ref); + +#keyset[attribute_id, index] +cil_attribute_positional_argument( + int attribute_id: @cil_attribute ref, + int index: int ref, + string value: string ref); + + +// Common .Net data model covering both C# and CIL + +// Common elements +@dotnet_element = @element | @cil_element; +@dotnet_named_element = @named_element | @cil_named_element; +@dotnet_callable = @callable | @cil_method; +@dotnet_variable = @variable | @cil_variable; +@dotnet_field = @field | @cil_field; +@dotnet_parameter = @parameter | @cil_parameter; +@dotnet_declaration = @declaration | @cil_declaration; +@dotnet_member = @member | @cil_member; +@dotnet_event = @event | @cil_event; +@dotnet_property = @property | @cil_property | @indexer; +@dotnet_parameterizable = @parameterizable | @cil_parameterizable; + +// Common types +@dotnet_type = @type | @cil_type; +@dotnet_call = @call | @cil_call_any; +@dotnet_throw = @throw_element | @cil_throw_any; +@dotnet_valueorreftype = @cil_valueorreftype | @value_or_ref_type | @cil_array_type | @void_type; +@dotnet_typeparameter = @type_parameter | @cil_typeparameter; +@dotnet_array_type = @array_type | @cil_array_type; +@dotnet_pointer_type = @pointer_type | @cil_pointer_type; +@dotnet_type_parameter = @type_parameter | @cil_typeparameter; +@dotnet_generic = @dotnet_valueorreftype | @dotnet_callable; + +// Attributes +@dotnet_attribute = @attribute | @cil_attribute; + +// Expressions +@dotnet_expr = @expr | @cil_expr; + +// Literals +@dotnet_literal = @literal_expr | @cil_literal; +@dotnet_string_literal = @string_literal_expr | @cil_ldstr; +@dotnet_int_literal = @integer_literal_expr | @cil_ldc_i; +@dotnet_float_literal = @float_literal_expr | @cil_ldc_r; +@dotnet_null_literal = @null_literal_expr | @cil_ldnull; + +@metadata_entity = @cil_method | @cil_type | @cil_field | @cil_property | @field | @property | + @callable | @value_or_ref_type | @void_type; + +metadata_handle(int entity : @metadata_entity ref, int location: @assembly ref, int handle: int ref) diff --git a/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/upgrade.properties b/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/upgrade.properties new file mode 100644 index 00000000000..9f1b4c72a66 --- /dev/null +++ b/csharp/ql/lib/upgrades/f145a9a7275c8f457b392b2ebc9f8e07960a0ed2/upgrade.properties @@ -0,0 +1,2 @@ +description: Add `compilation_info`. +compatibility: backwards diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index ac2fbfce855..9fe1609363f 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.8.9 + +### Minor Analysis Improvements + +* Added sanitizers for relative URLs, `List.Contains()`, and checking the `.Host` property on an URI to the `cs/web/unvalidated-url-redirection` query. + ## 0.8.8 ### Minor Analysis Improvements diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.cs b/csharp/ql/src/Security Features/CWE-022/TaintedPath.cs deleted file mode 100644 index ac2add1b9b0..00000000000 --- a/csharp/ql/src/Security Features/CWE-022/TaintedPath.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.IO; -using System.Web; - -public class TaintedPathHandler : IHttpHandler -{ - public void ProcessRequest(HttpContext ctx) - { - String path = ctx.Request.QueryString["path"]; - // BAD: This could read any file on the filesystem. - ctx.Response.Write(File.ReadAllText(path)); - - // BAD: This could still read any file on the filesystem. - ctx.Response.Write(File.ReadAllText("/home/user/" + path)); - - // GOOD: MapPath ensures the path is safe to read from. - string safePath = ctx.Request.MapPath(path, ctx.Request.ApplicationPath, false); - ctx.Response.Write(File.ReadAllText(safePath)); - } -} diff --git a/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp b/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp index e838d8c56a4..bf3132a9719 100644 --- a/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp +++ b/csharp/ql/src/Security Features/CWE-022/TaintedPath.qhelp @@ -7,34 +7,53 @@ can result in sensitive information being revealed or deleted, or an attacker being able to influence behavior by modifying unexpected files.

-

Paths that are naively constructed from data controlled by a user may contain unexpected special characters, -such as "..". Such a path may potentially point to any directory on the file system.

+

Paths that are naively constructed from data controlled by a user may be absolute paths, or may contain +unexpected special characters such as "..". Such a path could point anywhere on the file system.

-

Validate user input before using it to construct a file path. Ideally, follow these rules:

+

Validate user input before using it to construct a file path.

-
    -
  • Do not allow more than a single "." character.
  • -
  • Do not allow directory separators such as "/" or "\" (depending on the file system).
  • -
  • Do not rely on simply replacing problematic sequences such as "../". For example, after applying this filter to -".../...//" the resulting string would still be "../".
  • -
  • Use a whitelist of known good patterns.
  • -
  • Sanitize potentially tainted paths using HttpRequest.MapPath.
  • -
+

Common validation methods include checking that the normalized path is relative and does not contain +any ".." components, or checking that the path is contained within a safe folder. The method you should use depends +on how the path is used in the application, and whether the path should be a single path component. +

+ +

If the path should be a single path component (such as a file name), you can check for the existence +of any path separators ("/" or "\"), or ".." sequences in the input, and reject the input if any are found. +

+ +

+Note that removing "../" sequences is not sufficient, since the input could still contain a path separator +followed by "..". For example, the input ".../...//" would still result in the string "../" if only "../" sequences +are removed. +

+ +

Finally, the simplest (but most restrictive) option is to use an allow list of safe patterns and make sure that +the user input matches one of these patterns.

-

In the first example, a file name is read from a HttpRequest and then used to access a file. However, a -malicious user could enter a file name which is an absolute path - for example, "/etc/passwd". In the second example, it -appears that the user is restricted to opening a file within the "user" home directory. However, a malicious user could -enter a filename which contains special characters. For example, the string "../../etc/passwd" will result in the code -reading the file located at "/home/[user]/../../etc/passwd", which is the system's password file. This file would then be -sent back to the user, giving them access to all the system's passwords.

+

In this example, a user-provided file name is read from a HTTP request and then used to access a file +and send it back to the user. However, a malicious user could enter a file name anywhere on the file system, +such as "/etc/passwd" or "../../../etc/passwd".

- + + +

+If the input should only be a file name, you can check that it doesn't contain any path separators or ".." sequences. +

+ + + +

+If the input should be within a specific directory, you can check that the resolved path +is still contained within that directory. +

+ +
diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp b/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp index 9d9aedbdeac..fc1ebe1e467 100644 --- a/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp +++ b/csharp/ql/src/Security Features/CWE-022/ZipSlip.qhelp @@ -50,7 +50,7 @@ the result is within the destination directory. If provided with a zip file cont path like ..\sneaky-file, then this file would be written outside the destination directory.

- +

To fix this vulnerability, we need to make three changes. Firstly, we need to resolve any directory traversal or other special characters in the path by using Path.GetFullPath. @@ -59,7 +59,7 @@ Secondly, we need to identify the destination output directory, again using the resolved output starts with the resolved destination directory, and throw an exception if this is not the case.

- + diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs new file mode 100644 index 00000000000..4539aed8b88 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPath.cs @@ -0,0 +1,13 @@ +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + string filename = ctx.Request.QueryString["path"]; + // BAD: This could read any file on the filesystem. + ctx.Response.Write(File.ReadAllText(filename)); + } +} diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs new file mode 100644 index 00000000000..19af394b1c7 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodFolder.cs @@ -0,0 +1,25 @@ +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + string filename = ctx.Request.QueryString["path"]; + + string user = ctx.User.Identity.Name; + string publicFolder = Path.GetFullPath("/home/" + user + "/public"); + string filePath = Path.GetFullPath(Path.Combine(publicFolder, filename)); + + // GOOD: ensure that the path stays within the public folder + if (!filePath.StartsWith(publicFolder + Path.DirectorySeparatorChar)) + { + ctx.Response.StatusCode = 400; + ctx.Response.StatusDescription = "Bad Request"; + ctx.Response.Write("Invalid path"); + return; + } + ctx.Response.Write(File.ReadAllText(filename)); + } +} diff --git a/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs new file mode 100644 index 00000000000..0e31e8b68c9 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-022/examples/TaintedPathGoodNormalize.cs @@ -0,0 +1,20 @@ +using System; +using System.IO; +using System.Web; + +public class TaintedPathHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + string filename = ctx.Request.QueryString["path"]; + // GOOD: ensure that the filename has no path separators or parent directory references + if (filename.Contains("..") || filename.Contains("/") || filename.Contains("\\")) + { + ctx.Response.StatusCode = 400; + ctx.Response.StatusDescription = "Bad Request"; + ctx.Response.Write("Invalid path"); + return; + } + ctx.Response.Write(File.ReadAllText(filename)); + } +} diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlipBad.cs b/csharp/ql/src/Security Features/CWE-022/examples/ZipSlipBad.cs similarity index 100% rename from csharp/ql/src/Security Features/CWE-022/ZipSlipBad.cs rename to csharp/ql/src/Security Features/CWE-022/examples/ZipSlipBad.cs diff --git a/csharp/ql/src/Security Features/CWE-022/ZipSlipGood.cs b/csharp/ql/src/Security Features/CWE-022/examples/ZipSlipGood.cs similarity index 100% rename from csharp/ql/src/Security Features/CWE-022/ZipSlipGood.cs rename to csharp/ql/src/Security Features/CWE-022/examples/ZipSlipGood.cs diff --git a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.cs b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.cs deleted file mode 100644 index af8ea579fef..00000000000 --- a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Web; - -public class UnvalidatedUrlHandler : IHttpHandler -{ - private const String VALID_REDIRECT = "http://cwe.mitre.org/data/definitions/601.html"; - - public void ProcessRequest(HttpContext ctx) - { - // BAD: a request parameter is incorporated without validation into a URL redirect - ctx.Response.Redirect(ctx.Request.QueryString["page"]); - - // GOOD: the request parameter is validated against a known fixed string - if (VALID_REDIRECT == ctx.Request.QueryString["page"]) - { - ctx.Response.Redirect(VALID_REDIRECT); - } - } -} diff --git a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp index 3cf3cdaba6e..c9a1b692b81 100644 --- a/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp +++ b/csharp/ql/src/Security Features/CWE-601/UrlRedirect.qhelp @@ -16,18 +16,43 @@ controlled by the attacker.

To guard against untrusted URL redirection, it is advisable to avoid putting user input directly into a redirect URL. Instead, maintain a list of authorized redirects on the server; then choose from that list based on the user input provided.

- +

+If this is not possible, then the user input should be validated in some other way, +for example, by verifying that the target URL is on the same host as the current page. +

- -

The following example shows an HTTP request parameter being used directly in a URL redirect -without validating the input, which facilitates phishing attacks. -It also shows how to remedy the problem by validating the user input against a known fixed string. + + +

+The following example shows an HTTP request parameter being used directly in a URL redirect +without validating the input, which facilitates phishing attacks:

- + + +

+One way to remedy the problem is to validate the user input against a known fixed string +before doing the redirection: +

+ + + +

+Alternatively, we can check that the target URL does not redirect to a different host +by checking that the URL is either relative or on a known good host: +

+ + + +

+Note that as written, the above code will allow redirects to URLs on example.com, +which is harmless but perhaps not intended. You can substitute your own domain (if known) for +example.com to prevent this. +

+
  • diff --git a/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirect.cs b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirect.cs new file mode 100644 index 00000000000..1190f0b6590 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirect.cs @@ -0,0 +1,11 @@ +using System; +using System.Web; + +public class UnvalidatedUrlHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + // BAD: a request parameter is incorporated without validation into a URL redirect + ctx.Response.Redirect(ctx.Request.QueryString["page"]); + } +} diff --git a/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGood.cs b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGood.cs new file mode 100644 index 00000000000..2c3d4622dba --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGood.cs @@ -0,0 +1,17 @@ +using System; +using System.Web; +using System.Collections.Generic; + +public class UnvalidatedUrlHandler : IHttpHandler +{ + private List VALID_REDIRECTS = new List{ "http://cwe.mitre.org/data/definitions/601.html", "http://cwe.mitre.org/data/definitions/79.html" }; + + public void ProcessRequest(HttpContext ctx) + { + if (VALID_REDIRECTS.Contains(ctx.Request.QueryString["page"])) + { + // GOOD: the request parameter is validated against a known list of strings + ctx.Response.Redirect(ctx.Request.QueryString["page"]); + } + } +} \ No newline at end of file diff --git a/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGoodDomain.cs b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGoodDomain.cs new file mode 100644 index 00000000000..77818f2acc2 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-601/examples/UrlRedirectGoodDomain.cs @@ -0,0 +1,22 @@ +using System; +using System.Web; + +public class UnvalidatedUrlHandler : IHttpHandler +{ + public void ProcessRequest(HttpContext ctx) + { + var urlString = ctx.Request.QueryString["page"]; + var url = new Uri(urlString, UriKind.RelativeOrAbsolute); + + var url = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); + if (!url.IsAbsoluteUri) { + // GOOD: The redirect is to a relative URL + ctx.Response.Redirect(url.ToString()); + } + + if (url.Host == "example.org") { + // GOOD: The redirect is to a known host + ctx.Response.Redirect(url.ToString()); + } + } +} \ No newline at end of file diff --git a/csharp/ql/src/Telemetry/ExtractorInformation.ql b/csharp/ql/src/Telemetry/ExtractorInformation.ql index 13eff511ee8..d09e1c9d5d3 100644 --- a/csharp/ql/src/Telemetry/ExtractorInformation.ql +++ b/csharp/ql/src/Telemetry/ExtractorInformation.ql @@ -9,6 +9,17 @@ import csharp import semmle.code.csharp.commons.Diagnostics +predicate compilationInfo(string key, float value) { + exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) | + key = infoKey and + value = infoValue.toFloat() + or + not exists(infoValue.toFloat()) and + key = infoKey + ": " + infoValue and + value = 1 + ) +} + predicate fileCount(string key, int value) { key = "Number of files" and value = strictcount(File f) @@ -177,6 +188,7 @@ predicate analyzerAssemblies(string key, float value) { from string key, float value where ( + compilationInfo(key, value) or fileCount(key, value) or fileCountByExtension(key, value) or totalNumberOfLines(key, value) or diff --git a/csharp/ql/src/change-notes/released/0.8.9.md b/csharp/ql/src/change-notes/released/0.8.9.md new file mode 100644 index 00000000000..4210517b165 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.8.9.md @@ -0,0 +1,5 @@ +## 0.8.9 + +### Minor Analysis Improvements + +* Added sanitizers for relative URLs, `List.Contains()`, and checking the `.Host` property on an URI to the `cs/web/unvalidated-url-redirection` query. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index da0a61b4048..5290c29b7fe 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.9 diff --git a/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql b/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql index 1713607607c..47b69d3e975 100644 --- a/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql +++ b/csharp/ql/src/experimental/Security Features/backdoor/PotentialTimeBomb.ql @@ -13,14 +13,18 @@ import csharp import Flow::PathGraph -query predicate edges(Flow::PathNode a, Flow::PathNode b) { - Flow::PathGraph::edges(a, b) +query predicate edges(Flow::PathNode a, Flow::PathNode b, string key, string val) { + Flow::PathGraph::edges(a, b, key, val) or FlowsFromGetLastWriteTimeConfigToTimeSpanArithmeticCallableConfig::isSink(a.getNode()) and - FlowsFromTimeSpanArithmeticToTimeComparisonCallableConfig::isSource(b.getNode()) + FlowsFromTimeSpanArithmeticToTimeComparisonCallableConfig::isSource(b.getNode()) and + key = "provenance" and + val = "" or FlowsFromTimeSpanArithmeticToTimeComparisonCallableConfig::isSink(a.getNode()) and - FlowsFromTimeComparisonCallableToSelectionStatementConditionConfig::isSource(b.getNode()) + FlowsFromTimeComparisonCallableToSelectionStatementConditionConfig::isSource(b.getNode()) and + key = "provenance" and + val = "" } /** diff --git a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll index bf07e73d5fe..189ffce2903 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/Instruction.qll @@ -2125,13 +2125,6 @@ class ChiInstruction extends Instruction { */ final Instruction getPartial() { result = this.getPartialOperand().getDef() } - /** - * Gets the bit range `[startBit, endBit)` updated by the partial operand of this `ChiInstruction`, relative to the start address of the total operand. - */ - final predicate getUpdatedInterval(int startBit, int endBit) { - Construction::getIntervalUpdatedByChi(this, startBit, endBit) - } - /** * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. * This means that the `ChiPartialOperand` will not override the entire memory associated with the diff --git a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll index 8297fedb28e..5811f2ff946 100644 --- a/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/raw/internal/IRConstruction.qll @@ -216,13 +216,6 @@ private module Cached { result = getMemoryOperandDefinition(instr, _, _) } - /** - * Holds if the partial operand of this `ChiInstruction` updates the bit range - * `[startBitOffset, endBitOffset)` of the total operand. - */ - cached - predicate getIntervalUpdatedByChi(ChiInstruction chi, int startBit, int endBit) { none() } - /** * Holds if the operand totally overlaps with its definition and consumes the * bit range `[startBitOffset, endBitOffset)`. diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll index bf07e73d5fe..189ffce2903 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/Instruction.qll @@ -2125,13 +2125,6 @@ class ChiInstruction extends Instruction { */ final Instruction getPartial() { result = this.getPartialOperand().getDef() } - /** - * Gets the bit range `[startBit, endBit)` updated by the partial operand of this `ChiInstruction`, relative to the start address of the total operand. - */ - final predicate getUpdatedInterval(int startBit, int endBit) { - Construction::getIntervalUpdatedByChi(this, startBit, endBit) - } - /** * Holds if the `ChiPartialOperand` totally, but not exactly, overlaps with the `ChiTotalOperand`. * This means that the `ChiPartialOperand` will not override the entire memory associated with the diff --git a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll index 04522e4fe18..209c42726b7 100644 --- a/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll +++ b/csharp/ql/src/experimental/ir/implementation/unaliased_ssa/internal/SSAConstruction.qll @@ -233,20 +233,6 @@ private module Cached { ) } - /** - * Holds if the partial operand of this `ChiInstruction` updates the bit range - * `[startBitOffset, endBitOffset)` of the total operand. - */ - cached - predicate getIntervalUpdatedByChi(ChiInstruction chi, int startBitOffset, int endBitOffset) { - exists(Alias::MemoryLocation location, OldInstruction oldInstruction | - oldInstruction = getOldInstruction(chi.getPartial()) and - location = Alias::getResultMemoryLocation(oldInstruction) and - startBitOffset = Alias::getStartBitOffset(location) and - endBitOffset = Alias::getEndBitOffset(location) - ) - } - /** * Holds if `operand` totally overlaps with its definition and consumes the bit range * `[startBitOffset, endBitOffset)`. diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index a16c72edd72..1d03699a20f 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.8.8 +version: 0.8.9 groups: - csharp - queries diff --git a/csharp/ql/test/experimental/CWE-918/RequestForgery.expected b/csharp/ql/test/experimental/CWE-918/RequestForgery.expected index 4c499ad4be6..37cc9ded82c 100644 --- a/csharp/ql/test/experimental/CWE-918/RequestForgery.expected +++ b/csharp/ql/test/experimental/CWE-918/RequestForgery.expected @@ -1,5 +1,5 @@ edges -| RequestForgery.cs:12:52:12:54 | url : String | RequestForgery.cs:14:66:14:68 | access to parameter url | +| RequestForgery.cs:12:52:12:54 | url : String | RequestForgery.cs:14:66:14:68 | access to parameter url | provenance | | nodes | RequestForgery.cs:12:52:12:54 | url : String | semmle.label | url : String | | RequestForgery.cs:14:66:14:68 | access to parameter url | semmle.label | access to parameter url | diff --git a/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected b/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected index 0ee0a6b7f61..f3c1a8ed6c5 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected +++ b/csharp/ql/test/experimental/Security Features/CWE-759/HashWithoutSalt.expected @@ -1,10 +1,10 @@ edges -| HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | HashWithoutSalt.cs:20:49:20:56 | access to local variable passBuff | -| HashWithoutSalt.cs:18:70:18:77 | access to parameter password : String | HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | -| HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:39:51:39:59 | access to local variable passBytes | -| HashWithoutSalt.cs:38:64:38:71 | access to parameter password : String | HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | -| HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:71:48:71:56 | access to local variable passBytes | -| HashWithoutSalt.cs:70:64:70:71 | access to parameter password : String | HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | +| HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | HashWithoutSalt.cs:20:49:20:56 | access to local variable passBuff | provenance | | +| HashWithoutSalt.cs:18:70:18:77 | access to parameter password : String | HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | provenance | | +| HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:39:51:39:59 | access to local variable passBytes | provenance | | +| HashWithoutSalt.cs:38:64:38:71 | access to parameter password : String | HashWithoutSalt.cs:38:28:38:72 | call to method GetBytes : Byte[] | provenance | | +| HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | HashWithoutSalt.cs:71:48:71:56 | access to local variable passBytes | provenance | | +| HashWithoutSalt.cs:70:64:70:71 | access to parameter password : String | HashWithoutSalt.cs:70:28:70:72 | call to method GetBytes : Byte[] | provenance | | nodes | HashWithoutSalt.cs:18:28:18:105 | call to method ConvertStringToBinary : IBuffer | semmle.label | call to method ConvertStringToBinary : IBuffer | | HashWithoutSalt.cs:18:70:18:77 | access to parameter password : String | semmle.label | access to parameter password : String | diff --git a/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected b/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected index 512699c5398..812e1751048 100644 --- a/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected +++ b/csharp/ql/test/experimental/Security Features/backdoor/PotentialTimeBomb.expected @@ -7,14 +7,14 @@ nodes | test.cs:71:36:71:70 | call to method AddHours | semmle.label | call to method AddHours | subpaths edges -| test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:36:71:48 | access to local variable lastWriteTime | -| test.cs:71:13:71:71 | call to method CompareTo : Int32 | test.cs:71:13:71:76 | ... >= ... | -| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo | -| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo : Int32 | -| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:36:71:70 | call to method AddHours | -| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo | -| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo : Int32 | -| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:36:71:70 | call to method AddHours | +| test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:36:71:48 | access to local variable lastWriteTime | provenance | | +| test.cs:71:13:71:71 | call to method CompareTo : Int32 | test.cs:71:13:71:76 | ... >= ... | provenance | | +| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo | provenance | | +| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:13:71:71 | call to method CompareTo : Int32 | provenance | | +| test.cs:71:36:71:48 | access to local variable lastWriteTime | test.cs:71:36:71:70 | call to method AddHours | provenance | | +| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo | provenance | | +| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:13:71:71 | call to method CompareTo : Int32 | provenance | | +| test.cs:71:36:71:70 | call to method AddHours | test.cs:71:36:71:70 | call to method AddHours | provenance | | #select | test.cs:71:9:74:9 | if (...) ... | test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:13:71:71 | call to method CompareTo | Possible TimeBomb logic triggered by an $@ that takes into account $@ from the $@ as part of the potential trigger. | test.cs:71:13:71:71 | call to method CompareTo | call to method CompareTo | test.cs:71:36:71:70 | call to method AddHours | offset | test.cs:69:34:69:76 | call to method GetLastWriteTime | last modification time of a file | | test.cs:71:9:74:9 | if (...) ... | test.cs:69:34:69:76 | call to method GetLastWriteTime : DateTime | test.cs:71:13:71:71 | call to method CompareTo : Int32 | Possible TimeBomb logic triggered by an $@ that takes into account $@ from the $@ as part of the potential trigger. | test.cs:71:13:71:71 | call to method CompareTo | call to method CompareTo | test.cs:71:36:71:70 | call to method AddHours | offset | test.cs:69:34:69:76 | call to method GetLastWriteTime | last modification time of a file | diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected index 6d75d5ef041..e4c2f9af9ed 100644 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected +++ b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.expected @@ -1,54 +1,54 @@ edges -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | -| DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | -| DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | -| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | -| dataflow.cs:16:18:16:26 | "tainted" : String | dataflow.cs:16:18:16:37 | call to method ToString | -| dataflow.cs:18:27:18:27 | 2 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | -| dataflow.cs:18:30:18:30 | 3 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | -| dataflow.cs:19:29:19:31 | 0.5 : Double | dataflow.cs:19:18:19:32 | call to method Round | -| dataflow.cs:20:45:20:53 | "tainted" : String | dataflow.cs:20:18:20:54 | call to method GetFullPath | -| dataflow.cs:27:44:27:46 | 1 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | -| dataflow.cs:27:49:27:51 | 2 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | -| dataflow.cs:38:34:38:37 | "d1" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | -| dataflow.cs:38:34:38:37 | "d1" : String | dataflow.cs:38:18:38:38 | call to method Taint1 | -| dataflow.cs:39:34:39:37 | "d2" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | -| dataflow.cs:39:34:39:37 | "d2" : String | dataflow.cs:39:18:39:38 | call to method Taint2 | -| dataflow.cs:40:34:40:37 | "d3" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | -| dataflow.cs:40:34:40:37 | "d3" : String | dataflow.cs:40:18:40:38 | call to method Taint3 | -| dataflow.cs:44:28:44:32 | "t1a" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | -| dataflow.cs:44:28:44:32 | "t1a" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:44:35:44:39 | "t1b" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | -| dataflow.cs:44:35:44:39 | "t1b" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | -| dataflow.cs:47:35:47:38 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | -| dataflow.cs:47:35:47:38 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -| dataflow.cs:47:41:47:44 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | -| dataflow.cs:47:41:47:44 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | -| dataflow.cs:72:21:72:34 | call to method NullFunction : null | dataflow.cs:72:21:72:52 | ... ?? ... | -| dataflow.cs:72:39:72:52 | call to method IndirectNull : null | dataflow.cs:72:21:72:52 | ... ?? ... | -| dataflow.cs:87:31:87:44 | call to method NullFunction : null | dataflow.cs:87:24:87:51 | ... ? ... : ... | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:72:39:72:52 | call to method IndirectNull : null | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull | -| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull : null | -| dataflow.cs:106:20:106:33 | call to method IndirectNull : null | dataflow.cs:108:16:108:16 | access to local variable x : null | -| dataflow.cs:107:23:107:26 | null : null | dataflow.cs:108:16:108:16 | access to local variable x : null | -| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:72:21:72:34 | call to method NullFunction : null | -| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:87:31:87:44 | call to method NullFunction : null | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | provenance | | +| DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | DataFlow.dll:0:0:0:0 | ldarg.2 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint5 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint6 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.1 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| DataFlow.dll:0:0:0:0 | ldarg.2 : String | DataFlow.dll:0:0:0:0 | call : String | provenance | | +| dataflow.cs:16:18:16:26 | "tainted" : String | dataflow.cs:16:18:16:37 | call to method ToString | provenance | | +| dataflow.cs:18:27:18:27 | 2 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | provenance | | +| dataflow.cs:18:30:18:30 | 3 : Int32 | dataflow.cs:18:18:18:31 | call to method Max | provenance | | +| dataflow.cs:19:29:19:31 | 0.5 : Double | dataflow.cs:19:18:19:32 | call to method Round | provenance | | +| dataflow.cs:20:45:20:53 | "tainted" : String | dataflow.cs:20:18:20:54 | call to method GetFullPath | provenance | | +| dataflow.cs:27:44:27:46 | 1 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | provenance | | +| dataflow.cs:27:49:27:51 | 2 : Double | dataflow.cs:27:18:27:52 | call to method IEEERemainder | provenance | | +| dataflow.cs:38:34:38:37 | "d1" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | +| dataflow.cs:38:34:38:37 | "d1" : String | dataflow.cs:38:18:38:38 | call to method Taint1 | provenance | | +| dataflow.cs:39:34:39:37 | "d2" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint2 : String | provenance | | +| dataflow.cs:39:34:39:37 | "d2" : String | dataflow.cs:39:18:39:38 | call to method Taint2 | provenance | | +| dataflow.cs:40:34:40:37 | "d3" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint3 : String | provenance | | +| dataflow.cs:40:34:40:37 | "d3" : String | dataflow.cs:40:18:40:38 | call to method Taint3 | provenance | | +| dataflow.cs:44:28:44:32 | "t1a" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | provenance | | +| dataflow.cs:44:28:44:32 | "t1a" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | provenance | | +| dataflow.cs:44:35:44:39 | "t1b" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of Taint1 : String | provenance | | +| dataflow.cs:44:35:44:39 | "t1b" : String | dataflow.cs:44:18:44:40 | call to method Taint1 | provenance | | +| dataflow.cs:47:35:47:38 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 1 of TaintIndirect : String | provenance | | +| dataflow.cs:47:35:47:38 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | provenance | | +| dataflow.cs:47:41:47:44 | "t6" : String | DataFlow.dll:0:0:0:0 | Parameter 2 of TaintIndirect : String | provenance | | +| dataflow.cs:47:41:47:44 | "t6" : String | dataflow.cs:47:18:47:45 | call to method TaintIndirect | provenance | | +| dataflow.cs:72:21:72:34 | call to method NullFunction : null | dataflow.cs:72:21:72:52 | ... ?? ... | provenance | | +| dataflow.cs:72:39:72:52 | call to method IndirectNull : null | dataflow.cs:72:21:72:52 | ... ?? ... | provenance | | +| dataflow.cs:87:31:87:44 | call to method NullFunction : null | dataflow.cs:87:24:87:51 | ... ? ... : ... | provenance | | +| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:72:39:72:52 | call to method IndirectNull : null | provenance | | +| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull | provenance | | +| dataflow.cs:100:30:100:33 | null : null | dataflow.cs:106:20:106:33 | call to method IndirectNull : null | provenance | | +| dataflow.cs:106:20:106:33 | call to method IndirectNull : null | dataflow.cs:108:16:108:16 | access to local variable x : null | provenance | | +| dataflow.cs:107:23:107:26 | null : null | dataflow.cs:108:16:108:16 | access to local variable x : null | provenance | | +| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:72:21:72:34 | call to method NullFunction : null | provenance | | +| dataflow.cs:108:16:108:16 | access to local variable x : null | dataflow.cs:87:31:87:44 | call to method NullFunction : null | provenance | | nodes | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | semmle.label | Parameter 1 of Taint1 : String | | DataFlow.dll:0:0:0:0 | Parameter 1 of Taint1 : String | semmle.label | Parameter 1 of Taint1 : String | diff --git a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql index 55d53d0600e..609717b8340 100644 --- a/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql +++ b/csharp/ql/test/library-tests/cil/dataflow/DataFlow.ql @@ -13,8 +13,8 @@ private predicate relevantPathNode(Flow::PathNode n) { ) } -query predicate edges(Flow::PathNode a, Flow::PathNode b) { - Flow::PathGraph::edges(a, b) and +query predicate edges(Flow::PathNode a, Flow::PathNode b, string key, string val) { + Flow::PathGraph::edges(a, b, key, val) and relevantPathNode(a) and relevantPathNode(b) } diff --git a/csharp/ql/test/library-tests/constructors/PrimaryConstructor.expected b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.expected new file mode 100644 index 00000000000..af59b035810 --- /dev/null +++ b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.expected @@ -0,0 +1,2 @@ +| constructors.cs:23:18:23:19 | C1 | +| constructors.cs:28:18:28:19 | C2 | diff --git a/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql new file mode 100644 index 00000000000..0a2fb2f23fe --- /dev/null +++ b/csharp/ql/test/library-tests/constructors/PrimaryConstructor.ql @@ -0,0 +1,4 @@ +import csharp + +from PrimaryConstructor c +select c diff --git a/csharp/ql/test/library-tests/constructors/PrintAst.expected b/csharp/ql/test/library-tests/constructors/PrintAst.expected index 83a9235de1a..c917d5c7fa1 100644 --- a/csharp/ql/test/library-tests/constructors/PrintAst.expected +++ b/csharp/ql/test/library-tests/constructors/PrintAst.expected @@ -17,3 +17,35 @@ constructors.cs: # 16| -1: [TypeMention] int # 16| 0: [LocalVariableAccess] access to local variable i # 16| 1: [IntLiteral] 0 +# 21| [NamespaceDeclaration] namespace ... { ... } +# 23| 1: [Class] C1 +# 23| 4: [InstanceConstructor,PrimaryConstructor] C1 +#-----| 2: (Parameters) +# 23| 0: [Parameter] o +# 23| -1: [TypeMention] object +# 23| 1: [Parameter] s +# 23| -1: [TypeMention] string +# 23| 4: [BlockStmt] {...} +# 25| 5: [InstanceConstructor] C1 +#-----| 2: (Parameters) +# 25| 0: [Parameter] o +# 25| -1: [TypeMention] object +# 25| 3: [ConstructorInitializer] call to constructor C1 +# 25| 0: [ParameterAccess] access to parameter o +# 25| 1: [StringLiteralUtf16] "default" +# 25| 4: [BlockStmt] {...} +# 28| 2: [Class] C2 +#-----| 3: (Base types) +# 28| 0: [TypeMention] C1 +# 28| 4: [InstanceConstructor,PrimaryConstructor] C2 +#-----| 2: (Parameters) +# 28| 0: [Parameter] o +# 28| -1: [TypeMention] object +# 28| 1: [Parameter] s +# 28| -1: [TypeMention] string +# 28| 2: [Parameter] i +# 28| -1: [TypeMention] int +# 28| 3: [ConstructorInitializer] call to constructor C1 +# 28| 0: [ParameterAccess] access to parameter o +# 28| 1: [ParameterAccess] access to parameter s +# 28| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/constructors/constructors.cs b/csharp/ql/test/library-tests/constructors/constructors.cs index d8619a0edb9..33867d8ebc7 100644 --- a/csharp/ql/test/library-tests/constructors/constructors.cs +++ b/csharp/ql/test/library-tests/constructors/constructors.cs @@ -17,3 +17,13 @@ namespace Constructors } } } + +namespace PrimaryConstructors +{ + public class C1(object o, string s) + { + public C1(object o) : this(o, "default") { } + } + + public class C2(object o, string s, int i) : C1(o, s) { } +} diff --git a/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected b/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected index e858c24758d..59e0fb54c32 100644 --- a/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected +++ b/csharp/ql/test/library-tests/csharp7/GlobalFlow.expected @@ -1,27 +1,27 @@ edges -| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | -| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | -| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | -| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | -| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | -| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | -| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | -| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | -| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | -| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | -| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | +| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | provenance | | +| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | provenance | | +| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | provenance | | +| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | provenance | | +| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | provenance | | +| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | provenance | | +| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | provenance | | +| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | provenance | | +| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | provenance | | +| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | provenance | | nodes | CSharp7.cs:39:9:39:21 | SSA def(x) : String | semmle.label | SSA def(x) : String | | CSharp7.cs:39:13:39:21 | "tainted" : String | semmle.label | "tainted" : String | diff --git a/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected b/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected index 04bb7095ec9..2cc4eb58cf9 100644 --- a/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected +++ b/csharp/ql/test/library-tests/csharp7/GlobalTaintTracking.expected @@ -1,34 +1,34 @@ edges -| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | -| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | -| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | -| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | -| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | -| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | -| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | -| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | -| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | -| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | -| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | -| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:180:23:180:25 | access to local variable src : String | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | -| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | -| CSharp7.cs:176:25:176:25 | s : String | CSharp7.cs:176:33:176:33 | access to parameter s : String | -| CSharp7.cs:176:31:176:34 | call to local function g : String | CSharp7.cs:176:31:176:39 | ... + ... : String | -| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:176:31:176:34 | call to local function g : String | -| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:177:25:177:25 | s : String | -| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | -| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | -| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:176:25:176:25 | s : String | -| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:180:21:180:26 | call to local function f | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | -| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | -| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | +| CSharp7.cs:39:9:39:21 | SSA def(x) : String | CSharp7.cs:49:22:49:23 | SSA def(t1) : String | provenance | | +| CSharp7.cs:39:13:39:21 | "tainted" : String | CSharp7.cs:39:9:39:21 | SSA def(x) : String | provenance | | +| CSharp7.cs:42:19:42:19 | x : String | CSharp7.cs:44:9:44:13 | SSA def(y) : String | provenance | | +| CSharp7.cs:49:22:49:23 | SSA def(t1) : String | CSharp7.cs:51:18:51:19 | access to local variable t1 | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:42:19:42:19 | x : String | provenance | | +| CSharp7.cs:55:11:55:19 | "tainted" : String | CSharp7.cs:55:30:55:31 | SSA def(t4) : String | provenance | | +| CSharp7.cs:55:30:55:31 | SSA def(t4) : String | CSharp7.cs:56:18:56:19 | access to local variable t4 | provenance | | +| CSharp7.cs:80:21:80:21 | x : String | CSharp7.cs:82:20:82:20 | access to parameter x : String | provenance | | +| CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:82:16:82:26 | access to field Item1 : String | provenance | | +| CSharp7.cs:82:20:82:20 | access to parameter x : String | CSharp7.cs:82:16:82:24 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:87:19:87:27 | "tainted" : String | CSharp7.cs:87:18:87:34 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| CSharp7.cs:90:20:90:21 | access to local variable t1 : ValueTuple [field Item1] : String | CSharp7.cs:90:20:90:27 | access to field Item1 : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:80:21:80:21 | x : String | provenance | | +| CSharp7.cs:90:20:90:27 | access to field Item1 : String | CSharp7.cs:90:18:90:28 | call to method I | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:180:23:180:25 | access to local variable src : String | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:181:23:181:25 | access to local variable src : String | provenance | | +| CSharp7.cs:175:22:175:30 | "tainted" : String | CSharp7.cs:182:23:182:25 | access to local variable src : String | provenance | | +| CSharp7.cs:176:25:176:25 | s : String | CSharp7.cs:176:33:176:33 | access to parameter s : String | provenance | | +| CSharp7.cs:176:31:176:34 | call to local function g : String | CSharp7.cs:176:31:176:39 | ... + ... : String | provenance | | +| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:176:31:176:34 | call to local function g : String | provenance | | +| CSharp7.cs:176:33:176:33 | access to parameter s : String | CSharp7.cs:177:25:177:25 | s : String | provenance | | +| CSharp7.cs:177:25:177:25 | s : String | CSharp7.cs:177:31:177:31 | access to parameter s : String | provenance | | +| CSharp7.cs:178:25:178:25 | s : String | CSharp7.cs:178:37:178:37 | access to parameter s : String | provenance | | +| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:176:25:176:25 | s : String | provenance | | +| CSharp7.cs:180:23:180:25 | access to local variable src : String | CSharp7.cs:180:21:180:26 | call to local function f | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:177:25:177:25 | s : String | provenance | | +| CSharp7.cs:181:23:181:25 | access to local variable src : String | CSharp7.cs:181:21:181:26 | call to local function g | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:178:25:178:25 | s : String | provenance | | +| CSharp7.cs:182:23:182:25 | access to local variable src : String | CSharp7.cs:182:21:182:26 | call to local function h | provenance | | nodes | CSharp7.cs:39:9:39:21 | SSA def(x) : String | semmle.label | SSA def(x) : String | | CSharp7.cs:39:13:39:21 | "tainted" : String | semmle.label | "tainted" : String | diff --git a/csharp/ql/test/library-tests/csharp9/PrintAst.expected b/csharp/ql/test/library-tests/csharp9/PrintAst.expected index feef948d70b..a46ffa3257b 100644 --- a/csharp/ql/test/library-tests/csharp9/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp9/PrintAst.expected @@ -878,12 +878,13 @@ Record.cs: # 27| 1: [Parameter] right # 27| 14: [Property] EqualityContract # 27| 3: [Getter] get_EqualityContract -# 27| 15: [InstanceConstructor] Person1 +# 27| 15: [InstanceConstructor,PrimaryConstructor] Person1 #-----| 2: (Parameters) # 27| 0: [Parameter] FirstName # 27| -1: [TypeMention] string # 27| 1: [Parameter] LastName # 27| -1: [TypeMention] string +# 27| 4: [BlockStmt] {...} # 27| 16: [Property] FirstName # 27| 3: [Getter] get_FirstName # 27| 4: [Setter] set_FirstName @@ -905,7 +906,7 @@ Record.cs: # 29| 1: [Parameter] right # 29| 15: [Property] EqualityContract # 29| 3: [Getter] get_EqualityContract -# 29| 16: [InstanceConstructor] Teacher1 +# 29| 16: [InstanceConstructor,PrimaryConstructor] Teacher1 #-----| 2: (Parameters) # 29| 0: [Parameter] FirstName # 29| -1: [TypeMention] string @@ -913,6 +914,10 @@ Record.cs: # 29| -1: [TypeMention] string # 29| 2: [Parameter] Subject # 29| -1: [TypeMention] string +# 30| 3: [ConstructorInitializer] call to constructor Person1 +# 30| 0: [ParameterAccess] access to parameter FirstName +# 30| 1: [ParameterAccess] access to parameter LastName +# 29| 4: [BlockStmt] {...} # 29| 17: [Property] Subject # 29| 3: [Getter] get_Subject # 29| 4: [Setter] set_Subject @@ -929,7 +934,7 @@ Record.cs: # 32| 1: [Parameter] right # 32| 15: [Property] EqualityContract # 32| 3: [Getter] get_EqualityContract -# 32| 16: [InstanceConstructor] Student1 +# 32| 16: [InstanceConstructor,PrimaryConstructor] Student1 #-----| 2: (Parameters) # 32| 0: [Parameter] FirstName # 32| -1: [TypeMention] string @@ -937,6 +942,10 @@ Record.cs: # 32| -1: [TypeMention] string # 32| 2: [Parameter] Level # 32| -1: [TypeMention] int +# 33| 3: [ConstructorInitializer] call to constructor Person1 +# 33| 0: [ParameterAccess] access to parameter FirstName +# 33| 1: [ParameterAccess] access to parameter LastName +# 32| 4: [BlockStmt] {...} # 32| 17: [Property] Level # 32| 3: [Getter] get_Level # 32| 4: [Setter] set_Level @@ -953,10 +962,11 @@ Record.cs: # 35| 1: [Parameter] right # 35| 14: [Property] EqualityContract # 35| 3: [Getter] get_EqualityContract -# 35| 15: [InstanceConstructor] Pet +# 35| 15: [InstanceConstructor,PrimaryConstructor] Pet #-----| 2: (Parameters) # 35| 0: [Parameter] Name # 35| -1: [TypeMention] string +# 35| 4: [BlockStmt] {...} # 35| 16: [Property] Name # 35| 3: [Getter] get_Name # 35| 4: [Setter] set_Name @@ -977,10 +987,13 @@ Record.cs: #-----| 2: (Parameters) # 41| 0: [Parameter] left # 41| 1: [Parameter] right -# 41| 14: [InstanceConstructor] Dog +# 41| 14: [InstanceConstructor,PrimaryConstructor] Dog #-----| 2: (Parameters) # 41| 0: [Parameter] Name # 41| -1: [TypeMention] string +# 41| 3: [ConstructorInitializer] call to constructor Pet +# 41| 0: [ParameterAccess] access to parameter Name +# 41| 4: [BlockStmt] {...} # 41| 15: [Property] EqualityContract # 41| 3: [Getter] get_EqualityContract # 43| 16: [Method] WagTail @@ -1018,10 +1031,11 @@ Record.cs: # 54| 1: [Parameter] right # 54| 14: [Property] EqualityContract # 54| 3: [Getter] get_EqualityContract -# 54| 15: [InstanceConstructor] R1 +# 54| 15: [InstanceConstructor,PrimaryConstructor] R1 #-----| 2: (Parameters) # 54| 0: [Parameter] A # 54| -1: [TypeMention] string +# 54| 4: [BlockStmt] {...} # 54| 16: [Property] A # 54| 3: [Getter] get_A # 54| 4: [Setter] set_A @@ -1038,12 +1052,15 @@ Record.cs: # 56| 1: [Parameter] right # 56| 15: [Property] EqualityContract # 56| 3: [Getter] get_EqualityContract -# 56| 16: [InstanceConstructor] R2 +# 56| 16: [InstanceConstructor,PrimaryConstructor] R2 #-----| 2: (Parameters) # 56| 0: [Parameter] A # 56| -1: [TypeMention] string # 56| 1: [Parameter] B # 56| -1: [TypeMention] string +# 56| 3: [ConstructorInitializer] call to constructor R1 +# 56| 0: [ParameterAccess] access to parameter A +# 56| 4: [BlockStmt] {...} # 56| 17: [Property] B # 56| 3: [Getter] get_B # 56| 4: [Setter] set_B diff --git a/csharp/ql/test/library-tests/dataflow/async/Async.expected b/csharp/ql/test/library-tests/dataflow/async/Async.expected index 4fd0136cda0..ed0395fff0b 100644 --- a/csharp/ql/test/library-tests/dataflow/async/Async.expected +++ b/csharp/ql/test/library-tests/dataflow/async/Async.expected @@ -1,39 +1,39 @@ edges -| Async.cs:9:37:9:41 | input : String | Async.cs:11:21:11:25 | access to parameter input : String | -| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:11:14:11:26 | call to method Return | -| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:14:34:14:34 | x : String | -| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | -| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | -| Async.cs:16:16:16:16 | access to parameter x : String | Async.cs:11:14:11:26 | call to method Return | -| Async.cs:19:41:19:45 | input : String | Async.cs:21:32:21:36 | access to parameter input : String | -| Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | Async.cs:21:14:21:37 | await ... | -| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | -| Async.cs:24:41:24:45 | input : String | Async.cs:26:35:26:39 | access to parameter input : String | -| Async.cs:26:17:26:40 | await ... : String | Async.cs:27:14:27:14 | access to local variable x | -| Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | Async.cs:26:17:26:40 | await ... : String | -| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | -| Async.cs:30:35:30:39 | input : String | Async.cs:32:27:32:31 | access to parameter input : String | -| Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | Async.cs:32:14:32:39 | access to property Result | -| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | -| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:51:52:51:52 | x : String | -| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | -| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | -| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | -| Async.cs:41:33:41:37 | input : String | Async.cs:43:25:43:29 | access to parameter input : String | -| Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | Async.cs:43:14:43:37 | access to property Result | -| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | -| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:46:44:46:44 | x : String | -| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | -| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | -| Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | -| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | -| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | -| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | -| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | -| Async.cs:51:58:51:58 | access to parameter x : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | +| Async.cs:9:37:9:41 | input : String | Async.cs:11:21:11:25 | access to parameter input : String | provenance | | +| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:11:14:11:26 | call to method Return | provenance | | +| Async.cs:11:21:11:25 | access to parameter input : String | Async.cs:14:34:14:34 | x : String | provenance | | +| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | provenance | | +| Async.cs:14:34:14:34 | x : String | Async.cs:16:16:16:16 | access to parameter x : String | provenance | | +| Async.cs:16:16:16:16 | access to parameter x : String | Async.cs:11:14:11:26 | call to method Return | provenance | | +| Async.cs:19:41:19:45 | input : String | Async.cs:21:32:21:36 | access to parameter input : String | provenance | | +| Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | Async.cs:21:14:21:37 | await ... | provenance | | +| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:21:32:21:36 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | provenance | | +| Async.cs:24:41:24:45 | input : String | Async.cs:26:35:26:39 | access to parameter input : String | provenance | | +| Async.cs:26:17:26:40 | await ... : String | Async.cs:27:14:27:14 | access to local variable x | provenance | | +| Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | Async.cs:26:17:26:40 | await ... : String | provenance | | +| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:26:35:26:39 | access to parameter input : String | Async.cs:35:51:35:51 | x : String | provenance | | +| Async.cs:30:35:30:39 | input : String | Async.cs:32:27:32:31 | access to parameter input : String | provenance | | +| Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | Async.cs:32:14:32:39 | access to property Result | provenance | | +| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | provenance | | +| Async.cs:32:27:32:31 | access to parameter input : String | Async.cs:51:52:51:52 | x : String | provenance | | +| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | provenance | | +| Async.cs:35:51:35:51 | x : String | Async.cs:38:16:38:16 | access to parameter x : String | provenance | | +| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:21:20:21:37 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:38:16:38:16 | access to parameter x : String | Async.cs:26:23:26:40 | call to method ReturnAwait : Task [property Result] : String | provenance | | +| Async.cs:41:33:41:37 | input : String | Async.cs:43:25:43:29 | access to parameter input : String | provenance | | +| Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | Async.cs:43:14:43:37 | access to property Result | provenance | | +| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | provenance | | +| Async.cs:43:25:43:29 | access to parameter input : String | Async.cs:46:44:46:44 | x : String | provenance | | +| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | provenance | | +| Async.cs:46:44:46:44 | x : String | Async.cs:48:32:48:32 | access to parameter x : String | provenance | | +| Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | Async.cs:43:14:43:30 | call to method ReturnTask : Task [property Result] : String | provenance | | +| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | provenance | | +| Async.cs:48:32:48:32 | access to parameter x : String | Async.cs:48:16:48:33 | call to method FromResult : Task [property Result] : String | provenance | | +| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | provenance | | +| Async.cs:51:52:51:52 | x : String | Async.cs:51:58:51:58 | access to parameter x : String | provenance | | +| Async.cs:51:58:51:58 | access to parameter x : String | Async.cs:32:14:32:32 | call to method ReturnAwait2 : Task [property Result] : String | provenance | | nodes | Async.cs:9:37:9:41 | input : String | semmle.label | input : String | | Async.cs:11:14:11:26 | call to method Return | semmle.label | call to method Return | diff --git a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected index c7cc4c5f45f..daf679b629a 100644 --- a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected @@ -1,46 +1,46 @@ edges -| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | -| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | -| CallSensitivityFlow.cs:19:39:19:39 | o : Object | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | -| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | -| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | -| CallSensitivityFlow.cs:35:41:35:41 | o : Object | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | -| CallSensitivityFlow.cs:43:45:43:45 | o : Object | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | -| CallSensitivityFlow.cs:78:24:78:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | -| CallSensitivityFlow.cs:79:25:79:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | -| CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | -| CallSensitivityFlow.cs:81:30:81:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | -| CallSensitivityFlow.cs:82:31:82:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:83:31:83:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:84:31:84:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | -| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:85:14:85:44 | call to method FlowThrough | -| CallSensitivityFlow.cs:87:31:87:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | -| CallSensitivityFlow.cs:101:24:101:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | -| CallSensitivityFlow.cs:102:25:102:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | -| CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | -| CallSensitivityFlow.cs:104:30:104:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | -| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | -| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | -| CallSensitivityFlow.cs:117:26:117:37 | object creation of type Object : Object | CallSensitivityFlow.cs:124:43:124:43 | o : Object | -| CallSensitivityFlow.cs:118:27:118:38 | object creation of type Object : Object | CallSensitivityFlow.cs:132:44:132:44 | o : Object | -| CallSensitivityFlow.cs:119:32:119:43 | object creation of type Object : Object | CallSensitivityFlow.cs:140:49:140:49 | o : Object | -| CallSensitivityFlow.cs:124:43:124:43 | o : Object | CallSensitivityFlow.cs:128:22:128:22 | access to parameter o | -| CallSensitivityFlow.cs:132:44:132:44 | o : Object | CallSensitivityFlow.cs:136:22:136:22 | access to parameter o | -| CallSensitivityFlow.cs:140:49:140:49 | o : Object | CallSensitivityFlow.cs:150:18:150:19 | access to local variable o3 | -| CallSensitivityFlow.cs:162:34:162:34 | o : Object | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | -| CallSensitivityFlow.cs:167:44:167:44 | o : Object | CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | -| CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | CallSensitivityFlow.cs:162:34:162:34 | o : Object | -| CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | -| CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | -| CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:205:40:205:40 | o : Object | -| CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:167:44:167:44 | o : Object | -| CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | -| CallSensitivityFlow.cs:205:40:205:40 | o : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | +| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:19:39:19:39 | o : Object | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:35:41:35:41 | o : Object | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | provenance | | +| CallSensitivityFlow.cs:43:45:43:45 | o : Object | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:56:46:56:46 | o : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:78:24:78:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | provenance | | +| CallSensitivityFlow.cs:79:25:79:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | provenance | | +| CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | provenance | | +| CallSensitivityFlow.cs:81:30:81:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | provenance | | +| CallSensitivityFlow.cs:82:31:82:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:83:31:83:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:84:31:84:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | provenance | | +| CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:85:14:85:44 | call to method FlowThrough | provenance | | +| CallSensitivityFlow.cs:87:31:87:42 | object creation of type Object : Object | CallSensitivityFlow.cs:56:46:56:46 | o : Object | provenance | | +| CallSensitivityFlow.cs:101:24:101:35 | object creation of type Object : Object | CallSensitivityFlow.cs:19:39:19:39 | o : Object | provenance | | +| CallSensitivityFlow.cs:102:25:102:36 | object creation of type Object : Object | CallSensitivityFlow.cs:27:40:27:40 | o : Object | provenance | | +| CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:35:41:35:41 | o : Object | provenance | | +| CallSensitivityFlow.cs:104:30:104:41 | object creation of type Object : Object | CallSensitivityFlow.cs:43:45:43:45 | o : Object | provenance | | +| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | provenance | | +| CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | provenance | | +| CallSensitivityFlow.cs:117:26:117:37 | object creation of type Object : Object | CallSensitivityFlow.cs:124:43:124:43 | o : Object | provenance | | +| CallSensitivityFlow.cs:118:27:118:38 | object creation of type Object : Object | CallSensitivityFlow.cs:132:44:132:44 | o : Object | provenance | | +| CallSensitivityFlow.cs:119:32:119:43 | object creation of type Object : Object | CallSensitivityFlow.cs:140:49:140:49 | o : Object | provenance | | +| CallSensitivityFlow.cs:124:43:124:43 | o : Object | CallSensitivityFlow.cs:128:22:128:22 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:132:44:132:44 | o : Object | CallSensitivityFlow.cs:136:22:136:22 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:140:49:140:49 | o : Object | CallSensitivityFlow.cs:150:18:150:19 | access to local variable o3 | provenance | | +| CallSensitivityFlow.cs:162:34:162:34 | o : Object | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:167:44:167:44 | o : Object | CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:169:14:169:14 | access to parameter o : Object | CallSensitivityFlow.cs:162:34:162:34 | o : Object | provenance | | +| CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | provenance | | +| CallSensitivityFlow.cs:174:45:174:53 | call to method MOut : Object | CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | provenance | | +| CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:205:40:205:40 | o : Object | provenance | | +| CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:167:44:167:44 | o : Object | provenance | | +| CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | provenance | | +| CallSensitivityFlow.cs:205:40:205:40 | o : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | provenance | | nodes | CallSensitivityFlow.cs:7:38:7:38 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:7:38:7:38 | o : Object | semmle.label | o : Object | diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs index 95ab917468c..bee481a8cc9 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.cs @@ -481,4 +481,40 @@ public class CollectionFlow IntegerCollection ic1 = [.. ic0]; Sink(ic1.Payload); // No flow } + + public void SpanConstructorFlow() + { + var a = new A(); + Span span = new Span(ref a); + Sink(span[0]); // flow + } + + public void SpanToArrayFlow() + { + var a = new A(); + Span span = new Span(ref a); + var arr = span.ToArray(); + Sink(arr[0]); // flow + } + + public void SpanFillFlow(Span target) + { + var a = new A(); + target.Fill(a); + Sink(target[0]); // flow + } + + public void SpanCopyToFlow(Span target) + { + var source = new Span(new[] { new A() }); + source.CopyTo(target); + Sink(target[0]); // flow + } + + public void ReadOnlySpanConstructorFlow() + { + var a = new A(); + ReadOnlySpan span = new ReadOnlySpan(new[] { a }); + Sink(span[0]); // flow + } } diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected index eca1796dbdc..2aadd5b0bbf 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected @@ -1,251 +1,278 @@ edges -| CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | -| CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | -| CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | -| CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | -| CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:81 | access to indexer | -| CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:20:73:20:89 | call to method First | -| CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | -| CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | -| CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | -| CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | -| CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | -| CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | -| CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | -| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | -| CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | -| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | -| CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | -| CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | -| CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | -| CollectionFlow.cs:36:49:36:52 | args : null [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | -| CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | -| CollectionFlow.cs:40:17:40:23 | object creation of type A : A | CollectionFlow.cs:41:27:41:27 | access to local variable a : A | -| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | -| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | -| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | -| CollectionFlow.cs:41:27:41:27 | access to local variable a : A | CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | CollectionFlow.cs:42:14:42:19 | access to array element | -| CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | -| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | -| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:44:14:44:23 | call to method First | -| CollectionFlow.cs:58:17:58:23 | object creation of type A : A | CollectionFlow.cs:59:53:59:53 | access to local variable a : A | -| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | -| CollectionFlow.cs:59:53:59:53 | access to local variable a : A | CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | -| CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | -| CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | CollectionFlow.cs:60:14:60:20 | access to array element | -| CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | -| CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | -| CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | -| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | -| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:62:14:62:24 | call to method First | -| CollectionFlow.cs:76:17:76:23 | object creation of type A : A | CollectionFlow.cs:78:18:78:18 | access to local variable a : A | -| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:78:18:78:18 | access to local variable a : A | CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | -| CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:19 | access to array element | -| CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | -| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | -| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:81:14:81:23 | call to method First | -| CollectionFlow.cs:96:17:96:23 | object creation of type A : A | CollectionFlow.cs:98:19:98:19 | access to local variable a : A | -| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | -| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | -| CollectionFlow.cs:98:19:98:19 | access to local variable a : A | CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:20 | access to indexer | -| CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | -| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | -| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:101:14:101:28 | call to method ListFirst | -| CollectionFlow.cs:115:17:115:23 | object creation of type A : A | CollectionFlow.cs:116:36:116:36 | access to local variable a : A | -| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | -| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | -| CollectionFlow.cs:116:36:116:36 | access to local variable a : A | CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | -| CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | CollectionFlow.cs:117:14:117:20 | access to indexer | -| CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | -| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | -| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:119:14:119:28 | call to method ListFirst | -| CollectionFlow.cs:132:17:132:23 | object creation of type A : A | CollectionFlow.cs:134:18:134:18 | access to local variable a : A | -| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | -| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | -| CollectionFlow.cs:134:18:134:18 | access to local variable a : A | CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:20 | access to indexer | -| CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | -| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | -| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:137:14:137:28 | call to method ListFirst | -| CollectionFlow.cs:151:17:151:23 | object creation of type A : A | CollectionFlow.cs:153:19:153:19 | access to local variable a : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:153:19:153:19 | access to local variable a : A | CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:20 | access to indexer | -| CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:14:156:32 | call to method DictIndexZero | -| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:14:157:33 | call to method DictFirstValue | -| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst | -| CollectionFlow.cs:174:17:174:23 | object creation of type A : A | CollectionFlow.cs:175:52:175:52 | access to local variable a : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:175:52:175:52 | access to local variable a : A | CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | -| CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:20 | access to indexer | -| CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:178:14:178:32 | call to method DictIndexZero | -| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:179:14:179:33 | call to method DictFirstValue | -| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst | -| CollectionFlow.cs:195:17:195:23 | object creation of type A : A | CollectionFlow.cs:196:53:196:53 | access to local variable a : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:196:53:196:53 | access to local variable a : A | CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | -| CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:20 | access to indexer | -| CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:199:14:199:32 | call to method DictIndexZero | -| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:200:14:200:33 | call to method DictFirstValue | -| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | -| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst | -| CollectionFlow.cs:217:17:217:23 | object creation of type A : A | CollectionFlow.cs:218:49:218:49 | access to local variable a : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:218:49:218:49 | access to local variable a : A | CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | -| CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | -| CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:219:14:219:30 | call to method First | -| CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst | -| CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:222:14:222:31 | call to method DictFirstKey | -| CollectionFlow.cs:236:17:236:23 | object creation of type A : A | CollectionFlow.cs:237:48:237:48 | access to local variable a : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:237:48:237:48 | access to local variable a : A | CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | -| CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | -| CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:238:14:238:30 | call to method First | -| CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst | -| CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | -| CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:241:14:241:31 | call to method DictFirstKey | -| CollectionFlow.cs:255:17:255:23 | object creation of type A : A | CollectionFlow.cs:256:27:256:27 | access to local variable a : A | -| CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | -| CollectionFlow.cs:256:27:256:27 | access to local variable a : A | CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | CollectionFlow.cs:258:18:258:18 | access to local variable x | -| CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | -| CollectionFlow.cs:270:17:270:23 | object creation of type A : A | CollectionFlow.cs:271:27:271:27 | access to local variable a : A | -| CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | -| CollectionFlow.cs:271:27:271:27 | access to local variable a : A | CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | -| CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | -| CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:35 | access to property Current | -| CollectionFlow.cs:287:17:287:23 | object creation of type A : A | CollectionFlow.cs:289:18:289:18 | access to local variable a : A | -| CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | -| CollectionFlow.cs:289:18:289:18 | access to local variable a : A | CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | -| CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:35 | access to property Current | -| CollectionFlow.cs:306:17:306:23 | object creation of type A : A | CollectionFlow.cs:308:43:308:43 | access to local variable a : A | -| CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | -| CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | -| CollectionFlow.cs:308:43:308:43 | access to local variable a : A | CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | -| CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | -| CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | -| CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:311:18:311:24 | access to property Key | -| CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:55:328:61 | access to parameter element : A | -| CollectionFlow.cs:328:55:328:61 | access to parameter element : A | CollectionFlow.cs:328:44:328:48 | [post] access to parameter array : A[] [element] : A | -| CollectionFlow.cs:332:17:332:23 | object creation of type A : A | CollectionFlow.cs:334:23:334:23 | access to local variable a : A | -| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | -| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | -| CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:19 | access to array element | -| CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | -| CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | -| CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:337:14:337:23 | call to method First | -| CollectionFlow.cs:350:34:350:40 | element : A | CollectionFlow.cs:350:55:350:61 | access to parameter element : A | -| CollectionFlow.cs:350:55:350:61 | access to parameter element : A | CollectionFlow.cs:350:46:350:49 | [post] access to parameter list : List [element] : A | -| CollectionFlow.cs:354:17:354:23 | object creation of type A : A | CollectionFlow.cs:356:23:356:23 | access to local variable a : A | -| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | -| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:358:22:358:25 | access to local variable list : List [element] : A | -| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | -| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:350:34:350:40 | element : A | -| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | -| CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:20 | access to indexer | -| CollectionFlow.cs:358:22:358:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | -| CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | -| CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:359:14:359:28 | call to method ListFirst | -| CollectionFlow.cs:373:20:373:26 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | -| CollectionFlow.cs:374:26:374:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | -| CollectionFlow.cs:375:26:375:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | -| CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | CollectionFlow.cs:36:49:36:52 | args : null [element] : A | -| CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | -| CollectionFlow.cs:376:30:376:36 | object creation of type A : A | CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | -| CollectionFlow.cs:406:17:406:23 | object creation of type A : A | CollectionFlow.cs:408:20:408:20 | access to local variable a : A | -| CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | -| CollectionFlow.cs:408:20:408:20 | access to local variable a : A | CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | -| CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:21 | access to array element | -| CollectionFlow.cs:427:17:427:23 | object creation of type A : A | CollectionFlow.cs:428:22:428:22 | access to local variable a : A | -| CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:428:22:428:22 | access to local variable a : A | CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | -| CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:429:14:429:21 | access to array element | -| CollectionFlow.cs:434:17:434:23 | object creation of type A : A | CollectionFlow.cs:435:22:435:22 | access to local variable a : A | -| CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | -| CollectionFlow.cs:435:22:435:22 | access to local variable a : A | CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | -| CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | CollectionFlow.cs:436:14:436:17 | access to indexer | -| CollectionFlow.cs:447:17:447:23 | object creation of type A : A | CollectionFlow.cs:448:21:448:21 | access to local variable a : A | -| CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | -| CollectionFlow.cs:448:21:448:21 | access to local variable a : A | CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | -| CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | -| CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:450:14:450:21 | access to array element | +| CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | provenance | | +| CollectionFlow.cs:14:52:14:53 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | +| CollectionFlow.cs:14:52:14:53 | access to parameter ts : null [element] : A | CollectionFlow.cs:14:52:14:56 | access to array element | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:49:16:52 | list : List [element] : A | CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:16:63:16:66 | access to parameter list : List [element] : A | CollectionFlow.cs:16:63:16:69 | access to indexer | provenance | | +| CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:18:75:18:78 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:75:18:81 | access to indexer | provenance | | +| CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:20:73:20:76 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | provenance | | +| CollectionFlow.cs:20:73:20:81 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:20:73:20:89 | call to method First | provenance | | +| CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | provenance | | +| CollectionFlow.cs:22:41:22:42 | access to parameter ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | +| CollectionFlow.cs:22:41:22:42 | access to parameter ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:24:52:24:55 | access to parameter list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | provenance | | +| CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:26:67:26:70 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:67:26:73 | access to indexer : A | provenance | | +| CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:28:68:28:71 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | provenance | | +| CollectionFlow.cs:28:68:28:79 | call to method First> : KeyValuePair [property Value] : A | CollectionFlow.cs:28:68:28:85 | access to property Value : A | provenance | | +| CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:30:69:30:72 | access to parameter dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | provenance | | +| CollectionFlow.cs:30:69:30:79 | access to property Values : ICollection [element] : A | CollectionFlow.cs:30:69:30:87 | call to method First : A | provenance | | +| CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:32:67:32:70 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | provenance | | +| CollectionFlow.cs:32:67:32:75 | access to property Keys : ICollection [element] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | provenance | | +| CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:34:66:34:69 | access to parameter dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | provenance | | +| CollectionFlow.cs:34:66:34:77 | call to method First> : KeyValuePair [property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | provenance | | +| CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | provenance | | +| CollectionFlow.cs:36:49:36:52 | args : null [element] : A | CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | provenance | | +| CollectionFlow.cs:36:63:36:66 | access to parameter args : A[] [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | provenance | | +| CollectionFlow.cs:36:63:36:66 | access to parameter args : null [element] : A | CollectionFlow.cs:36:63:36:69 | access to array element | provenance | | +| CollectionFlow.cs:40:17:40:23 | object creation of type A : A | CollectionFlow.cs:41:27:41:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:41:27:41:27 | access to local variable a : A | CollectionFlow.cs:41:25:41:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:42:14:42:16 | access to local variable as : null [element] : A | CollectionFlow.cs:42:14:42:19 | access to array element | provenance | | +| CollectionFlow.cs:43:18:43:20 | access to local variable as : null [element] : A | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | provenance | | +| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | provenance | | +| CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:44:14:44:23 | call to method First | provenance | | +| CollectionFlow.cs:58:17:58:23 | object creation of type A : A | CollectionFlow.cs:59:53:59:53 | access to local variable a : A | provenance | | +| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | CollectionFlow.cs:59:38:59:57 | { ..., ... } : CollectionFlow [field As, element] : A | provenance | | +| CollectionFlow.cs:59:53:59:53 | access to local variable a : A | CollectionFlow.cs:59:45:59:55 | { ..., ... } : A[] [element] : A | provenance | | +| CollectionFlow.cs:60:14:60:14 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:60:14:60:17 | access to field As : A[] [element] : A | CollectionFlow.cs:60:14:60:20 | access to array element | provenance | | +| CollectionFlow.cs:61:18:61:18 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:61:18:61:21 | access to field As : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:62:20:62:20 | access to local variable c : CollectionFlow [field As, element] : A | CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | provenance | | +| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:62:14:62:24 | call to method First | provenance | | +| CollectionFlow.cs:76:17:76:23 | object creation of type A : A | CollectionFlow.cs:78:18:78:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:78:18:78:18 | access to local variable a : A | CollectionFlow.cs:78:9:78:11 | [post] access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:79:14:79:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:79:14:79:19 | access to array element | provenance | | +| CollectionFlow.cs:80:18:80:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:81:20:81:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:81:14:81:23 | call to method First | provenance | | +| CollectionFlow.cs:96:17:96:23 | object creation of type A : A | CollectionFlow.cs:98:19:98:19 | access to local variable a : A | provenance | | +| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:98:19:98:19 | access to local variable a : A | CollectionFlow.cs:98:9:98:12 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:99:14:99:17 | access to local variable list : List [element] : A | CollectionFlow.cs:99:14:99:20 | access to indexer | provenance | | +| CollectionFlow.cs:100:22:100:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:101:24:101:27 | access to local variable list : List [element] : A | CollectionFlow.cs:101:14:101:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:115:17:115:23 | object creation of type A : A | CollectionFlow.cs:116:36:116:36 | access to local variable a : A | provenance | | +| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:116:36:116:36 | access to local variable a : A | CollectionFlow.cs:116:20:116:38 | object creation of type List : List [element] : A | provenance | | +| CollectionFlow.cs:117:14:117:17 | access to local variable list : List [element] : A | CollectionFlow.cs:117:14:117:20 | access to indexer | provenance | | +| CollectionFlow.cs:118:22:118:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:119:24:119:27 | access to local variable list : List [element] : A | CollectionFlow.cs:119:14:119:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:132:17:132:23 | object creation of type A : A | CollectionFlow.cs:134:18:134:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:134:18:134:18 | access to local variable a : A | CollectionFlow.cs:134:9:134:12 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:135:14:135:17 | access to local variable list : List [element] : A | CollectionFlow.cs:135:14:135:20 | access to indexer | provenance | | +| CollectionFlow.cs:136:22:136:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:137:24:137:27 | access to local variable list : List [element] : A | CollectionFlow.cs:137:14:137:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:151:17:151:23 | object creation of type A : A | CollectionFlow.cs:153:19:153:19 | access to local variable a : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:153:19:153:19 | access to local variable a : A | CollectionFlow.cs:153:9:153:12 | [post] access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:154:14:154:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:154:14:154:20 | access to indexer | provenance | | +| CollectionFlow.cs:155:23:155:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:156:28:156:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:156:14:156:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:157:29:157:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:157:14:157:33 | call to method DictFirstValue | provenance | | +| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:158:30:158:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:158:14:158:34 | call to method DictValuesFirst | provenance | | +| CollectionFlow.cs:174:17:174:23 | object creation of type A : A | CollectionFlow.cs:175:52:175:52 | access to local variable a : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:175:52:175:52 | access to local variable a : A | CollectionFlow.cs:175:20:175:56 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:176:14:176:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:176:14:176:20 | access to indexer | provenance | | +| CollectionFlow.cs:177:23:177:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:178:28:178:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:178:14:178:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:179:29:179:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:179:14:179:33 | call to method DictFirstValue | provenance | | +| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:180:30:180:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:180:14:180:34 | call to method DictValuesFirst | provenance | | +| CollectionFlow.cs:195:17:195:23 | object creation of type A : A | CollectionFlow.cs:196:53:196:53 | access to local variable a : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:196:53:196:53 | access to local variable a : A | CollectionFlow.cs:196:20:196:55 | object creation of type Dictionary : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:197:14:197:17 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:197:14:197:20 | access to indexer | provenance | | +| CollectionFlow.cs:198:23:198:26 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:18:61:18:64 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:26:58:26:61 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:199:28:199:31 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:199:14:199:32 | call to method DictIndexZero | provenance | | +| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:28:59:28:62 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:200:29:200:32 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:200:14:200:33 | call to method DictFirstValue | provenance | | +| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:30:60:30:63 | dict : Dictionary [element, property Value] : A | provenance | | +| CollectionFlow.cs:201:30:201:33 | access to local variable dict : Dictionary [element, property Value] : A | CollectionFlow.cs:201:14:201:34 | call to method DictValuesFirst | provenance | | +| CollectionFlow.cs:217:17:217:23 | object creation of type A : A | CollectionFlow.cs:218:49:218:49 | access to local variable a : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:218:49:218:49 | access to local variable a : A | CollectionFlow.cs:218:20:218:56 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:219:14:219:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | | +| CollectionFlow.cs:219:14:219:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:219:14:219:30 | call to method First | provenance | | +| CollectionFlow.cs:220:21:220:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:221:28:221:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:221:14:221:32 | call to method DictKeysFirst | provenance | | +| CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:222:14:222:31 | call to method DictFirstKey | provenance | | +| CollectionFlow.cs:236:17:236:23 | object creation of type A : A | CollectionFlow.cs:237:48:237:48 | access to local variable a : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:237:48:237:48 | access to local variable a : A | CollectionFlow.cs:237:20:237:55 | object creation of type Dictionary : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:238:14:238:17 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | provenance | | +| CollectionFlow.cs:238:14:238:22 | access to property Keys : Dictionary.KeyCollection [element] : A | CollectionFlow.cs:238:14:238:30 | call to method First | provenance | | +| CollectionFlow.cs:239:21:239:24 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:20:59:20:62 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst | provenance | | +| CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | provenance | | +| CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:241:14:241:31 | call to method DictFirstKey | provenance | | +| CollectionFlow.cs:255:17:255:23 | object creation of type A : A | CollectionFlow.cs:256:27:256:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:256:27:256:27 | access to local variable a : A | CollectionFlow.cs:256:25:256:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | CollectionFlow.cs:258:18:258:18 | access to local variable x | provenance | | +| CollectionFlow.cs:257:27:257:29 | access to local variable as : null [element] : A | CollectionFlow.cs:257:22:257:22 | SSA def(x) : A | provenance | | +| CollectionFlow.cs:270:17:270:23 | object creation of type A : A | CollectionFlow.cs:271:27:271:27 | access to local variable a : A | provenance | | +| CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | provenance | | +| CollectionFlow.cs:271:27:271:27 | access to local variable a : A | CollectionFlow.cs:271:25:271:29 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:272:26:272:28 | access to local variable as : null [element] : A | CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | provenance | | +| CollectionFlow.cs:272:26:272:44 | call to method GetEnumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | provenance | | +| CollectionFlow.cs:274:18:274:27 | access to local variable enumerator : IEnumerator [property Current] : A | CollectionFlow.cs:274:18:274:35 | access to property Current | provenance | | +| CollectionFlow.cs:287:17:287:23 | object creation of type A : A | CollectionFlow.cs:289:18:289:18 | access to local variable a : A | provenance | | +| CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:289:18:289:18 | access to local variable a : A | CollectionFlow.cs:289:9:289:12 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:290:26:290:29 | access to local variable list : List [element] : A | CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:290:26:290:45 | call to method GetEnumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | provenance | | +| CollectionFlow.cs:292:18:292:27 | access to local variable enumerator : List.Enumerator [property Current] : A | CollectionFlow.cs:292:18:292:35 | access to property Current | provenance | | +| CollectionFlow.cs:306:17:306:23 | object creation of type A : A | CollectionFlow.cs:308:43:308:43 | access to local variable a : A | provenance | | +| CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | provenance | | +| CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | CollectionFlow.cs:308:9:308:12 | [post] access to local variable list : List [element, property Key] : A | provenance | | +| CollectionFlow.cs:308:43:308:43 | access to local variable a : A | CollectionFlow.cs:308:18:308:47 | object creation of type KeyValuePair : KeyValuePair [property Key] : A | provenance | | +| CollectionFlow.cs:309:9:309:12 | access to local variable list : List [element, property Key] : A | CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | provenance | | +| CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | provenance | | +| CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:311:18:311:24 | access to property Key | provenance | | +| CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:55:328:61 | access to parameter element : A | provenance | | +| CollectionFlow.cs:328:55:328:61 | access to parameter element : A | CollectionFlow.cs:328:44:328:48 | [post] access to parameter array : A[] [element] : A | provenance | | +| CollectionFlow.cs:332:17:332:23 | object creation of type A : A | CollectionFlow.cs:334:23:334:23 | access to local variable a : A | provenance | | +| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | provenance | | +| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | provenance | | +| CollectionFlow.cs:335:14:335:16 | access to local variable as : A[] [element] : A | CollectionFlow.cs:335:14:335:19 | access to array element | provenance | | +| CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | +| CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:337:14:337:23 | call to method First | provenance | | +| CollectionFlow.cs:350:34:350:40 | element : A | CollectionFlow.cs:350:55:350:61 | access to parameter element : A | provenance | | +| CollectionFlow.cs:350:55:350:61 | access to parameter element : A | CollectionFlow.cs:350:46:350:49 | [post] access to parameter list : List [element] : A | provenance | | +| CollectionFlow.cs:354:17:354:23 | object creation of type A : A | CollectionFlow.cs:356:23:356:23 | access to local variable a : A | provenance | | +| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:358:22:358:25 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:350:34:350:40 | element : A | provenance | | +| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | provenance | | +| CollectionFlow.cs:357:14:357:17 | access to local variable list : List [element] : A | CollectionFlow.cs:357:14:357:20 | access to indexer | provenance | | +| CollectionFlow.cs:358:22:358:25 | access to local variable list : List [element] : A | CollectionFlow.cs:16:49:16:52 | list : List [element] : A | provenance | | +| CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | provenance | | +| CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:359:14:359:28 | call to method ListFirst | provenance | | +| CollectionFlow.cs:373:20:373:26 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:374:26:374:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:375:26:375:32 | object creation of type A : A | CollectionFlow.cs:36:49:36:52 | args : A[] [element] : A | provenance | | +| CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | CollectionFlow.cs:36:49:36:52 | args : null [element] : A | provenance | | +| CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | CollectionFlow.cs:376:20:376:38 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:376:30:376:36 | object creation of type A : A | CollectionFlow.cs:376:28:376:38 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:406:17:406:23 | object creation of type A : A | CollectionFlow.cs:408:20:408:20 | access to local variable a : A | provenance | | +| CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | provenance | | +| CollectionFlow.cs:408:20:408:20 | access to local variable a : A | CollectionFlow.cs:408:9:408:13 | [post] access to local variable array : MyInlineArray [element] : A | provenance | | +| CollectionFlow.cs:409:14:409:18 | access to local variable array : MyInlineArray [element] : A | CollectionFlow.cs:409:14:409:21 | access to array element | provenance | | +| CollectionFlow.cs:427:17:427:23 | object creation of type A : A | CollectionFlow.cs:428:22:428:22 | access to local variable a : A | provenance | | +| CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:428:22:428:22 | access to local variable a : A | CollectionFlow.cs:428:21:428:23 | [...] : A[] [element] : A | provenance | | +| CollectionFlow.cs:429:14:429:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:429:14:429:21 | access to array element | provenance | | +| CollectionFlow.cs:434:17:434:23 | object creation of type A : A | CollectionFlow.cs:435:22:435:22 | access to local variable a : A | provenance | | +| CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | provenance | | +| CollectionFlow.cs:435:22:435:22 | access to local variable a : A | CollectionFlow.cs:435:21:435:23 | [...] : List [element] : A | provenance | | +| CollectionFlow.cs:436:14:436:14 | access to local variable l : List [element] : A | CollectionFlow.cs:436:14:436:17 | access to indexer | provenance | | +| CollectionFlow.cs:447:17:447:23 | object creation of type A : A | CollectionFlow.cs:448:21:448:21 | access to local variable a : A | provenance | | +| CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | provenance | | +| CollectionFlow.cs:448:21:448:21 | access to local variable a : A | CollectionFlow.cs:448:20:448:22 | [...] : A[] [element] : A | provenance | | +| CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | provenance | | +| CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | CollectionFlow.cs:450:14:450:21 | access to array element | provenance | | +| CollectionFlow.cs:487:17:487:23 | object creation of type A : A | CollectionFlow.cs:488:40:488:40 | access to local variable a : A | provenance | | +| CollectionFlow.cs:488:24:488:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:489:14:489:17 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:488:40:488:40 | access to local variable a : A | CollectionFlow.cs:488:24:488:41 | object creation of type Span : Span [element] : A | provenance | | +| CollectionFlow.cs:489:14:489:17 | access to local variable span : Span [element] : A | CollectionFlow.cs:489:14:489:20 | access to indexer | provenance | | +| CollectionFlow.cs:494:17:494:23 | object creation of type A : A | CollectionFlow.cs:495:40:495:40 | access to local variable a : A | provenance | | +| CollectionFlow.cs:495:24:495:41 | object creation of type Span : Span [element] : A | CollectionFlow.cs:496:19:496:22 | access to local variable span : Span [element] : A | provenance | | +| CollectionFlow.cs:495:40:495:40 | access to local variable a : A | CollectionFlow.cs:495:24:495:41 | object creation of type Span : Span [element] : A | provenance | | +| CollectionFlow.cs:496:19:496:22 | access to local variable span : Span [element] : A | CollectionFlow.cs:496:19:496:32 | call to method ToArray : T[] [element] : A | provenance | | +| CollectionFlow.cs:496:19:496:32 | call to method ToArray : T[] [element] : A | CollectionFlow.cs:497:14:497:16 | access to local variable arr : T[] [element] : A | provenance | | +| CollectionFlow.cs:497:14:497:16 | access to local variable arr : T[] [element] : A | CollectionFlow.cs:497:14:497:19 | access to array element | provenance | | +| CollectionFlow.cs:502:17:502:23 | object creation of type A : A | CollectionFlow.cs:503:21:503:21 | access to local variable a : A | provenance | | +| CollectionFlow.cs:503:9:503:14 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:504:14:504:19 | access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:503:21:503:21 | access to local variable a : A | CollectionFlow.cs:503:9:503:14 | [post] access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:504:14:504:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:504:14:504:22 | access to indexer | provenance | | +| CollectionFlow.cs:509:22:509:51 | object creation of type Span : Span [element] : A | CollectionFlow.cs:510:9:510:14 | access to local variable source : Span [element] : A | provenance | | +| CollectionFlow.cs:509:34:509:50 | array creation of type A[] : null [element] : A | CollectionFlow.cs:509:22:509:51 | object creation of type Span : Span [element] : A | provenance | | +| CollectionFlow.cs:509:40:509:50 | { ..., ... } : null [element] : A | CollectionFlow.cs:509:34:509:50 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:509:42:509:48 | object creation of type A : A | CollectionFlow.cs:509:40:509:50 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:510:9:510:14 | access to local variable source : Span [element] : A | CollectionFlow.cs:510:23:510:28 | [post] access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:510:23:510:28 | [post] access to parameter target : Span [element] : A | CollectionFlow.cs:511:14:511:19 | access to parameter target : Span [element] : A | provenance | | +| CollectionFlow.cs:511:14:511:19 | access to parameter target : Span [element] : A | CollectionFlow.cs:511:14:511:22 | access to indexer | provenance | | +| CollectionFlow.cs:516:17:516:23 | object creation of type A : A | CollectionFlow.cs:517:60:517:60 | access to local variable a : A | provenance | | +| CollectionFlow.cs:517:32:517:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | CollectionFlow.cs:518:14:518:17 | access to local variable span : ReadOnlySpan [element] : A | provenance | | +| CollectionFlow.cs:517:52:517:62 | array creation of type A[] : null [element] : A | CollectionFlow.cs:517:32:517:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | provenance | | +| CollectionFlow.cs:517:58:517:62 | { ..., ... } : null [element] : A | CollectionFlow.cs:517:52:517:62 | array creation of type A[] : null [element] : A | provenance | | +| CollectionFlow.cs:517:60:517:60 | access to local variable a : A | CollectionFlow.cs:517:58:517:62 | { ..., ... } : null [element] : A | provenance | | +| CollectionFlow.cs:518:14:518:17 | access to local variable span : ReadOnlySpan [element] : A | CollectionFlow.cs:518:14:518:20 | access to indexer | provenance | | nodes | CollectionFlow.cs:14:40:14:41 | ts : A[] [element] : A | semmle.label | ts : A[] [element] : A | | CollectionFlow.cs:14:40:14:41 | ts : null [element] : A | semmle.label | ts : null [element] : A | @@ -497,6 +524,38 @@ nodes | CollectionFlow.cs:449:22:449:28 | .. access to local variable temp : A[] [element] : A | semmle.label | .. access to local variable temp : A[] [element] : A | | CollectionFlow.cs:450:14:450:18 | access to local variable array : A[] [element] : A | semmle.label | access to local variable array : A[] [element] : A | | CollectionFlow.cs:450:14:450:21 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:487:17:487:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:488:24:488:41 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | +| CollectionFlow.cs:488:40:488:40 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:489:14:489:17 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | +| CollectionFlow.cs:489:14:489:20 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:494:17:494:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:495:24:495:41 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | +| CollectionFlow.cs:495:40:495:40 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:496:19:496:22 | access to local variable span : Span [element] : A | semmle.label | access to local variable span : Span [element] : A | +| CollectionFlow.cs:496:19:496:32 | call to method ToArray : T[] [element] : A | semmle.label | call to method ToArray : T[] [element] : A | +| CollectionFlow.cs:497:14:497:16 | access to local variable arr : T[] [element] : A | semmle.label | access to local variable arr : T[] [element] : A | +| CollectionFlow.cs:497:14:497:19 | access to array element | semmle.label | access to array element | +| CollectionFlow.cs:502:17:502:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:503:9:503:14 | [post] access to parameter target : Span [element] : A | semmle.label | [post] access to parameter target : Span [element] : A | +| CollectionFlow.cs:503:21:503:21 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:504:14:504:19 | access to parameter target : Span [element] : A | semmle.label | access to parameter target : Span [element] : A | +| CollectionFlow.cs:504:14:504:22 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:509:22:509:51 | object creation of type Span : Span [element] : A | semmle.label | object creation of type Span : Span [element] : A | +| CollectionFlow.cs:509:34:509:50 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | +| CollectionFlow.cs:509:40:509:50 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:509:42:509:48 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:510:9:510:14 | access to local variable source : Span [element] : A | semmle.label | access to local variable source : Span [element] : A | +| CollectionFlow.cs:510:23:510:28 | [post] access to parameter target : Span [element] : A | semmle.label | [post] access to parameter target : Span [element] : A | +| CollectionFlow.cs:511:14:511:19 | access to parameter target : Span [element] : A | semmle.label | access to parameter target : Span [element] : A | +| CollectionFlow.cs:511:14:511:22 | access to indexer | semmle.label | access to indexer | +| CollectionFlow.cs:516:17:516:23 | object creation of type A : A | semmle.label | object creation of type A : A | +| CollectionFlow.cs:517:32:517:63 | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | semmle.label | object creation of type ReadOnlySpan : ReadOnlySpan [element] : A | +| CollectionFlow.cs:517:52:517:62 | array creation of type A[] : null [element] : A | semmle.label | array creation of type A[] : null [element] : A | +| CollectionFlow.cs:517:58:517:62 | { ..., ... } : null [element] : A | semmle.label | { ..., ... } : null [element] : A | +| CollectionFlow.cs:517:60:517:60 | access to local variable a : A | semmle.label | access to local variable a : A | +| CollectionFlow.cs:518:14:518:17 | access to local variable span : ReadOnlySpan [element] : A | semmle.label | access to local variable span : ReadOnlySpan [element] : A | +| CollectionFlow.cs:518:14:518:20 | access to indexer | semmle.label | access to indexer | subpaths | CollectionFlow.cs:44:20:44:22 | access to local variable as : null [element] : A | CollectionFlow.cs:22:34:22:35 | ts : null [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:44:14:44:23 | call to method First | | CollectionFlow.cs:62:20:62:23 | access to field As : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:62:14:62:24 | call to method First | @@ -581,3 +640,8 @@ subpaths | CollectionFlow.cs:427:17:427:23 | object creation of type A : A | CollectionFlow.cs:427:17:427:23 | object creation of type A : A | CollectionFlow.cs:429:14:429:21 | access to array element | $@ | CollectionFlow.cs:429:14:429:21 | access to array element | access to array element | | CollectionFlow.cs:434:17:434:23 | object creation of type A : A | CollectionFlow.cs:434:17:434:23 | object creation of type A : A | CollectionFlow.cs:436:14:436:17 | access to indexer | $@ | CollectionFlow.cs:436:14:436:17 | access to indexer | access to indexer | | CollectionFlow.cs:447:17:447:23 | object creation of type A : A | CollectionFlow.cs:447:17:447:23 | object creation of type A : A | CollectionFlow.cs:450:14:450:21 | access to array element | $@ | CollectionFlow.cs:450:14:450:21 | access to array element | access to array element | +| CollectionFlow.cs:487:17:487:23 | object creation of type A : A | CollectionFlow.cs:487:17:487:23 | object creation of type A : A | CollectionFlow.cs:489:14:489:20 | access to indexer | $@ | CollectionFlow.cs:489:14:489:20 | access to indexer | access to indexer | +| CollectionFlow.cs:494:17:494:23 | object creation of type A : A | CollectionFlow.cs:494:17:494:23 | object creation of type A : A | CollectionFlow.cs:497:14:497:19 | access to array element | $@ | CollectionFlow.cs:497:14:497:19 | access to array element | access to array element | +| CollectionFlow.cs:502:17:502:23 | object creation of type A : A | CollectionFlow.cs:502:17:502:23 | object creation of type A : A | CollectionFlow.cs:504:14:504:22 | access to indexer | $@ | CollectionFlow.cs:504:14:504:22 | access to indexer | access to indexer | +| CollectionFlow.cs:509:42:509:48 | object creation of type A : A | CollectionFlow.cs:509:42:509:48 | object creation of type A : A | CollectionFlow.cs:511:14:511:22 | access to indexer | $@ | CollectionFlow.cs:511:14:511:22 | access to indexer | access to indexer | +| CollectionFlow.cs:516:17:516:23 | object creation of type A : A | CollectionFlow.cs:516:17:516:23 | object creation of type A : A | CollectionFlow.cs:518:14:518:20 | access to indexer | $@ | CollectionFlow.cs:518:14:518:20 | access to indexer | access to indexer | diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected new file mode 100644 index 00000000000..70faa61bd73 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -0,0 +1,159 @@ +testFailures +edges +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | provenance | | +| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | access to field s1 | provenance | | +| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | provenance | | +| Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : Object | provenance | | +| Constructors.cs:41:38:41:38 | access to parameter o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | provenance | | +| Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | provenance | | +| Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | provenance | | +| Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | provenance | | +| Constructors.cs:46:31:46:38 | access to parameter o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | provenance | | +| Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this access : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:50:32:50:36 | this access : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | access to field Obj21 : Object | provenance | | +| Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:13:54:24 | SSA def(o22param) : Object | provenance | | +| Constructors.cs:57:54:57:55 | o2 : Object | Constructors.cs:59:13:59:19 | SSA def(o1) : Object | provenance | | +| Constructors.cs:62:41:62:41 | o : Object | Constructors.cs:64:37:64:37 | access to parameter o : Object | provenance | | +| Constructors.cs:64:37:64:37 | access to parameter o : Object | Constructors.cs:57:54:57:55 | o2 : Object | provenance | | +| Constructors.cs:64:37:64:37 | access to parameter o : Object | Constructors.cs:64:27:64:34 | SSA def(o22param) : Object | provenance | | +| Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:71:25:71:25 | access to local variable o : Object | provenance | | +| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | provenance | | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | provenance | | +| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | Constructors.cs:72:14:72:19 | access to field Obj | provenance | | +| Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:79:25:79:27 | access to local variable o21 : Object | provenance | | +| Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:79:30:79:32 | access to local variable o22 : Object | provenance | | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | provenance | | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | provenance | | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | provenance | | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | provenance | | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | provenance | | +| Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:92:19:92:23 | access to local variable taint : Object | provenance | | +| Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | provenance | | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | provenance | | +| Constructors.cs:99:21:99:37 | call to method Source : Object | Constructors.cs:100:25:100:29 | access to local variable taint : Object | provenance | | +| Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:100:25:100:29 | access to local variable taint : Object | Constructors.cs:62:41:62:41 | o : Object | provenance | | +| Constructors.cs:100:25:100:29 | access to local variable taint : Object | Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:101:14:101:21 | access to property Obj22 | provenance | | +| Constructors.cs:106:32:106:39 | this : C3 [parameter o31param] : Object | Constructors.cs:106:32:106:39 | access to parameter o31param : Object | provenance | | +| Constructors.cs:111:19:111:35 | call to method Source : Object | Constructors.cs:112:25:112:27 | access to local variable o31 : Object | provenance | | +| Constructors.cs:112:18:112:28 | object creation of type C3 : C3 [parameter o31param] : Object | Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | provenance | | +| Constructors.cs:112:25:112:27 | access to local variable o31 : Object | Constructors.cs:104:28:104:35 | o31param : Object | provenance | | +| Constructors.cs:112:25:112:27 | access to local variable o31 : Object | Constructors.cs:112:18:112:28 | object creation of type C3 : C3 [parameter o31param] : Object | provenance | | +| Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | Constructors.cs:106:32:106:39 | this : C3 [parameter o31param] : Object | provenance | | +| Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | Constructors.cs:113:14:113:21 | access to property Obj31 | provenance | | +nodes +| Constructors.cs:5:24:5:25 | [post] this access : C_no_ctor [field s1] : Object | semmle.label | [post] this access : C_no_ctor [field s1] : Object | +| Constructors.cs:5:29:5:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:9:27:9:41 | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Object | +| Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | semmle.label | access to local variable c : C_no_ctor [field s1] : Object | +| Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | semmle.label | this : C_no_ctor [field s1] : Object | +| Constructors.cs:15:18:15:19 | access to field s1 | semmle.label | access to field s1 | +| Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | semmle.label | this access : C_no_ctor [field s1] : Object | +| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | semmle.label | [post] this access : C_with_ctor [field s1] : Object | +| Constructors.cs:21:29:21:45 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | +| Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | semmle.label | access to local variable c : C_with_ctor [field s1] : Object | +| Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : C_with_ctor [field s1] : Object | +| Constructors.cs:33:18:33:19 | access to field s1 | semmle.label | access to field s1 | +| Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | semmle.label | this access : C_with_ctor [field s1] : Object | +| Constructors.cs:41:26:41:26 | o : Object | semmle.label | o : Object | +| Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | semmle.label | [post] this access : C1 [field Obj] : Object | +| Constructors.cs:41:38:41:38 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| Constructors.cs:44:28:44:35 | o21param : Object | semmle.label | o21param : Object | +| Constructors.cs:44:45:44:52 | o22param : Object | semmle.label | o22param : Object | +| Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | semmle.label | [post] this access : C2 [field Obj21] : Object | +| Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | semmle.label | this access : C2 [parameter o21param] : Object | +| Constructors.cs:46:31:46:38 | access to parameter o21param : Object | semmle.label | access to parameter o21param : Object | +| Constructors.cs:48:32:48:39 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | +| Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | semmle.label | this : C2 [parameter o22param] : Object | +| Constructors.cs:50:32:50:36 | access to field Obj21 : Object | semmle.label | access to field Obj21 : Object | +| Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | semmle.label | this : C2 [field Obj21] : Object | +| Constructors.cs:50:32:50:36 | this access : C2 [field Obj21] : Object | semmle.label | this access : C2 [field Obj21] : Object | +| Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | +| Constructors.cs:54:13:54:24 | SSA def(o22param) : Object | semmle.label | SSA def(o22param) : Object | +| Constructors.cs:57:54:57:55 | o2 : Object | semmle.label | o2 : Object | +| Constructors.cs:59:13:59:19 | SSA def(o1) : Object | semmle.label | SSA def(o1) : Object | +| Constructors.cs:62:41:62:41 | o : Object | semmle.label | o : Object | +| Constructors.cs:64:27:64:34 | SSA def(o22param) : Object | semmle.label | SSA def(o22param) : Object | +| Constructors.cs:64:37:64:37 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| Constructors.cs:70:17:70:33 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | semmle.label | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | semmle.label | access to local variable o : Object | +| Constructors.cs:72:14:72:15 | access to local variable c1 : C1 [field Obj] : Object | semmle.label | access to local variable c1 : C1 [field Obj] : Object | +| Constructors.cs:72:14:72:19 | access to field Obj | semmle.label | access to field Obj | +| Constructors.cs:77:19:77:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:78:19:78:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | semmle.label | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | semmle.label | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | semmle.label | access to local variable o21 : Object | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | semmle.label | access to local variable o22 : Object | +| Constructors.cs:80:14:80:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:80:14:80:21 | access to field Obj21 | semmle.label | access to field Obj21 | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:81:14:81:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | semmle.label | access to local variable c2 : C2 [field Obj21] : Object | +| Constructors.cs:82:14:82:21 | access to property Obj23 | semmle.label | access to property Obj23 | +| Constructors.cs:91:21:91:37 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:93:14:93:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:99:21:99:37 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:100:25:100:29 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | +| Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:101:14:101:21 | access to property Obj22 | semmle.label | access to property Obj22 | +| Constructors.cs:104:28:104:35 | o31param : Object | semmle.label | o31param : Object | +| Constructors.cs:106:32:106:39 | access to parameter o31param : Object | semmle.label | access to parameter o31param : Object | +| Constructors.cs:106:32:106:39 | this : C3 [parameter o31param] : Object | semmle.label | this : C3 [parameter o31param] : Object | +| Constructors.cs:111:19:111:35 | call to method Source : Object | semmle.label | call to method Source : Object | +| Constructors.cs:112:18:112:28 | object creation of type C3 : C3 [parameter o31param] : Object | semmle.label | object creation of type C3 : C3 [parameter o31param] : Object | +| Constructors.cs:112:25:112:27 | access to local variable o31 : Object | semmle.label | access to local variable o31 : Object | +| Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | semmle.label | access to local variable c3 : C3 [parameter o31param] : Object | +| Constructors.cs:113:14:113:21 | access to property Obj31 | semmle.label | access to property Obj31 | +subpaths +| Constructors.cs:64:37:64:37 | access to parameter o : Object | Constructors.cs:57:54:57:55 | o2 : Object | Constructors.cs:59:13:59:19 | SSA def(o1) : Object | Constructors.cs:64:27:64:34 | SSA def(o22param) : Object | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | +| Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | access to field Obj21 : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:13:54:24 | SSA def(o22param) : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | +| Constructors.cs:100:25:100:29 | access to local variable taint : Object | Constructors.cs:62:41:62:41 | o : Object | Constructors.cs:64:27:64:34 | SSA def(o22param) : Object | Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:101:14:101:21 | access to property Obj22 | +| Constructors.cs:112:25:112:27 | access to local variable o31 : Object | Constructors.cs:104:28:104:35 | o31param : Object | Constructors.cs:104:28:104:35 | o31param : Object | Constructors.cs:112:18:112:28 | object creation of type C3 : C3 [parameter o31param] : Object | +| Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | Constructors.cs:106:32:106:39 | this : C3 [parameter o31param] : Object | Constructors.cs:106:32:106:39 | access to parameter o31param : Object | Constructors.cs:113:14:113:21 | access to property Obj31 | +#select +| Constructors.cs:15:18:15:19 | access to field s1 | Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:15:18:15:19 | access to field s1 | $@ | Constructors.cs:5:29:5:45 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:33:18:33:19 | access to field s1 | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:33:18:33:19 | access to field s1 | $@ | Constructors.cs:21:29:21:45 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:72:14:72:19 | access to field Obj | Constructors.cs:70:17:70:33 | call to method Source : Object | Constructors.cs:72:14:72:19 | access to field Obj | $@ | Constructors.cs:70:17:70:33 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:80:14:80:21 | access to field Obj21 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:80:14:80:21 | access to field Obj21 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:81:14:81:21 | access to property Obj22 | Constructors.cs:78:19:78:35 | call to method Source : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | $@ | Constructors.cs:78:19:78:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:82:14:82:21 | access to property Obj23 | Constructors.cs:77:19:77:35 | call to method Source : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | $@ | Constructors.cs:77:19:77:35 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:93:14:93:21 | access to property Obj22 | Constructors.cs:91:21:91:37 | call to method Source : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | $@ | Constructors.cs:91:21:91:37 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:101:14:101:21 | access to property Obj22 | Constructors.cs:99:21:99:37 | call to method Source : Object | Constructors.cs:101:14:101:21 | access to property Obj22 | $@ | Constructors.cs:99:21:99:37 | call to method Source : Object | call to method Source : Object | +| Constructors.cs:113:14:113:21 | access to property Obj31 | Constructors.cs:111:19:111:35 | call to method Source : Object | Constructors.cs:113:14:113:21 | access to property Obj31 | $@ | Constructors.cs:111:19:111:35 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql new file mode 100644 index 00000000000..f47c9f4e9a4 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.ql @@ -0,0 +1,12 @@ +/** + * @kind path-problem + */ + +import csharp +import TestUtilities.InlineFlowTest +import ValueFlowTest +import PathGraph + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs b/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs new file mode 100644 index 00000000000..f8a75953d08 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/constructors/Constructors.cs @@ -0,0 +1,119 @@ +public class Constructors +{ + public class C_no_ctor + { + private object s1 = Source(1); + + void M1() + { + C_no_ctor c = new C_no_ctor(); + c.M2(); + } + + public void M2() + { + Sink(s1); // $ hasValueFlow=1 + } + } + + public class C_with_ctor + { + private object s1 = Source(1); + + void M1() + { + C_with_ctor c = new C_with_ctor(); + c.M2(); + } + + public C_with_ctor() { } + + public void M2() + { + Sink(s1); // $ hasValueFlow=1 + } + } + + public class C1 + { + public object Obj; + + public C1(object o) => Obj = o; + } + + public class C2(object o21param, object o22param) + { + public object Obj21 = o21param; + + public object Obj22 => o22param; + + public object Obj23 => Obj21; + + public void SetObj(object o) + { + o22param = o; + } + + private void SetObjOut(out object o1, object o2) + { + o1 = o2; + } + + public void SetObjViaOut(object o) + { + SetObjOut(out o22param, o); + } + } + + public void M1() + { + var o = Source(1); + var c1 = new C1(o); + Sink(c1.Obj); // $ hasValueFlow=1 + } + + public void M2() + { + var o21 = Source(2); + var o22 = Source(3); + var c2 = new C2(o21, o22); + Sink(c2.Obj21); // $ hasValueFlow=2 + Sink(c2.Obj22); // $ hasValueFlow=3 + Sink(c2.Obj23); // $ hasValueFlow=2 + } + + public void M3() + { + var c2 = new C2(new object(), new object()); + Sink(c2.Obj21); // No flow + Sink(c2.Obj22); // No flow + Sink(c2.Obj23); // No flow + var taint = Source(4); + c2.SetObj(taint); + Sink(c2.Obj22); // $ hasValueFlow=4 + } + + public void M4() + { + var c2 = new C2(new object(), new object()); + var taint = Source(5); + c2.SetObjViaOut(taint); + Sink(c2.Obj22); // $ hasValueFlow=5 + } + + public class C3(object o31param) + { + public object Obj31 => o31param; + } + + public void M5() + { + var o31 = Source(6); + var c3 = new C3(o31); + Sink(c3.Obj31); // $ hasValueFlow=6 + } + + public static void Sink(object o) { } + + public static T Source(object source) => throw null; +} diff --git a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs index 15d628aea9a..1f9c48445dd 100644 --- a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.cs @@ -128,9 +128,31 @@ class DelegateFlow void M19(Action a, bool b) { if (b) - a = () => {}; + a = () => { }; a(); } - void M20(bool b) => M19(() => {}, b); + void M20(bool b) => M19(() => { }, b); + + Action Field; + Action Prop2 { get; set; } + + DelegateFlow(Action a, Action b) + { + Field = a; + Prop2 = b; + } + + void M20() + { + new DelegateFlow( + _ => { }, + _ => { } + ); + + this.Field(0); + this.Prop2(0); + Field(0); + Prop2(0); + } } diff --git a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected index 610ff1f06d9..c16036e751c 100644 --- a/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/delegates/DelegateFlow.expected @@ -22,8 +22,12 @@ delegateCall | DelegateFlow.cs:89:35:89:37 | delegate call | DelegateFlow.cs:93:13:93:21 | (...) => ... | | DelegateFlow.cs:114:9:114:16 | function pointer call | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:125:9:125:25 | function pointer call | DelegateFlow.cs:7:17:7:18 | M2 | -| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:131:17:131:24 | (...) => ... | -| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:29:135:36 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:131:17:131:25 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:29:135:37 | (...) => ... | +| DelegateFlow.cs:153:9:153:21 | delegate call | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:154:9:154:21 | delegate call | DelegateFlow.cs:150:13:150:20 | (...) => ... | +| DelegateFlow.cs:155:9:155:16 | delegate call | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:156:9:156:16 | delegate call | DelegateFlow.cs:150:13:150:20 | (...) => ... | viableLambda | DelegateFlow.cs:9:9:9:12 | delegate call | DelegateFlow.cs:16:9:16:20 | call to method M2 | DelegateFlow.cs:16:12:16:19 | (...) => ... | | DelegateFlow.cs:9:9:9:12 | delegate call | DelegateFlow.cs:17:9:17:14 | call to method M2 | DelegateFlow.cs:5:10:5:11 | M1 | @@ -49,7 +53,11 @@ viableLambda | DelegateFlow.cs:89:35:89:37 | delegate call | DelegateFlow.cs:93:9:93:22 | call to local function M14 | DelegateFlow.cs:93:13:93:21 | (...) => ... | | DelegateFlow.cs:114:9:114:16 | function pointer call | DelegateFlow.cs:119:9:119:28 | call to method M16 | DelegateFlow.cs:7:17:7:18 | M2 | | DelegateFlow.cs:125:9:125:25 | function pointer call | file://:0:0:0:0 | (none) | DelegateFlow.cs:7:17:7:18 | M2 | -| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:25:135:40 | call to method M19 | DelegateFlow.cs:135:29:135:36 | (...) => ... | -| DelegateFlow.cs:132:9:132:11 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:131:17:131:24 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | DelegateFlow.cs:135:25:135:41 | call to method M19 | DelegateFlow.cs:135:29:135:37 | (...) => ... | +| DelegateFlow.cs:132:9:132:11 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:131:17:131:25 | (...) => ... | +| DelegateFlow.cs:153:9:153:21 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:154:9:154:21 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:150:13:150:20 | (...) => ... | +| DelegateFlow.cs:155:9:155:16 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:149:13:149:20 | (...) => ... | +| DelegateFlow.cs:156:9:156:16 | delegate call | file://:0:0:0:0 | (none) | DelegateFlow.cs:150:13:150:20 | (...) => ... | | file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:105:9:105:24 | object creation of type Lazy | DelegateFlow.cs:104:23:104:30 | (...) => ... | | file://:0:0:0:0 | [summary] call to [summary param] position 0 in Lazy in Lazy | DelegateFlow.cs:107:9:107:24 | object creation of type Lazy | DelegateFlow.cs:106:13:106:20 | (...) => ... | diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index cd3e2b94127..a64ed809a80 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -1,77 +1,77 @@ invalidModelRow edges -| ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | -| ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | -| ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | -| ExternalFlow.cs:16:30:16:41 | object creation of type Object : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | -| ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | -| ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | -| ExternalFlow.cs:23:27:23:38 | object creation of type Object : Object | ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | -| ExternalFlow.cs:24:13:24:29 | [post] this access : D | ExternalFlow.cs:25:18:25:21 | this access | -| ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | ExternalFlow.cs:24:13:24:29 | [post] this access : D | -| ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | -| ExternalFlow.cs:30:26:30:37 | object creation of type Object : Object | ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | -| ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:39 | call to method StepFieldGetter | -| ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | ExternalFlow.cs:36:18:36:69 | access to field Field | -| ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | -| ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | -| ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | -| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | -| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | -| ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:27 | access to field Field | -| ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | -| ExternalFlow.cs:42:29:42:40 | object creation of type Object : Object | ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | -| ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:42 | call to method StepPropertyGetter | -| ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | -| ExternalFlow.cs:48:37:48:48 | object creation of type Object : Object | ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | -| ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:30 | access to property Property | -| ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | -| ExternalFlow.cs:54:36:54:47 | object creation of type Object : Object | ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | -| ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | ExternalFlow.cs:55:18:55:41 | call to method StepElementGetter | -| ExternalFlow.cs:60:35:60:35 | o : Object | ExternalFlow.cs:60:47:60:47 | access to parameter o | -| ExternalFlow.cs:60:64:60:75 | object creation of type Object : Object | ExternalFlow.cs:60:35:60:35 | o : Object | -| ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | ExternalFlow.cs:66:18:66:18 | access to local variable o | -| ExternalFlow.cs:65:45:65:56 | object creation of type Object : Object | ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | -| ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | -| ExternalFlow.cs:71:32:71:43 | object creation of type Object : Object | ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | -| ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | ExternalFlow.cs:72:23:72:23 | o : Object | -| ExternalFlow.cs:72:23:72:23 | o : Object | ExternalFlow.cs:72:35:72:35 | access to parameter o | -| ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | -| ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | -| ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | ExternalFlow.cs:78:18:78:24 | access to array element | -| ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | -| ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | -| ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | -| ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | -| ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | ExternalFlow.cs:85:18:85:25 | access to array element | -| ExternalFlow.cs:90:21:90:34 | object creation of type String : String | ExternalFlow.cs:91:19:91:19 | access to local variable s : String | -| ExternalFlow.cs:91:19:91:19 | access to local variable s : String | ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | -| ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | ExternalFlow.cs:92:18:92:18 | (...) ... | -| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | -| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | -| ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | -| ExternalFlow.cs:100:20:100:20 | d : Object | ExternalFlow.cs:102:22:102:22 | access to parameter d | -| ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:100:20:100:20 | d : Object | -| ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:25 | access to field Field | -| ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | -| ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | -| ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:25 | access to property MyProp | -| ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | -| ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | -| ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | -| ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | -| ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | ExternalFlow.cs:120:18:120:21 | access to array element | -| ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | -| ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | ExternalFlow.cs:206:18:206:40 | call to method MixedFlowArgs | -| ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | -| ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | ExternalFlow.cs:212:18:212:54 | call to method GeneratedFlowWithGeneratedNeutral | -| ExternalFlow.cs:244:21:244:28 | object creation of type HC : HC | ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | -| ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | -| ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | ExternalFlow.cs:246:18:246:18 | access to local variable o | -| ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | -| ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | -| ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | ExternalFlow.cs:264:18:264:18 | access to local variable b | -| ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | +| ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | provenance | | +| ExternalFlow.cs:10:29:10:32 | access to local variable arg1 : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | provenance | | +| ExternalFlow.cs:15:29:15:40 | object creation of type Object : Object | ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | provenance | | +| ExternalFlow.cs:16:30:16:41 | object creation of type Object : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | provenance | | +| ExternalFlow.cs:17:24:17:29 | access to local variable argIn1 : Object | ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | provenance | | +| ExternalFlow.cs:17:32:17:38 | [post] access to local variable argOut1 : Object | ExternalFlow.cs:18:18:18:24 | access to local variable argOut1 | provenance | | +| ExternalFlow.cs:23:27:23:38 | object creation of type Object : Object | ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | provenance | | +| ExternalFlow.cs:24:13:24:29 | [post] this access : D | ExternalFlow.cs:25:18:25:21 | this access | provenance | | +| ExternalFlow.cs:24:25:24:28 | access to local variable arg2 : Object | ExternalFlow.cs:24:13:24:29 | [post] this access : D | provenance | | +| ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:30:26:30:37 | object creation of type Object : Object | ExternalFlow.cs:30:13:30:16 | [post] this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:31:18:31:21 | this access : D [field Field] : Object | ExternalFlow.cs:31:18:31:39 | call to method StepFieldGetter | provenance | | +| ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | ExternalFlow.cs:36:18:36:69 | access to field Field | provenance | | +| ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | provenance | | +| ExternalFlow.cs:36:22:36:62 | access to field Field2 : Object [field Field] : Object | ExternalFlow.cs:36:19:36:62 | (...) ... : D [field Field] : Object | provenance | | +| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:25 | [post] this access : D [field Field] : Object | provenance | | +| ExternalFlow.cs:36:43:36:54 | object creation of type Object : Object | ExternalFlow.cs:36:22:36:55 | call to method StepFieldSetter : D [field Field2, field Field] : Object | provenance | | +| ExternalFlow.cs:37:18:37:21 | this access : D [field Field] : Object | ExternalFlow.cs:37:18:37:27 | access to field Field | provenance | | +| ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:42:29:42:40 | object creation of type Object : Object | ExternalFlow.cs:42:13:42:16 | [post] this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:43:18:43:21 | this access : D [property Property] : Object | ExternalFlow.cs:43:18:43:42 | call to method StepPropertyGetter | provenance | | +| ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:48:37:48:48 | object creation of type Object : Object | ExternalFlow.cs:48:13:48:16 | [post] this access : D [property Property] : Object | provenance | | +| ExternalFlow.cs:49:18:49:21 | this access : D [property Property] : Object | ExternalFlow.cs:49:18:49:30 | access to property Property | provenance | | +| ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | provenance | | +| ExternalFlow.cs:54:36:54:47 | object creation of type Object : Object | ExternalFlow.cs:54:13:54:16 | [post] this access : D [element] : Object | provenance | | +| ExternalFlow.cs:55:18:55:21 | this access : D [element] : Object | ExternalFlow.cs:55:18:55:41 | call to method StepElementGetter | provenance | | +| ExternalFlow.cs:60:35:60:35 | o : Object | ExternalFlow.cs:60:47:60:47 | access to parameter o | provenance | | +| ExternalFlow.cs:60:64:60:75 | object creation of type Object : Object | ExternalFlow.cs:60:35:60:35 | o : Object | provenance | | +| ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | ExternalFlow.cs:66:18:66:18 | access to local variable o | provenance | | +| ExternalFlow.cs:65:45:65:56 | object creation of type Object : Object | ExternalFlow.cs:65:21:65:60 | call to method Apply : Object | provenance | | +| ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | provenance | | +| ExternalFlow.cs:71:32:71:43 | object creation of type Object : Object | ExternalFlow.cs:71:30:71:45 | { ..., ... } : null [element] : Object | provenance | | +| ExternalFlow.cs:72:17:72:20 | access to local variable objs : null [element] : Object | ExternalFlow.cs:72:23:72:23 | o : Object | provenance | | +| ExternalFlow.cs:72:23:72:23 | o : Object | ExternalFlow.cs:72:35:72:35 | access to parameter o | provenance | | +| ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | provenance | | +| ExternalFlow.cs:77:46:77:57 | object creation of type Object : Object | ExternalFlow.cs:77:24:77:58 | call to method Map : T[] [element] : Object | provenance | | +| ExternalFlow.cs:78:18:78:21 | access to local variable objs : T[] [element] : Object | ExternalFlow.cs:78:18:78:24 | access to array element | provenance | | +| ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | provenance | | +| ExternalFlow.cs:83:32:83:43 | object creation of type Object : Object | ExternalFlow.cs:83:30:83:45 | { ..., ... } : null [element] : Object | provenance | | +| ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | provenance | | +| ExternalFlow.cs:84:29:84:32 | access to local variable objs : null [element] : Object | ExternalFlow.cs:84:25:84:41 | call to method Map : T[] [element] : Object | provenance | | +| ExternalFlow.cs:85:18:85:22 | access to local variable objs2 : T[] [element] : Object | ExternalFlow.cs:85:18:85:25 | access to array element | provenance | | +| ExternalFlow.cs:90:21:90:34 | object creation of type String : String | ExternalFlow.cs:91:19:91:19 | access to local variable s : String | provenance | | +| ExternalFlow.cs:91:19:91:19 | access to local variable s : String | ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | provenance | | +| ExternalFlow.cs:91:30:91:30 | SSA def(i) : Int32 | ExternalFlow.cs:92:18:92:18 | (...) ... | provenance | | +| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | provenance | | +| ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | provenance | | +| ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:98:13:98:14 | [post] access to local variable d1 : D [field Field] : Object | provenance | | +| ExternalFlow.cs:100:20:100:20 | d : Object | ExternalFlow.cs:102:22:102:22 | access to parameter d | provenance | | +| ExternalFlow.cs:103:16:103:17 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:100:20:100:20 | d : Object | provenance | | +| ExternalFlow.cs:104:18:104:19 | access to local variable d1 : D [field Field] : Object | ExternalFlow.cs:104:18:104:25 | access to field Field | provenance | | +| ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | provenance | | +| ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | ExternalFlow.cs:111:13:111:13 | [post] access to local variable f : F [field MyField] : Object | provenance | | +| ExternalFlow.cs:112:18:112:18 | access to local variable f : F [field MyField] : Object | ExternalFlow.cs:112:18:112:25 | access to property MyProp | provenance | | +| ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | provenance | | +| ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | provenance | | +| ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | provenance | | +| ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | provenance | | +| ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | ExternalFlow.cs:120:18:120:21 | access to array element | provenance | | +| ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | provenance | | +| ExternalFlow.cs:206:38:206:39 | access to local variable o2 : Object | ExternalFlow.cs:206:18:206:40 | call to method MixedFlowArgs | provenance | | +| ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | provenance | | +| ExternalFlow.cs:212:52:212:53 | access to local variable o1 : Object | ExternalFlow.cs:212:18:212:54 | call to method GeneratedFlowWithGeneratedNeutral | provenance | | +| ExternalFlow.cs:244:21:244:28 | object creation of type HC : HC | ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | provenance | | +| ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | provenance | | +| ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | ExternalFlow.cs:246:18:246:18 | access to local variable o | provenance | | +| ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | provenance | | +| ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | provenance | | +| ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | ExternalFlow.cs:264:18:264:18 | access to local variable b | provenance | | +| ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | provenance | | nodes | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | semmle.label | call to method StepArgRes | diff --git a/csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs b/csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs deleted file mode 100644 index 346c24068bb..00000000000 --- a/csharp/ql/test/library-tests/dataflow/fields/C_ctor.cs +++ /dev/null @@ -1,42 +0,0 @@ -public class C_no_ctor -{ - private Elem s1 = Util.Source(1); - - void M1() - { - C_no_ctor c = new C_no_ctor(); - c.M2(); - } - - public void M2() - { - Util.Sink(s1); // $ hasValueFlow=1 - } -} - -public class C_with_ctor -{ - private Elem s1 = Util.Source(1); - - void M1() - { - C_with_ctor c = new C_with_ctor(); - c.M2(); - } - - public C_with_ctor() { } - - public void M2() - { - Util.Sink(s1); // $ hasValueFlow=1 - } -} - -class Util -{ - public static void Sink(object o) { } - - public static T Source(object source) => throw null; -} - -public class Elem { } diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index a56a9fa6524..b5c1624c251 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -1,945 +1,921 @@ testFailures edges -| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | -| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | -| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | -| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | -| A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | -| A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | -| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | -| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | -| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | -| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | -| A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | -| A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | -| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | -| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | -| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | -| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | -| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | -| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | -| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | -| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | -| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | -| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | -| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | -| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | -| A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | -| A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | -| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | -| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | -| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | -| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | -| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | -| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | -| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | -| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | -| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | -| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | -| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | -| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | -| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | -| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | -| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | -| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | -| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | -| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | -| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | -| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | -| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | -| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | -| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | -| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | -| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | -| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | -| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | -| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | -| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | -| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | -| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | -| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | -| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | -| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | -| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | -| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | -| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | -| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | -| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | -| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | -| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | -| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | -| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | -| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | -| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | -| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | -| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | -| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | -| A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | -| A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | -| A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | -| A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | -| A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | -| A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | -| A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | -| A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | -| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | -| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | -| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | -| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | -| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | -| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | -| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | -| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | -| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | -| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | -| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | -| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | -| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | -| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | -| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | -| A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | -| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | -| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | -| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | -| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | -| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | -| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | -| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | -| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | -| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | -| A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | -| A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | -| A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | -| A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | -| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | -| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | -| A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | -| A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | -| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | -| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | -| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | -| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | -| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | -| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | -| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | -| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | -| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | -| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | -| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | -| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | -| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | -| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | -| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | -| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | -| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | -| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | -| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | -| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | -| A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | A.cs:123:18:123:23 | access to field head | -| A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | A.cs:123:18:123:23 | access to field head | -| A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | -| A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | -| A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | -| A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | -| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | -| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | -| A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | -| A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | -| A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | -| A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | -| A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | -| A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | -| A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | -| A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | -| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | -| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | -| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | -| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | -| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | -| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | -| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | -| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | -| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | -| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | -| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | -| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | -| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | -| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | -| A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | -| A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | -| A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | -| A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | -| A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | -| A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | -| A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | -| A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | -| A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | -| A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | -| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | -| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | -| B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | -| B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | -| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | -| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | -| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | -| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | -| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | -| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | -| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | -| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | -| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | -| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | -| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | -| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | -| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | -| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | -| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | -| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | -| B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | -| B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | -| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | -| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | -| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | -| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | -| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | -| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | -| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | -| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | -| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | -| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | -| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | -| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | -| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | -| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | -| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | -| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | -| B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | -| B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | -| B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | -| B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | -| B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | -| B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | -| B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | -| B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | -| B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | -| B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | -| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | -| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | -| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | -| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | -| C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | -| C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | -| C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | -| C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | -| C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | -| C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | -| C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | -| C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | -| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | -| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | -| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | -| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | -| C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | -| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | -| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | -| C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | -| C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | -| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | -| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | -| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | -| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | -| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | -| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | -| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | -| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | -| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | -| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | -| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | -| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | -| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | -| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | -| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | -| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | -| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | -| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | -| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | -| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | -| D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | -| D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | -| D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | -| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | -| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | -| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | -| D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | -| D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | -| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | -| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | -| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | -| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | -| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | -| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | -| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | -| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | -| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | -| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | -| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | -| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | -| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | -| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | -| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | -| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | -| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | -| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | -| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | -| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | -| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | -| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | -| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | -| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | -| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | -| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | -| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | -| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | -| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | -| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | -| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | -| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | -| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | -| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | -| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | -| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | -| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | -| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | -| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | -| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | -| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | -| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | -| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | -| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | -| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | -| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | -| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | -| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | -| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | -| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | -| E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | E.cs:24:14:24:20 | access to field Field | -| E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | E.cs:24:14:24:20 | access to field Field | -| E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | -| E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | -| E.cs:46:22:46:22 | access to parameter o : Object | E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | -| E.cs:46:22:46:22 | access to parameter o : Object | E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | -| E.cs:54:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | -| E.cs:54:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | -| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | -| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | -| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | -| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | -| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | -| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | -| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | -| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | -| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | -| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | -| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | -| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | -| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | -| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | -| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | -| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | -| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | -| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | -| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | -| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | -| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | -| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | -| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | -| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | -| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | -| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | -| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | -| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | -| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | -| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | -| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | -| F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | -| F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | -| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | -| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | -| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | -| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | -| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | -| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | -| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | -| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | -| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | -| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | -| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | -| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | -| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | -| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | -| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | -| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | -| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | -| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | -| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | -| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | -| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | -| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | -| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | -| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | -| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | -| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | -| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | -| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | -| G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | -| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | -| G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | -| G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | -| G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | -| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | -| G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | -| G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | -| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | -| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | -| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | -| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | -| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | -| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | -| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | -| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | -| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | -| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | -| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | -| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | -| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | -| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | -| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | -| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | -| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | -| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | -| G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | -| G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | -| G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | -| G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | -| G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | -| G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | -| G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | -| H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | -| H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | -| H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | -| H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | -| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | -| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | -| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | -| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | -| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | -| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | -| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | -| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | -| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | -| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | -| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | -| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | -| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | -| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | -| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | -| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | -| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | -| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | -| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | -| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | -| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | -| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | -| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | -| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | -| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | -| H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | H.cs:45:14:45:21 | access to field FieldB | -| H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | H.cs:45:14:45:21 | access to field FieldB | -| H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | -| H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | -| H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | -| H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | -| H.cs:55:21:55:28 | access to field FieldA : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | -| H.cs:55:21:55:28 | access to field FieldA : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | -| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | -| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | -| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | -| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | -| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | -| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | -| H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:22 | access to field FieldB | -| H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:22 | access to field FieldB | -| H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | -| H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | -| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | -| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | -| H.cs:79:20:79:20 | access to parameter o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | -| H.cs:79:20:79:20 | access to parameter o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | -| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | -| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | -| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | -| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | -| H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | -| H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | -| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | -| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | -| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | -| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | -| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | -| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | -| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | -| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | -| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | -| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | -| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | -| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | -| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | -| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | -| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | -| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | -| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | -| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | -| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | -| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | -| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | -| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | -| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | -| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | -| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | -| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | -| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | -| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | -| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | -| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | -| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | -| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | -| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | -| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | -| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | -| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | -| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | -| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | -| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | -| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | -| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | -| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | -| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | -| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | -| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | -| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | -| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | -| H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | -| H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | -| H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | -| H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | -| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | -| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | -| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | -| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | -| H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | -| H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | -| H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | -| H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | -| H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | -| H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | -| H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | -| H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | -| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | -| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | -| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | -| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | -| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | -| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | -| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | -| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | -| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | -| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | -| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | -| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | -| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | -| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | -| H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | -| H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | -| I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | -| I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | -| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | -| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | -| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | -| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | -| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | -| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | -| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | -| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | -| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | -| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | -| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | -| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | -| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | -| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | -| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | -| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | -| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | -| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | -| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | -| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | -| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | -| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | -| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | -| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | -| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | -| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | -| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | -| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | -| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | -| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | -| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | -| I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | -| I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | -| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | -| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | -| J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | -| J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | -| J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | -| J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | -| J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | -| J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | -| J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | -| J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | -| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | -| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | -| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | -| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | -| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | -| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | -| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | -| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | -| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | -| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | -| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | -| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | -| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | -| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | -| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | -| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | -| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | -| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | -| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | -| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | -| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | -| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | -| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | -| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | -| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | -| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | -| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | -| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | -| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | -| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | -| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | -| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | -| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | -| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | -| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | -| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | -| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | -| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | -| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | -| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | -| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | -| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | -| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | -| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | -| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | -| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | -| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | -| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | -| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | -| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | -| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | -| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | -| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | -| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | -| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | -| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | -| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | -| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | -| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | -| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | -| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | -| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | -| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | -| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | -| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | -| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | -| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | -| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | -| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | -| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | -| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | -| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | -| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | -| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | -| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | -| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | -| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | -| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | -| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | -| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | -| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | -| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | -| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | -| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | -| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | -| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | -| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | -| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | -| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | -| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | -| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | +| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | provenance | | +| A.cs:5:17:5:28 | call to method Source : C | A.cs:6:24:6:24 | access to local variable c : C | provenance | | +| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:6:17:6:25 | call to method Make : B [field c] : C | A.cs:7:14:7:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | provenance | | +| A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | provenance | | +| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | provenance | | +| A.cs:7:14:7:14 | access to local variable b : B [field c] : C | A.cs:7:14:7:16 | access to field c | provenance | | +| A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | provenance | | +| A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | provenance | | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | provenance | | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | provenance | | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:14:14:14:20 | call to method Get | provenance | | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | provenance | | +| A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | provenance | | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | provenance | | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:15:14:15:42 | call to method Get | provenance | | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | provenance | | +| A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | provenance | | +| A.cs:24:14:24:15 | access to local variable b2 : B [field c] : C2 | A.cs:24:14:24:17 | access to field c | provenance | | +| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | provenance | | +| A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | provenance | | +| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | provenance | | +| A.cs:33:14:33:15 | access to local variable b2 : B [field c] : C2 | A.cs:33:14:33:17 | access to field c | provenance | | +| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | provenance | | +| A.cs:36:33:36:33 | c : C2 | A.cs:38:29:38:29 | access to parameter c : C2 | provenance | | +| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | provenance | | +| A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | provenance | | +| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | provenance | | +| A.cs:42:29:42:29 | c : C2 | A.cs:47:20:47:20 | access to parameter c : C2 | provenance | | +| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | provenance | | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | provenance | | +| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | provenance | | +| A.cs:55:17:55:28 | call to method Source : A | A.cs:57:16:57:16 | access to local variable a : A | provenance | | +| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:57:16:57:16 | access to local variable a : A | A.cs:57:9:57:10 | [post] access to local variable c1 : C1 [field a] : A | provenance | | +| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | provenance | | +| A.cs:58:12:58:13 | access to local variable c1 : C1 [field a] : A | A.cs:60:22:60:22 | c : C1 [field a] : A | provenance | | +| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | provenance | | +| A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | provenance | | +| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | provenance | | +| A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | provenance | | +| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | provenance | | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | provenance | | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | provenance | | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | provenance | | +| A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | provenance | | +| A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | provenance | | +| A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | provenance | | +| A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | provenance | | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | provenance | | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | provenance | | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | +| A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | +| A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | provenance | | +| A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | provenance | | +| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | provenance | | +| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | provenance | | +| A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | provenance | | +| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | provenance | | +| A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | provenance | | +| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | +| A.cs:98:30:98:43 | call to method Source : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | +| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | provenance | | +| A.cs:104:17:104:30 | call to method Source : B | A.cs:105:23:105:23 | access to local variable b : B | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | provenance | | +| A.cs:105:17:105:29 | object creation of type D : D [field b] : B | A.cs:106:14:106:14 | access to local variable d : D [field b] : B | provenance | | +| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | A.cs:108:14:108:14 | access to local variable b : B [field c] : C | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | provenance | | +| A.cs:106:14:106:14 | access to local variable d : D [field b] : B | A.cs:106:14:106:16 | access to field b | provenance | | +| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | provenance | | +| A.cs:107:14:107:14 | access to local variable d : D [field b, field c] : C | A.cs:107:14:107:16 | access to field b : B [field c] : C | provenance | | +| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | provenance | | +| A.cs:107:14:107:16 | access to field b : B [field c] : C | A.cs:107:14:107:18 | access to field c | provenance | | +| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | provenance | | +| A.cs:108:14:108:14 | access to local variable b : B [field c] : C | A.cs:108:14:108:16 | access to field c | provenance | | +| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | provenance | | +| A.cs:113:17:113:29 | call to method Source : B | A.cs:114:29:114:29 | access to local variable b : B | provenance | | +| A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | provenance | | +| A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | provenance | | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | provenance | | +| A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | provenance | | +| A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | provenance | | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | provenance | | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | provenance | | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | provenance | | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | provenance | | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | provenance | | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | provenance | | +| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:119:14:119:15 | access to local variable l3 : MyList [field next, field next, field head] : B | A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | provenance | | +| A.cs:119:14:119:20 | access to field next : MyList [field next, field head] : B | A.cs:119:14:119:25 | access to field next : MyList [field head] : B | provenance | | +| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | provenance | | +| A.cs:119:14:119:25 | access to field next : MyList [field head] : B | A.cs:119:14:119:30 | access to field head | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field head] : B | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:121:41:121:41 | access to local variable l : MyList [field next, field next, field head] : B | A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field head] : B | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | provenance | | +| A.cs:121:41:121:46 | access to field next : MyList [field next, field head] : B | A.cs:121:41:121:41 | access to local variable l : MyList [field next, field head] : B | provenance | | +| A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | A.cs:123:18:123:23 | access to field head | provenance | | +| A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | A.cs:123:18:123:23 | access to field head | provenance | | +| A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | provenance | | +| A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | provenance | | +| A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | provenance | | +| A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | provenance | | +| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | provenance | | +| A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | provenance | | +| A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | provenance | | +| A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | provenance | | +| A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | provenance | | +| A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | provenance | | +| A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | provenance | | +| A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | provenance | | +| A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | provenance | | +| A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | provenance | | +| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | provenance | | +| A.cs:145:41:145:41 | access to parameter c : C2 | A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:36 | this access : B [field c] : C | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | provenance | | +| A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:36 | this access : B [field c] : C1 | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | provenance | | +| A.cs:146:33:146:36 | this access : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | provenance | | +| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | provenance | | +| A.cs:147:32:147:32 | c : C | A.cs:149:26:149:26 | access to parameter c : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | provenance | | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | provenance | | +| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | provenance | | +| A.cs:157:25:157:28 | head : B | A.cs:159:25:159:28 | access to parameter head : B | provenance | | +| A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | provenance | | +| A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | provenance | | +| A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | provenance | | +| A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | provenance | | +| A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | provenance | | +| A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | provenance | | +| A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | provenance | | +| A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | provenance | | +| A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | provenance | | +| A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | provenance | | +| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | provenance | | +| B.cs:5:17:5:31 | call to method Source : Elem | B.cs:6:27:6:27 | access to local variable e : Elem | provenance | | +| B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | provenance | | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | provenance | | +| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:8:14:8:15 | access to local variable b2 : Box2 [field box1, field elem1] : Elem | B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | provenance | | +| B.cs:8:14:8:20 | access to field box1 : Box1 [field elem1] : Elem | B.cs:8:14:8:26 | access to field elem1 | provenance | | +| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | provenance | | +| B.cs:14:17:14:31 | call to method Source : Elem | B.cs:15:33:15:33 | access to local variable e : Elem | provenance | | +| B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | provenance | | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | provenance | | +| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:18:14:18:15 | access to local variable b2 : Box2 [field box1, field elem2] : Elem | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | provenance | | +| B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | B.cs:18:14:18:26 | access to field elem2 | provenance | | +| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | provenance | | +| B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | provenance | | +| B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | provenance | | +| B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | provenance | | +| B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | provenance | | +| B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | provenance | | +| B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | provenance | | +| B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | provenance | | +| B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | provenance | | +| B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | provenance | | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | provenance | | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | +| C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | provenance | | +| C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | provenance | | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | +| C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | provenance | | +| C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | provenance | | +| C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | provenance | | +| C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | provenance | | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | provenance | | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | provenance | | +| C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | provenance | | +| C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | provenance | | +| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | provenance | | +| C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | provenance | | +| C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s1] : Elem | C.cs:21:17:21:18 | this : C [field s1] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s2] : Elem | C.cs:21:17:21:18 | this : C [field s2] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | provenance | | +| C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | provenance | | +| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | provenance | | +| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | provenance | | +| C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | provenance | | +| C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s2] : Elem | C.cs:24:14:24:15 | this access : C [field s2] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [field s3] : Elem | C.cs:25:14:25:15 | this access : C [field s3] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | provenance | | +| C.cs:21:17:21:18 | this : C [property s5] : Elem | C.cs:27:14:27:15 | this access : C [property s5] : Elem | provenance | | +| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | provenance | | +| C.cs:23:14:23:15 | this access : C [field s1] : Elem | C.cs:23:14:23:15 | access to field s1 | provenance | | +| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | provenance | | +| C.cs:24:14:24:15 | this access : C [field s2] : Elem | C.cs:24:14:24:15 | access to field s2 | provenance | | +| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | provenance | | +| C.cs:25:14:25:15 | this access : C [field s3] : Elem | C.cs:25:14:25:15 | access to field s3 | provenance | | +| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | +| C.cs:27:14:27:15 | this access : C [property s5] : Elem | C.cs:27:14:27:15 | access to property s5 | provenance | | +| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | +| D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | provenance | | +| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | provenance | | +| D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | provenance | | +| D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | provenance | | +| D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | provenance | | +| D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | provenance | | +| D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | provenance | | +| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | provenance | | +| D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | provenance | | +| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | provenance | | +| D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | provenance | | +| D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | provenance | | +| D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | provenance | | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | provenance | | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | provenance | | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | provenance | | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | provenance | | +| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | provenance | | +| D.cs:18:28:18:29 | o1 : Object | D.cs:21:24:21:25 | access to parameter o1 : Object | provenance | | +| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | provenance | | +| D.cs:18:39:18:40 | o2 : Object | D.cs:22:27:22:28 | access to parameter o2 : Object | provenance | | +| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | provenance | | +| D.cs:18:50:18:51 | o3 : Object | D.cs:23:27:23:28 | access to parameter o3 : Object | provenance | | +| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:21:24:21:25 | access to parameter o1 : Object | D.cs:21:9:21:11 | [post] access to local variable ret : D [property AutoProp] : Object | provenance | | +| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | provenance | | +| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | provenance | | +| D.cs:29:17:29:33 | call to method Source : Object | D.cs:31:24:31:24 | access to local variable o : Object | provenance | | +| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | provenance | | +| D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | provenance | | +| D.cs:31:24:31:24 | access to local variable o : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | provenance | | +| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | provenance | | +| D.cs:32:14:32:14 | access to local variable d : D [property AutoProp] : Object | D.cs:32:14:32:23 | access to property AutoProp | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:37:26:37:42 | call to method Source : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | provenance | | +| D.cs:39:14:39:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:39:14:39:26 | access to property TrivialProp | provenance | | +| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | provenance | | +| D.cs:40:14:40:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:40:14:40:31 | access to field trivialPropField | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | provenance | | +| D.cs:41:14:41:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:41:14:41:26 | access to property ComplexProp | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:18:50:18:51 | o3 : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:43:32:43:48 | call to method Source : Object | D.cs:43:13:43:49 | call to method Create : D [field trivialPropField] : Object | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | provenance | | +| D.cs:45:14:45:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:45:14:45:26 | access to property TrivialProp | provenance | | +| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | provenance | | +| D.cs:46:14:46:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:46:14:46:31 | access to field trivialPropField | provenance | | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | provenance | | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | provenance | | +| D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:47:14:47:26 | access to property ComplexProp | provenance | | +| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | | +| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | | +| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:11:21:11:21 | access to parameter o : Object | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | provenance | | +| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | provenance | | +| E.cs:22:17:22:33 | call to method Source : Object | E.cs:23:25:23:25 | access to local variable o : Object | provenance | | +| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | provenance | | +| E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | provenance | | +| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | provenance | | +| E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | E.cs:24:14:24:20 | access to field Field | provenance | | +| E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | E.cs:24:14:24:20 | access to field Field | provenance | | +| E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | provenance | | +| E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | provenance | | +| E.cs:46:22:46:22 | access to parameter o : Object | E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | provenance | | +| E.cs:46:22:46:22 | access to parameter o : Object | E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | provenance | | +| E.cs:54:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | provenance | | +| E.cs:54:21:54:37 | call to method Source : Object | E.cs:55:29:55:33 | access to local variable taint : Object | provenance | | +| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | provenance | | +| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | provenance | | +| E.cs:57:14:57:17 | access to local variable refs : RefS [field RefField] : Object | E.cs:57:14:57:26 | access to field RefField | provenance | | +| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | provenance | | +| F.cs:6:28:6:29 | o1 : Object | F.cs:6:65:6:66 | access to parameter o1 : Object | provenance | | +| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | provenance | | +| F.cs:6:39:6:40 | o2 : Object | F.cs:6:78:6:79 | access to parameter o2 : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | provenance | | +| F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | provenance | | +| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:6:65:6:66 | access to parameter o1 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:6:78:6:79 | access to parameter o2 : Object | F.cs:6:54:6:81 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | provenance | | +| F.cs:10:17:10:33 | call to method Source : Object | F.cs:11:24:11:24 | access to local variable o : Object | provenance | | +| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | provenance | | +| F.cs:11:24:11:24 | access to local variable o : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | provenance | | +| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | provenance | | +| F.cs:12:14:12:14 | access to local variable f : F [field Field1] : Object | F.cs:12:14:12:21 | access to field Field1 | provenance | | +| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | provenance | | +| F.cs:15:26:15:42 | call to method Source : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | provenance | | +| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | provenance | | +| F.cs:17:14:17:14 | access to local variable f : F [field Field2] : Object | F.cs:17:14:17:21 | access to field Field2 | provenance | | +| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | provenance | | +| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:19:32:19:48 | call to method Source : Object | F.cs:19:21:19:50 | { ..., ... } : F [field Field1] : Object | provenance | | +| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | provenance | | +| F.cs:20:14:20:14 | access to local variable f : F [field Field1] : Object | F.cs:20:14:20:21 | access to field Field1 | provenance | | +| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | provenance | | +| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:23:32:23:48 | call to method Source : Object | F.cs:23:21:23:50 | { ..., ... } : F [field Field2] : Object | provenance | | +| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | provenance | | +| F.cs:25:14:25:14 | access to local variable f : F [field Field2] : Object | F.cs:25:14:25:21 | access to field Field2 | provenance | | +| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | provenance | | +| F.cs:30:17:30:33 | call to method Source : Object | F.cs:32:27:32:27 | access to local variable o : Object | provenance | | +| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:32:27:32:27 | access to local variable o : Object | F.cs:32:17:32:40 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | provenance | | +| F.cs:33:14:33:14 | access to local variable a : <>__AnonType0 [property X] : Object | F.cs:33:14:33:16 | access to property X | provenance | | +| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | provenance | | +| G.cs:7:18:7:32 | call to method Source : Elem | G.cs:9:23:9:23 | access to local variable e : Elem | provenance | | +| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:9:9:9:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:9:23:9:23 | access to local variable e : Elem | G.cs:9:9:9:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:10:18:10:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | provenance | | +| G.cs:15:18:15:32 | call to method Source : Elem | G.cs:17:24:17:24 | access to local variable e : Elem | provenance | | +| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:17:9:17:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | +| G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:18:18:18:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | provenance | | +| G.cs:23:18:23:32 | call to method Source : Elem | G.cs:25:28:25:28 | access to local variable e : Elem | provenance | | +| G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | provenance | | +| G.cs:31:18:31:32 | call to method Source : Elem | G.cs:33:29:33:29 | access to local variable e : Elem | provenance | | +| G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | +| G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | provenance | | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:39:14:39:35 | call to method GetElem | provenance | | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | provenance | | +| G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | provenance | | +| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | provenance | | +| G.cs:44:18:44:32 | call to method Source : Elem | G.cs:46:30:46:30 | access to local variable e : Elem | provenance | | +| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:16 | [post] this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | G.cs:46:9:46:16 | [post] access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:46:30:46:30 | access to local variable e : Elem | G.cs:46:9:46:21 | [post] access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:47:9:47:13 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:50:18:50:20 | this : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:52:14:52:21 | this access : G [field boxfield, field Box1, field Elem] : Elem | G.cs:52:14:52:21 | access to field boxfield : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | provenance | | +| G.cs:52:14:52:26 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:52:14:52:31 | access to field Elem | provenance | | +| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | provenance | | +| G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | provenance | | +| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | provenance | | +| G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | provenance | | +| G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | provenance | | +| G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | provenance | | +| G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | provenance | | +| G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | provenance | | +| G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | provenance | | +| H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | provenance | | +| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | provenance | | +| H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | H.cs:16:22:16:29 | access to field FieldA : Object | provenance | | +| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | provenance | | +| H.cs:16:22:16:29 | access to field FieldA : Object | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | provenance | | +| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:23:20:23:36 | call to method Source : Object | H.cs:23:9:23:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | provenance | | +| H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | provenance | | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | provenance | | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | provenance | | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | provenance | | +| H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | provenance | | +| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | provenance | | +| H.cs:25:14:25:18 | access to local variable clone : A [field FieldA] : Object | H.cs:25:14:25:25 | access to field FieldA | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : A | H.cs:36:20:36:27 | access to field FieldA : A | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | provenance | | +| H.cs:36:20:36:20 | access to parameter a : A [field FieldA] : Object | H.cs:36:20:36:27 | access to field FieldA : Object | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : A | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : A | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:36:20:36:27 | access to field FieldA : Object | H.cs:36:9:36:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:43:20:43:36 | call to method Source : Object | H.cs:43:9:43:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | H.cs:45:14:45:21 | access to field FieldB | provenance | | +| H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | H.cs:45:14:45:21 | access to field FieldB | provenance | | +| H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | provenance | | +| H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | provenance | | +| H.cs:55:21:55:28 | access to field FieldA : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | provenance | | +| H.cs:55:21:55:28 | access to field FieldA : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | provenance | | +| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:63:20:63:36 | call to method Source : Object | H.cs:63:9:63:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | provenance | | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | provenance | | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:22 | access to field FieldB | provenance | | +| H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:22 | access to field FieldB | provenance | | +| H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | provenance | | +| H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | provenance | | +| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:79:20:79:20 | access to parameter o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:79:20:79:20 | access to parameter o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | provenance | | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | provenance | | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | provenance | | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | provenance | | +| H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | provenance | | +| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | provenance | | +| H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:21 | access to field FieldA | provenance | | +| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | provenance | | +| H.cs:90:14:90:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:90:14:90:22 | access to field FieldB | provenance | | +| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:105:23:105:23 | access to parameter a : A [field FieldA] : Object | H.cs:105:9:105:12 | [post] access to local variable temp : B [field FieldB, field FieldA] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | provenance | | +| H.cs:106:29:106:32 | access to local variable temp : B [field FieldB, field FieldA] : Object | H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | provenance | | +| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | provenance | | +| H.cs:106:29:106:39 | access to field FieldB : A [field FieldA] : Object | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | provenance | | +| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:112:20:112:36 | call to method Source : Object | H.cs:112:9:112:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | provenance | | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | provenance | | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | provenance | | +| H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | provenance | | +| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | provenance | | +| H.cs:114:14:114:14 | access to local variable b : B [field FieldB] : Object | H.cs:114:14:114:21 | access to field FieldB | provenance | | +| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:122:18:122:18 | a : A [field FieldA] : Object | H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | provenance | | +| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | provenance | | +| H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | H.cs:124:16:124:34 | access to field FieldB : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:124:26:124:26 | access to parameter a : A [field FieldA] : Object | H.cs:124:16:124:27 | call to method Transform : B [field FieldB] : Object | provenance | | +| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:130:20:130:36 | call to method Source : Object | H.cs:130:9:130:9 | [post] access to local variable a : A [field FieldA] : Object | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:122:18:122:18 | a : A [field FieldA] : Object | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | provenance | | +| H.cs:131:18:131:18 | access to local variable a : A [field FieldA] : Object | H.cs:131:14:131:19 | call to method Get | provenance | | +| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | provenance | | +| H.cs:138:27:138:27 | o : A | H.cs:141:20:141:25 | ... as ... : A | provenance | | +| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:141:20:141:25 | ... as ... : A | H.cs:141:9:141:9 | [post] access to local variable a : A [field FieldA] : A | provenance | | +| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | provenance | | +| H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | H.cs:142:16:142:34 | access to field FieldB : A | provenance | | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | provenance | | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | provenance | | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | provenance | | +| H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | provenance | | +| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | provenance | | +| H.cs:147:17:147:39 | call to method Through : A | H.cs:148:14:148:14 | access to local variable a | provenance | | +| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | provenance | | +| H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | provenance | | +| H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | provenance | | +| H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | provenance | | +| H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | provenance | | +| H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | provenance | | +| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | provenance | | +| H.cs:155:17:155:30 | call to method Source : B | H.cs:156:9:156:9 | access to local variable b : B | provenance | | +| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | provenance | | +| H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | provenance | | +| H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | provenance | | +| H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | provenance | | +| H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | provenance | | +| H.cs:163:17:163:35 | call to method Source : Object | H.cs:164:22:164:22 | access to local variable o : Object | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | provenance | | +| H.cs:165:17:165:27 | (...) ... : B | H.cs:166:14:166:14 | access to local variable b | provenance | | +| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA, field FieldB] : Object | H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | provenance | | +| H.cs:165:20:165:20 | access to local variable a : A [field FieldA] : B | H.cs:165:20:165:27 | access to field FieldA : B | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B | H.cs:165:17:165:27 | (...) ... : B | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | provenance | | +| H.cs:165:20:165:27 | access to field FieldA : B [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | provenance | | +| H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | provenance | | +| H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | provenance | | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | provenance | | +| I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | provenance | | +| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | provenance | | +| I.cs:13:17:13:33 | call to method Source : Object | I.cs:15:20:15:20 | access to local variable o : Object | provenance | | +| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:15:20:15:20 | access to local variable o : Object | I.cs:15:9:15:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:16:9:16:9 | access to local variable i : I [field Field1] : Object | I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:17:9:17:9 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | provenance | | +| I.cs:18:14:18:14 | access to local variable i : I [field Field1] : Object | I.cs:18:14:18:21 | access to field Field1 | provenance | | +| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:22:9:22:9 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | provenance | | +| I.cs:23:14:23:14 | access to local variable i : I [field Field1] : Object | I.cs:23:14:23:21 | access to field Field1 | provenance | | +| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | provenance | | +| I.cs:27:14:27:14 | access to local variable i : I [field Field1] : Object | I.cs:27:14:27:21 | access to field Field1 | provenance | | +| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | provenance | | +| I.cs:31:13:31:29 | call to method Source : Object | I.cs:32:20:32:20 | access to local variable o : Object | provenance | | +| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:32:20:32:20 | access to local variable o : Object | I.cs:32:9:32:9 | [post] access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:33:9:33:9 | access to local variable i : I [field Field1] : Object | I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | provenance | | +| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | provenance | | +| I.cs:34:12:34:12 | access to local variable i : I [field Field1] : Object | I.cs:37:23:37:23 | i : I [field Field1] : Object | provenance | | +| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | provenance | | +| I.cs:37:23:37:23 | i : I [field Field1] : Object | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | provenance | | +| I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | provenance | | +| I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | provenance | | +| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | provenance | | +| I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | provenance | | +| J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | provenance | | +| J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | provenance | | +| J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | provenance | | +| J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | provenance | | +| J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | provenance | | +| J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | provenance | | +| J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | provenance | | +| J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | provenance | | +| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | provenance | | +| J.cs:21:17:21:33 | call to method Source : Object | J.cs:22:34:22:34 | access to local variable o : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | provenance | | +| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | provenance | | +| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | provenance | | +| J.cs:23:14:23:15 | access to local variable r1 : RecordClass [property Prop1] : Object | J.cs:23:14:23:21 | access to property Prop1 | provenance | | +| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | provenance | | +| J.cs:27:14:27:15 | access to local variable r2 : RecordClass [property Prop1] : Object | J.cs:27:14:27:21 | access to property Prop1 | provenance | | +| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | provenance | | +| J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | provenance | | +| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | provenance | | +| J.cs:30:36:30:52 | call to method Source : Object | J.cs:30:18:30:54 | ... with { ... } : RecordClass [property Prop2] : Object | provenance | | +| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | provenance | | +| J.cs:31:14:31:15 | access to local variable r3 : RecordClass [property Prop1] : Object | J.cs:31:14:31:21 | access to property Prop1 | provenance | | +| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | provenance | | +| J.cs:32:14:32:15 | access to local variable r3 : RecordClass [property Prop2] : Object | J.cs:32:14:32:21 | access to property Prop2 | provenance | | +| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | provenance | | +| J.cs:41:17:41:33 | call to method Source : Object | J.cs:42:35:42:35 | access to local variable o : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | provenance | | +| J.cs:43:14:43:15 | access to local variable r1 : RecordStruct [property Prop1] : Object | J.cs:43:14:43:21 | access to property Prop1 | provenance | | +| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | provenance | | +| J.cs:47:14:47:15 | access to local variable r2 : RecordStruct [property Prop1] : Object | J.cs:47:14:47:21 | access to property Prop1 | provenance | | +| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:50:36:50:52 | call to method Source : Object | J.cs:50:18:50:54 | ... with { ... } : RecordStruct [property Prop2] : Object | provenance | | +| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | provenance | | +| J.cs:51:14:51:15 | access to local variable r3 : RecordStruct [property Prop1] : Object | J.cs:51:14:51:21 | access to property Prop1 | provenance | | +| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | provenance | | +| J.cs:52:14:52:15 | access to local variable r3 : RecordStruct [property Prop2] : Object | J.cs:52:14:52:21 | access to property Prop2 | provenance | | +| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | provenance | | +| J.cs:61:17:61:33 | call to method Source : Object | J.cs:62:29:62:29 | access to local variable o : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | provenance | | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | provenance | | +| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | provenance | | +| J.cs:65:14:65:15 | access to local variable s2 : Struct [field Field] : Object | J.cs:65:14:65:21 | access to field Field | provenance | | +| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | provenance | | +| J.cs:68:35:68:51 | call to method Source : Object | J.cs:68:18:68:53 | ... with { ... } : Struct [property Prop] : Object | provenance | | +| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | provenance | | +| J.cs:69:14:69:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:69:14:69:21 | access to field Field | provenance | | +| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | provenance | | +| J.cs:70:14:70:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:70:14:70:20 | access to property Prop | provenance | | +| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | provenance | | +| J.cs:79:17:79:33 | call to method Source : Object | J.cs:80:35:80:35 | access to local variable o : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | provenance | | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | provenance | | +| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | provenance | | +| J.cs:84:14:84:15 | access to local variable s2 : Struct [property Prop] : Object | J.cs:84:14:84:20 | access to property Prop | provenance | | +| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | provenance | | +| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | provenance | | +| J.cs:86:36:86:52 | call to method Source : Object | J.cs:86:18:86:54 | ... with { ... } : Struct [field Field] : Object | provenance | | +| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | provenance | | +| J.cs:87:14:87:15 | access to local variable s3 : Struct [field Field] : Object | J.cs:87:14:87:21 | access to field Field | provenance | | +| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | provenance | | +| J.cs:88:14:88:15 | access to local variable s3 : Struct [property Prop] : Object | J.cs:88:14:88:20 | access to property Prop | provenance | | +| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | provenance | | +| J.cs:97:17:97:33 | call to method Source : Object | J.cs:99:28:99:28 | access to local variable o : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:99:28:99:28 | access to local variable o : Object | J.cs:99:18:99:41 | { ..., ... } : <>__AnonType0 [property X] : Object | provenance | | +| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | provenance | | +| J.cs:102:14:102:15 | access to local variable a2 : <>__AnonType0 [property X] : Object | J.cs:102:14:102:17 | access to property X | provenance | | +| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:105:32:105:48 | call to method Source : Object | J.cs:105:18:105:50 | ... with { ... } : <>__AnonType0 [property Y] : Object | provenance | | +| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | provenance | | +| J.cs:106:14:106:15 | access to local variable a3 : <>__AnonType0 [property X] : Object | J.cs:106:14:106:17 | access to property X | provenance | | +| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | provenance | | +| J.cs:107:14:107:15 | access to local variable a3 : <>__AnonType0 [property Y] : Object | J.cs:107:14:107:17 | access to property Y | provenance | | +| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:119:20:119:34 | call to method Source : Int32 | J.cs:119:13:119:13 | [post] access to local variable a : Int32[] [element] : Int32 | provenance | | +| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | provenance | | +| J.cs:125:14:125:14 | access to local variable a : Int32[] [element] : Int32 | J.cs:125:14:125:17 | access to array element : Int32 | provenance | | +| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | +| J.cs:125:14:125:17 | access to array element : Int32 | J.cs:125:14:125:17 | (...) ... | provenance | | nodes | A.cs:5:17:5:28 | call to method Source : C | semmle.label | call to method Source : C | | A.cs:5:17:5:28 | call to method Source : C | semmle.label | call to method Source : C | @@ -1281,34 +1257,6 @@ nodes | C.cs:27:14:27:15 | this access : C [property s5] : Elem | semmle.label | this access : C [property s5] : Elem | | C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | | C.cs:28:14:28:15 | access to property s6 | semmle.label | access to property s6 | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | semmle.label | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:18:3:19 | [post] this access : C_no_ctor [field s1] : Elem | semmle.label | [post] this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:3:23:3:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:7:23:7:37 | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | semmle.label | object creation of type C_no_ctor : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | semmle.label | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:8:9:8:9 | access to local variable c : C_no_ctor [field s1] : Elem | semmle.label | access to local variable c : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | semmle.label | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:11:17:11:18 | this : C_no_ctor [field s1] : Elem | semmle.label | this : C_no_ctor [field s1] : Elem | -| C_ctor.cs:13:19:13:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:13:19:13:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | semmle.label | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:13:19:13:20 | this access : C_no_ctor [field s1] : Elem | semmle.label | this access : C_no_ctor [field s1] : Elem | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | semmle.label | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:18:19:19 | [post] this access : C_with_ctor [field s1] : Elem | semmle.label | [post] this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:19:23:19:42 | call to method Source : Elem | semmle.label | call to method Source : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:23:25:23:41 | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | semmle.label | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:24:9:24:9 | access to local variable c : C_with_ctor [field s1] : Elem | semmle.label | access to local variable c : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | semmle.label | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:29:17:29:18 | this : C_with_ctor [field s1] : Elem | semmle.label | this : C_with_ctor [field s1] : Elem | -| C_ctor.cs:31:19:31:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:31:19:31:20 | access to field s1 | semmle.label | access to field s1 | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | semmle.label | this access : C_with_ctor [field s1] : Elem | -| C_ctor.cs:31:19:31:20 | this access : C_with_ctor [field s1] : Elem | semmle.label | this access : C_with_ctor [field s1] : Elem | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:9:8:11 | this : D [field trivialPropField] : Object | semmle.label | this : D [field trivialPropField] : Object | | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | @@ -2121,10 +2069,6 @@ subpaths | C.cs:27:14:27:15 | access to property s5 | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:27:14:27:15 | access to property s5 | $@ | C.cs:7:37:7:51 | call to method Source : Elem | call to method Source : Elem | | C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | | C.cs:28:14:28:15 | access to property s6 | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | $@ | C.cs:8:30:8:44 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:13:19:13:20 | access to field s1 | C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | $@ | C_ctor.cs:3:23:3:42 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:13:19:13:20 | access to field s1 | C_ctor.cs:3:23:3:42 | call to method Source : Elem | C_ctor.cs:13:19:13:20 | access to field s1 | $@ | C_ctor.cs:3:23:3:42 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:31:19:31:20 | access to field s1 | C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | $@ | C_ctor.cs:19:23:19:42 | call to method Source : Elem | call to method Source : Elem | -| C_ctor.cs:31:19:31:20 | access to field s1 | C_ctor.cs:19:23:19:42 | call to method Source : Elem | C_ctor.cs:31:19:31:20 | access to field s1 | $@ | C_ctor.cs:19:23:19:42 | call to method Source : Elem | call to method Source : Elem | | D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:32:14:32:23 | access to property AutoProp | D.cs:29:17:29:33 | call to method Source : Object | D.cs:32:14:32:23 | access to property AutoProp | $@ | D.cs:29:17:29:33 | call to method Source : Object | call to method Source : Object | | D.cs:39:14:39:26 | access to property TrivialProp | D.cs:37:26:37:42 | call to method Source : Object | D.cs:39:14:39:26 | access to property TrivialProp | $@ | D.cs:37:26:37:42 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected index 00d45708afc..4d549939f1c 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -1,344 +1,344 @@ edges -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | -| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | -| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | -| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | -| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | -| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | -| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | -| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | -| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | -| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | -| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | -| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | -| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | -| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | -| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | -| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | -| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | -| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | -| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | -| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | -| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | -| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | -| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | -| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | -| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | -| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | -| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | -| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | -| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | -| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | -| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | -| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | -| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | -| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | -| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | -| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | -| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | -| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | -| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | -| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | -| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | -| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | -| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | -| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | -| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | -| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | -| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | -| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | -| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | -| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | -| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | -| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | -| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | -| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | -| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | -| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | -| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | -| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | -| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | -| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | -| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | -| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | -| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | -| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | -| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | -| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | -| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | -| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | -| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | -| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | -| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | -| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | -| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | -| GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | -| GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | -| GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | -| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | -| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | -| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | -| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | -| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | -| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | -| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | -| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | -| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | -| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | -| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | -| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | -| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | -| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | -| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | -| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | -| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | provenance | | +| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | +| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | provenance | | +| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | provenance | | +| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | provenance | | +| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | provenance | | +| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | provenance | | +| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | provenance | | +| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | provenance | | +| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | provenance | | +| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | provenance | | +| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | provenance | | +| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | provenance | | +| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | provenance | | +| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | provenance | | +| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | provenance | | +| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | provenance | | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | provenance | | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | provenance | | +| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | provenance | | +| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | provenance | | +| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | provenance | | +| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | provenance | | +| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | provenance | | +| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | provenance | | +| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | provenance | | +| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | provenance | | +| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | provenance | | +| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | provenance | | +| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | provenance | | +| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | provenance | | +| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | provenance | | +| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | provenance | | +| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | provenance | | +| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | provenance | | +| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | provenance | | +| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | provenance | | +| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | provenance | | +| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | provenance | | +| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | provenance | | +| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | provenance | | +| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | provenance | | +| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | provenance | | +| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | provenance | | +| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | provenance | | +| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | provenance | | +| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | provenance | | +| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | provenance | | +| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | provenance | | +| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | provenance | | +| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | provenance | | +| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | provenance | | +| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | provenance | | +| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | provenance | | +| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | provenance | | +| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | provenance | | +| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | provenance | | +| GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | provenance | | +| GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | provenance | | +| GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | provenance | | +| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | provenance | | +| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | provenance | | +| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | provenance | | +| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | provenance | | +| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | provenance | | +| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | provenance | | +| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | provenance | | +| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | provenance | | +| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | provenance | | +| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | provenance | | +| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | provenance | | +| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | provenance | | +| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | provenance | | +| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | provenance | | +| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | provenance | | +| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | provenance | | +| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | provenance | | +| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | provenance | | +| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | provenance | | nodes | Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String | | Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index 8dd706eb671..ace244f6961 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -1,387 +1,387 @@ edges -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | -| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | -| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | -| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | -| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | -| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | -| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | -| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | -| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | -| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | -| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | -| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | -| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | -| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | -| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | -| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | -| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | -| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | -| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | -| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | -| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | -| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | -| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | -| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | -| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | -| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | -| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | -| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | -| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | -| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | -| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | -| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | -| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | -| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | -| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | -| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | -| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | -| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | -| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | -| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | -| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | -| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | -| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | -| GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | -| GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | -| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | -| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | -| GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | -| GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | GlobalDataFlow.cs:95:15:95:20 | access to local variable sink21 | -| GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | -| GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | GlobalDataFlow.cs:98:15:98:20 | access to local variable sink22 | -| GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | -| GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | GlobalDataFlow.cs:101:15:101:21 | access to local variable sink21b | -| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | -| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | -| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | -| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | -| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | -| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | -| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | -| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | -| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | -| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | -| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | -| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | -| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | -| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | -| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | -| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | -| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | -| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | -| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | -| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | -| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | -| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | -| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | -| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | -| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | -| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | -| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | -| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | -| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | -| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | -| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | -| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | -| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | -| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | -| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | -| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | -| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | -| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | -| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | -| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | -| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | -| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | -| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | -| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | -| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | -| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | -| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | -| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | -| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | -| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | -| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | -| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | -| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | -| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | -| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | -| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | -| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | -| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | -| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | -| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | -| GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | GlobalDataFlow.cs:449:15:449:20 | access to local variable sink44 | -| GlobalDataFlow.cs:448:51:448:64 | "taint source" : String | GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | -| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | -| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | -| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | -| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | -| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | -| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | -| GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | -| GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | -| GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | -| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | -| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | -| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | -| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | -| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | -| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | -| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | -| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | -| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | -| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | -| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | -| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | -| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | -| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | -| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | -| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | -| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | -| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | -| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | -| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | -| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | -| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | -| GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | -| GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | -| GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:31:21:31:22 | access to local variable sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:35:20:35:21 | access to local variable sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | -| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | -| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:31:21:31:22 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:32:15:32:19 | access to local variable sink0 | -| GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:35:20:35:21 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:37:15:37:19 | access to local variable sink1 | -| GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | -| GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:42:15:42:19 | access to local variable sink2 | -| GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:22 | access to local variable sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | -| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:49:21:49:22 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | -| GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:50:15:50:19 | access to local variable sink3 | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | -| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | -| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | -| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | -| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:30:19:30:24 | access to local variable sink29 | provenance | | +| Capture.cs:7:20:7:26 | tainted : String | Capture.cs:61:36:61:42 | access to parameter tainted : String | provenance | | +| Capture.cs:50:50:50:55 | sink39 : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | +| Capture.cs:61:36:61:42 | access to parameter tainted : String | Capture.cs:50:50:50:55 | sink39 : String | provenance | | +| Capture.cs:69:13:69:35 | SSA def(sink30) : String | Capture.cs:72:15:72:20 | access to local variable sink30 | provenance | | +| Capture.cs:69:22:69:35 | "taint source" : String | Capture.cs:69:13:69:35 | SSA def(sink30) : String | provenance | | +| Capture.cs:79:17:79:39 | SSA def(sink31) : String | Capture.cs:84:15:84:20 | access to local variable sink31 | provenance | | +| Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:79:17:79:39 | SSA def(sink31) : String | provenance | | +| Capture.cs:89:13:89:35 | SSA def(sink32) : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:89:13:89:35 | SSA def(sink32) : String | provenance | | +| Capture.cs:115:17:115:39 | SSA def(sink40) : String | Capture.cs:122:15:122:20 | access to local variable sink40 | provenance | | +| Capture.cs:115:26:115:39 | "taint source" : String | Capture.cs:115:17:115:39 | SSA def(sink40) : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:133:15:133:20 | access to local variable sink33 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:145:15:145:20 | access to local variable sink34 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:154:15:154:20 | access to local variable sink35 | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:168:25:168:31 | access to parameter tainted : String | provenance | | +| Capture.cs:125:25:125:31 | tainted : String | Capture.cs:194:25:194:31 | access to parameter tainted : String | provenance | | +| Capture.cs:160:22:160:38 | call to local function CaptureThrough4 : String | Capture.cs:161:15:161:20 | access to local variable sink36 | provenance | | +| Capture.cs:168:25:168:31 | access to parameter tainted : String | Capture.cs:169:15:169:20 | access to local variable sink37 | provenance | | +| Capture.cs:188:26:188:26 | s : String | Capture.cs:191:20:191:22 | call to local function M : String | provenance | | +| Capture.cs:194:22:194:32 | call to local function Id : String | Capture.cs:195:15:195:20 | access to local variable sink38 | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:188:26:188:26 | s : String | provenance | | +| Capture.cs:194:25:194:31 | access to parameter tainted : String | Capture.cs:194:22:194:32 | call to local function Id : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:19:15:19:29 | access to field SinkField0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:27:15:27:32 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:36:13:36:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:38:35:38:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | provenance | | +| GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | GlobalDataFlow.cs:45:50:45:59 | access to parameter sinkParam2 | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:45:30:45:39 | sinkParam2 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:46:13:46:30 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:53:20:53:37 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:54:15:54:15 | x : String | GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:54:24:54:24 | access to parameter x : String | GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:54:28:54:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:382:41:382:41 | x : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:55:44:55:61 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:56:28:56:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:57:37:57:37 | x : String | GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:57:46:57:46 | access to parameter x : String | GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:58:35:58:52 | access to property SinkProperty0 : String | GlobalDataFlow.cs:396:52:396:52 | x : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | provenance | | +| GlobalDataFlow.cs:65:22:65:39 | access to property SinkProperty0 : String | GlobalDataFlow.cs:427:9:427:11 | value : String | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | provenance | | +| GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:71:21:71:46 | call to method Return : String | provenance | | +| GlobalDataFlow.cs:71:28:71:45 | access to property SinkProperty0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:74:15:74:19 | access to local variable sink1 | provenance | | +| GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | provenance | | +| GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | GlobalDataFlow.cs:73:21:73:101 | (...) ... : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:73:29:73:101 | call to method Invoke : String | provenance | | +| GlobalDataFlow.cs:73:94:73:98 | access to local variable sink0 : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | provenance | | +| GlobalDataFlow.cs:76:19:76:23 | access to local variable sink1 : String | GlobalDataFlow.cs:304:32:304:32 | x : String | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:77:15:77:19 | access to local variable sink2 | provenance | | +| GlobalDataFlow.cs:76:30:76:34 | SSA def(sink2) : String | GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | provenance | | +| GlobalDataFlow.cs:79:19:79:23 | access to local variable sink2 : String | GlobalDataFlow.cs:310:32:310:32 | x : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:80:15:80:19 | access to local variable sink3 | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:79:30:79:34 | SSA def(sink3) : String | GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | provenance | | +| GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | GlobalDataFlow.cs:81:22:81:93 | call to method First : String | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:82:15:82:20 | access to local variable sink13 | provenance | | +| GlobalDataFlow.cs:81:22:81:93 | call to method First : String | GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:81:22:81:85 | call to method SelectEven : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:81:23:81:65 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:59:81:63 | access to local variable sink3 : String | GlobalDataFlow.cs:81:57:81:65 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:83:22:83:95 | call to method First : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:84:15:84:20 | access to local variable sink14 | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:22:83:95 | call to method First : String | GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:83:22:83:87 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | provenance | | +| GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:83:23:83:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:83:59:83:64 | access to local variable sink13 : String | GlobalDataFlow.cs:83:57:83:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:85:22:85:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:86:15:86:20 | access to local variable sink15 | provenance | | +| GlobalDataFlow.cs:85:22:85:136 | call to method First : String | GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | provenance | | +| GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:85:22:85:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:85:23:85:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:85:59:85:64 | access to local variable sink14 : String | GlobalDataFlow.cs:85:57:85:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | GlobalDataFlow.cs:87:22:87:136 | call to method First : String | provenance | | +| GlobalDataFlow.cs:87:22:87:136 | call to method First : String | GlobalDataFlow.cs:88:15:88:20 | access to local variable sink16 | provenance | | +| GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | GlobalDataFlow.cs:87:22:87:128 | call to method Zip : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:87:70:87:113 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:87:106:87:111 | access to local variable sink15 : String | GlobalDataFlow.cs:87:104:87:113 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | GlobalDataFlow.cs:90:15:90:20 | access to local variable sink17 | provenance | | +| GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | GlobalDataFlow.cs:89:22:89:110 | call to method Aggregate : String | provenance | | +| GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:89:23:89:66 | (...) ... : null [element] : String | provenance | | +| GlobalDataFlow.cs:89:59:89:64 | access to local variable sink14 : String | GlobalDataFlow.cs:89:57:89:66 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:92:15:92:20 | access to local variable sink18 | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | provenance | | +| GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | provenance | | +| GlobalDataFlow.cs:91:75:91:80 | access to local variable sink14 : String | GlobalDataFlow.cs:91:22:91:110 | call to method Aggregate : String | provenance | | +| GlobalDataFlow.cs:94:24:94:29 | access to local variable sink18 : String | GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | provenance | | +| GlobalDataFlow.cs:94:36:94:41 | SSA def(sink21) : Int32 | GlobalDataFlow.cs:95:15:95:20 | access to local variable sink21 | provenance | | +| GlobalDataFlow.cs:97:23:97:28 | access to local variable sink18 : String | GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | provenance | | +| GlobalDataFlow.cs:97:35:97:40 | SSA def(sink22) : Boolean | GlobalDataFlow.cs:98:15:98:20 | access to local variable sink22 | provenance | | +| GlobalDataFlow.cs:100:24:100:29 | access to local variable sink18 : String | GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | provenance | | +| GlobalDataFlow.cs:100:82:100:88 | SSA def(sink21b) : Int32 | GlobalDataFlow.cs:101:15:101:21 | access to local variable sink21b | provenance | | +| GlobalDataFlow.cs:138:40:138:40 | x : String | GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:138:45:138:64 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:138:63:138:63 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:140:15:140:19 | access to local variable sink4 | provenance | | +| GlobalDataFlow.cs:139:21:139:34 | delegate call : String | GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:138:40:138:40 | x : String | provenance | | +| GlobalDataFlow.cs:139:29:139:33 | access to local variable sink3 : String | GlobalDataFlow.cs:139:21:139:34 | delegate call : String | provenance | | +| GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | GlobalDataFlow.cs:148:15:148:19 | access to local variable sink5 | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:147:21:147:44 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:147:39:147:43 | access to local variable sink4 : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | GlobalDataFlow.cs:158:15:158:19 | access to local variable sink6 | provenance | | +| GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | GlobalDataFlow.cs:161:15:161:19 | access to local variable sink7 | provenance | | +| GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | GlobalDataFlow.cs:164:15:164:19 | access to local variable sink8 | provenance | | +| GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | GlobalDataFlow.cs:165:22:165:39 | call to method First : String | provenance | | +| GlobalDataFlow.cs:165:22:165:39 | call to method First : String | GlobalDataFlow.cs:166:15:166:20 | access to local variable sink12 | provenance | | +| GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | GlobalDataFlow.cs:168:15:168:20 | access to local variable sink23 | provenance | | +| GlobalDataFlow.cs:183:35:183:48 | "taint source" : String | GlobalDataFlow.cs:184:21:184:26 | delegate call : String | provenance | | +| GlobalDataFlow.cs:184:21:184:26 | delegate call : String | GlobalDataFlow.cs:185:15:185:19 | access to local variable sink9 | provenance | | +| GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | provenance | | +| GlobalDataFlow.cs:193:22:193:48 | access to property Value : String | GlobalDataFlow.cs:194:15:194:20 | access to local variable sink10 | provenance | | +| GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | GlobalDataFlow.cs:202:15:202:20 | access to local variable sink19 | provenance | | +| GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:38:211:75 | call to method AsQueryable : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | GlobalDataFlow.cs:211:38:211:61 | array creation of type String[] : null [element] : String | provenance | | +| GlobalDataFlow.cs:211:46:211:59 | "taint source" : String | GlobalDataFlow.cs:211:44:211:61 | { ..., ... } : null [element] : String | provenance | | +| GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | GlobalDataFlow.cs:214:58:214:68 | access to parameter sinkParam10 | provenance | | +| GlobalDataFlow.cs:215:71:215:71 | x : String | GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:215:89:215:89 | access to parameter x : String | GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:214:35:214:45 | sinkParam10 : String | provenance | | +| GlobalDataFlow.cs:216:22:216:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:216:22:216:39 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:216:22:216:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:216:22:216:47 | call to method First : String | GlobalDataFlow.cs:217:15:217:20 | access to local variable sink24 | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:215:71:215:71 | x : String | provenance | | +| GlobalDataFlow.cs:218:22:218:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | provenance | | +| GlobalDataFlow.cs:218:22:218:39 | call to method Select : IQueryable [element] : String | GlobalDataFlow.cs:218:22:218:47 | call to method First : String | provenance | | +| GlobalDataFlow.cs:218:22:218:47 | call to method First : String | GlobalDataFlow.cs:219:15:219:20 | access to local variable sink25 | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:220:22:220:28 | access to local variable tainted : IQueryable [element] : String | GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | provenance | | +| GlobalDataFlow.cs:220:22:220:49 | call to method Select : IEnumerable [element] : String | GlobalDataFlow.cs:220:22:220:57 | call to method First : String | provenance | | +| GlobalDataFlow.cs:220:22:220:57 | call to method First : String | GlobalDataFlow.cs:221:15:221:20 | access to local variable sink26 | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:241:35:241:48 | "taint source" : String | GlobalDataFlow.cs:241:20:241:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:242:22:242:25 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | provenance | | +| GlobalDataFlow.cs:242:22:242:32 | access to property Result : String | GlobalDataFlow.cs:243:15:243:20 | access to local variable sink41 | provenance | | +| GlobalDataFlow.cs:244:22:244:31 | await ... : String | GlobalDataFlow.cs:245:15:245:20 | access to local variable sink42 | provenance | | +| GlobalDataFlow.cs:244:28:244:31 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:244:22:244:31 | await ... : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | GlobalDataFlow.cs:260:15:260:24 | access to parameter sinkParam0 | provenance | | +| GlobalDataFlow.cs:259:16:259:25 | access to parameter sinkParam0 : String | GlobalDataFlow.cs:257:26:257:35 | sinkParam0 : String | provenance | | +| GlobalDataFlow.cs:263:26:263:35 | sinkParam1 : String | GlobalDataFlow.cs:265:15:265:24 | access to parameter sinkParam1 | provenance | | +| GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | GlobalDataFlow.cs:270:15:270:24 | access to parameter sinkParam3 | provenance | | +| GlobalDataFlow.cs:273:26:273:35 | sinkParam4 : String | GlobalDataFlow.cs:275:15:275:24 | access to parameter sinkParam4 | provenance | | +| GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | GlobalDataFlow.cs:280:15:280:24 | access to parameter sinkParam5 | provenance | | +| GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | GlobalDataFlow.cs:285:15:285:24 | access to parameter sinkParam6 | provenance | | +| GlobalDataFlow.cs:288:26:288:35 | sinkParam7 : String | GlobalDataFlow.cs:290:15:290:24 | access to parameter sinkParam7 | provenance | | +| GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | provenance | | +| GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:300:17:300:38 | call to method ApplyFunc : String | provenance | | +| GlobalDataFlow.cs:300:37:300:37 | access to parameter x : String | GlobalDataFlow.cs:387:46:387:46 | x : String | provenance | | +| GlobalDataFlow.cs:304:32:304:32 | x : String | GlobalDataFlow.cs:306:9:306:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:310:32:310:32 | x : String | GlobalDataFlow.cs:312:9:312:13 | SSA def(y) : String | provenance | | +| GlobalDataFlow.cs:315:31:315:40 | sinkParam8 : String | GlobalDataFlow.cs:317:15:317:24 | access to parameter sinkParam8 | provenance | | +| GlobalDataFlow.cs:321:32:321:41 | sinkParam9 : String | GlobalDataFlow.cs:323:15:323:24 | access to parameter sinkParam9 | provenance | | +| GlobalDataFlow.cs:327:32:327:42 | sinkParam11 : String | GlobalDataFlow.cs:329:15:329:25 | access to parameter sinkParam11 | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:157:21:157:25 | call to method Out : String | provenance | | +| GlobalDataFlow.cs:341:16:341:29 | "taint source" : String | GlobalDataFlow.cs:193:22:193:42 | object creation of type Lazy : Lazy [property Value] : String | provenance | | +| GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | GlobalDataFlow.cs:160:20:160:24 | SSA def(sink7) : String | provenance | | +| GlobalDataFlow.cs:346:13:346:26 | "taint source" : String | GlobalDataFlow.cs:346:9:346:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | GlobalDataFlow.cs:163:20:163:24 | SSA def(sink8) : String | provenance | | +| GlobalDataFlow.cs:351:13:351:26 | "taint source" : String | GlobalDataFlow.cs:351:9:351:26 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:357:22:357:35 | "taint source" : String | GlobalDataFlow.cs:165:22:165:31 | call to method OutYield : IEnumerable [element] : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:382:41:382:41 | x : String | GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:54:15:54:15 | x : String | provenance | | +| GlobalDataFlow.cs:384:11:384:11 | access to parameter x : String | GlobalDataFlow.cs:268:26:268:35 | sinkParam3 : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:387:46:387:46 | x : String | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:396:52:396:52 | x : String | GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:57:37:57:37 | x : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:278:26:278:35 | sinkParam5 : String | provenance | | +| GlobalDataFlow.cs:398:11:398:11 | access to parameter x : String | GlobalDataFlow.cs:283:26:283:35 | sinkParam6 : String | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:404:15:404:20 | access to local variable sink11 | provenance | | +| GlobalDataFlow.cs:401:39:401:45 | tainted : String | GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | provenance | | +| GlobalDataFlow.cs:405:16:405:21 | access to local variable sink11 : String | GlobalDataFlow.cs:167:22:167:43 | call to method TaintedParam : String | provenance | | +| GlobalDataFlow.cs:427:9:427:11 | value : String | GlobalDataFlow.cs:427:41:427:46 | access to local variable sink20 | provenance | | +| GlobalDataFlow.cs:438:22:438:35 | "taint source" : String | GlobalDataFlow.cs:201:22:201:32 | access to property OutProperty : String | provenance | | +| GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | GlobalDataFlow.cs:449:15:449:20 | access to local variable sink44 | provenance | | +| GlobalDataFlow.cs:448:51:448:64 | "taint source" : String | GlobalDataFlow.cs:448:22:448:65 | call to method Join : String | provenance | | +| GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:457:35:457:48 | "taint source" : String | GlobalDataFlow.cs:457:20:457:49 | call to method Run : Task [property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:28 | access to local variable task : Task [property Result] : String | GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:458:25:458:50 | call to method ConfigureAwait : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:31 | access to local variable awaitable : ConfiguredTaskAwaitable [synthetic m_configuredTaskAwaiter, synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:459:23:459:44 | call to method GetAwaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | provenance | | +| GlobalDataFlow.cs:460:22:460:28 | access to local variable awaiter : ConfiguredTaskAwaitable.ConfiguredTaskAwaiter [synthetic m_task_configured_task_awaitable, property Result] : String | GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | provenance | | +| GlobalDataFlow.cs:460:22:460:40 | call to method GetResult : String | GlobalDataFlow.cs:461:15:461:20 | access to local variable sink45 | provenance | | +| GlobalDataFlow.cs:466:53:466:55 | arg : String | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | provenance | | +| GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | provenance | | +| GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | provenance | | +| GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:22 | access to field field | provenance | | +| GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:22 | access to field field | provenance | | +| GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:498:15:498:16 | access to local variable y1 : SimpleClass [field field] : String | GlobalDataFlow.cs:498:15:498:22 | access to field field | provenance | | +| GlobalDataFlow.cs:499:15:499:16 | access to local variable y2 : SimpleClass [field field] : String | GlobalDataFlow.cs:499:15:499:22 | access to field field | provenance | | +| GlobalDataFlow.cs:500:15:500:16 | access to local variable y3 : SimpleClass [field field] : String | GlobalDataFlow.cs:500:15:500:22 | access to field field | provenance | | +| GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:509:15:509:15 | access to local variable x : SubSimpleClass [field field] : String | GlobalDataFlow.cs:509:15:509:21 | access to field field | provenance | | +| GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:516:15:516:15 | access to parameter x : SimpleClass [field field] : String | GlobalDataFlow.cs:516:15:516:21 | access to field field | provenance | | +| GlobalDataFlow.cs:517:15:517:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:517:15:517:21 | access to field field | provenance | | +| GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:531:15:531:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:531:15:531:21 | access to field field | provenance | | +| GlobalDataFlow.cs:532:15:532:15 | access to local variable y : SimpleClass [field field] : String | GlobalDataFlow.cs:532:15:532:21 | access to field field | provenance | | +| GlobalDataFlow.cs:533:15:533:15 | access to local variable z : SimpleClass [field field] : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | provenance | | +| GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:539:15:539:16 | access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | provenance | | +| GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:547:15:547:15 | access to local variable x : SimpleClass [field field] : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | provenance | | +| GlobalDataFlow.cs:553:71:553:71 | e : null [element] : String | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | provenance | | +| GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | provenance | | +| GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | GlobalDataFlow.cs:556:22:556:22 | SSA def(x) : String | provenance | | +| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | provenance | | +| GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | provenance | | +| GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | provenance | | +| GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | provenance | | +| GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:31:21:31:22 | access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:35:20:35:21 | access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | provenance | | +| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | provenance | | +| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:31:21:31:22 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:31:21:31:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:32:15:32:19 | access to local variable sink0 | provenance | | +| GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:35:20:35:21 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:35:9:35:11 | [post] access to local variable sb1 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:36:21:36:23 | access to local variable sb1 : StringBuilder | GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:36:21:36:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:37:15:37:19 | access to local variable sink1 | provenance | | +| GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:40:20:40:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:40:9:40:11 | [post] access to local variable sb2 : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:41:21:41:23 | access to local variable sb2 : StringBuilder | GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:41:21:41:34 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:42:15:42:19 | access to local variable sink2 | provenance | | +| GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:22 | access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | provenance | | +| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:49:21:49:22 | access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | provenance | | +| GlobalDataFlowStringBuilder.cs:49:21:49:33 | call to method ToString : String | GlobalDataFlowStringBuilder.cs:50:15:50:19 | access to local variable sink3 | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | provenance | | +| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:11:19:11:19 | access to local variable x | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | provenance | | +| Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:20:22:20:30 | call to method Return : String | provenance | | +| Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | provenance | | +| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:34:19:34:19 | access to local variable x | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | provenance | | +| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | provenance | | +| Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | provenance | | nodes | Capture.cs:7:20:7:26 | tainted : String | semmle.label | tainted : String | | Capture.cs:12:19:12:24 | access to local variable sink27 | semmle.label | access to local variable sink27 | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index f2f8dac0139..9c4e141a490 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -5137,6 +5137,8 @@ summary | System.Collections.Immutable;ImmutableArray;false;CreateRange;(System.Collections.Immutable.ImmutableArray,System.Int32,System.Int32,System.Func,TArg);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableArray;false;CreateRange;(System.Collections.Immutable.ImmutableArray,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableArray;false;CreateRange;(System.Collections.Immutable.ImmutableArray,System.Int32,System.Int32,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Collections.Immutable;ImmutableArray;false;ToImmutableArray;(System.ReadOnlySpan);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableArray;false;ToImmutableArray;(System.Span);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableArray;false;ToImmutableArray;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableArray+Builder;false;Add;(T);;Argument[0];Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableArray+Builder;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this].Element;value;manual | @@ -9803,9 +9805,9 @@ summary | System.Linq;Enumerable;false;Concat;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;Count;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;Enumerable;false;Count;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | -| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;value;manual | +| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;Distinct;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;Distinct;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;DistinctBy;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -9814,8 +9816,8 @@ summary | System.Linq;Enumerable;false;ElementAt;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;Enumerable;false;ElementAtOrDefault;(System.Collections.Generic.IEnumerable,System.Index);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Linq;Enumerable;false;ElementAtOrDefault;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | +| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;ExceptBy;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Enumerable;false;ExceptBy;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Enumerable;false;First;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | @@ -10238,17 +10240,17 @@ summary | System.Linq;ParallelEnumerable;false;Concat;(System.Linq.ParallelQuery,System.Linq.ParallelQuery);;Argument[1].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;Count;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;ParallelEnumerable;false;Count;(System.Linq.ParallelQuery,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | -| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[1];ReturnValue;value;manual | +| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[1];ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;Distinct;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;Distinct;(System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;ElementAt;(System.Linq.ParallelQuery,System.Int32);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;ParallelEnumerable;false;ElementAtOrDefault;(System.Linq.ParallelQuery,System.Int32);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;First;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;ParallelEnumerable;false;First;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;ParallelEnumerable;false;First;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue;value;manual | @@ -10624,17 +10626,17 @@ summary | System.Linq;Queryable;false;Concat;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Count;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;Queryable;false;Count;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | -| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[1];ReturnValue;value;manual | +| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[1];ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Distinct;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Distinct;(System.Linq.IQueryable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;DistinctBy;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;DistinctBy;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;ElementAt;(System.Linq.IQueryable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;Queryable;false;ElementAtOrDefault;(System.Linq.IQueryable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | +| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;ExceptBy;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;ExceptBy;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;First;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue;value;manual | @@ -17709,6 +17711,9 @@ summary | System;MemoryExtensions;false;AsMemory;(T[],System.Range);;Argument[0].Element;ReturnValue;taint;df-generated | | System;MemoryExtensions;false;EnumerateLines;(System.ReadOnlySpan);;Argument[0];ReturnValue;taint;df-generated | | System;MemoryExtensions;false;EnumerateRunes;(System.ReadOnlySpan);;Argument[0];ReturnValue;taint;df-generated | +| System;MemoryExtensions;false;Replace;(System.ReadOnlySpan,System.Span,T,T);;Argument[0].Element;Argument[1].Element;value;manual | +| System;MemoryExtensions;false;Replace;(System.ReadOnlySpan,System.Span,T,T);;Argument[3];Argument[1].Element;value;manual | +| System;MemoryExtensions;false;Replace;(System.Span,T,T);;Argument[2];Argument[0].Element;value;manual | | System;MemoryExtensions;false;Sort;(System.Span,System.Comparison);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System;MemoryExtensions;false;Sort;(System.Span,System.Span,System.Comparison);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System;MemoryExtensions;false;Trim;(System.Memory);;Argument[0];ReturnValue;taint;df-generated | @@ -17785,7 +17790,17 @@ summary | System;ReadOnlyMemory;false;Slice;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | | System;ReadOnlyMemory;false;Slice;(System.Int32,System.Int32);;Argument[this];ReturnValue;taint;df-generated | | System;ReadOnlyMemory;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System;ReadOnlySpan;false;CopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | | System;ReadOnlySpan;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | +| System;ReadOnlySpan;false;GetPinnableReference;();;Argument[this].Element;ReturnValue;value;manual | +| System;ReadOnlySpan;false;ReadOnlySpan;(T);;Argument[0];Argument[this].Element;value;manual | +| System;ReadOnlySpan;false;ReadOnlySpan;(T[]);;Argument[0].Element;Argument[this].Element;value;manual | +| System;ReadOnlySpan;false;ReadOnlySpan;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[this].Element;value;manual | +| System;ReadOnlySpan;false;Slice;(System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;ReadOnlySpan;false;Slice;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;ReadOnlySpan;false;ToArray;();;Argument[this].Element;ReturnValue.Element;value;manual | +| System;ReadOnlySpan;false;TryCopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | +| System;ReadOnlySpan;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System;ResolveEventHandler;false;BeginInvoke;(System.Object,System.ResolveEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System;RuntimeFieldHandle;false;FromIntPtr;(System.IntPtr);;Argument[0];ReturnValue;taint;df-generated | | System;RuntimeFieldHandle;false;ToIntPtr;(System.RuntimeFieldHandle);;Argument[0];ReturnValue;taint;df-generated | @@ -17833,7 +17848,19 @@ summary | System;Single;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;taint;df-generated | | System;Single;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;taint;df-generated | | System;Single;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;taint;df-generated | +| System;Span;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System;Span;false;CopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | +| System;Span;false;Fill;(T);;Argument[0];Argument[this].Element;value;manual | | System;Span;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | +| System;Span;false;GetPinnableReference;();;Argument[this].Element;ReturnValue;value;manual | +| System;Span;false;Slice;(System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;Span;false;Slice;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;Span;false;Span;(T);;Argument[0];Argument[this].Element;value;manual | +| System;Span;false;Span;(T[]);;Argument[0].Element;Argument[this].Element;value;manual | +| System;Span;false;Span;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[this].Element;value;manual | +| System;Span;false;ToArray;();;Argument[this].Element;ReturnValue.Element;value;manual | +| System;Span;false;TryCopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | +| System;Span;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System;String;false;Clone;();;Argument[this];ReturnValue;value;manual | | System;String;false;Concat;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;manual | | System;String;false;Concat;(System.Object);;Argument[0];ReturnValue;taint;manual | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index c513e544b7a..12c531e1837 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -4425,6 +4425,8 @@ summary | System.Collections.Immutable;ImmutableArray;false;CreateRange;(System.Collections.Immutable.ImmutableArray,System.Int32,System.Int32,System.Func,TArg);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableArray;false;CreateRange;(System.Collections.Immutable.ImmutableArray,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableArray;false;CreateRange;(System.Collections.Immutable.ImmutableArray,System.Int32,System.Int32,System.Func);;Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Collections.Immutable;ImmutableArray;false;ToImmutableArray;(System.ReadOnlySpan);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Collections.Immutable;ImmutableArray;false;ToImmutableArray;(System.Span);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableArray;false;ToImmutableArray;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableArray+Builder;false;AddRange;(System.Collections.Generic.IEnumerable);;Argument[0].Element;Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableArray+Builder;false;AddRange;(System.Collections.Immutable.ImmutableArray);;Argument[0].Element;Argument[this].Element;value;manual | @@ -8181,9 +8183,9 @@ summary | System.Linq;Enumerable;false;Concat;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;Count;(System.Collections.Generic.IEnumerable,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;Enumerable;false;Count;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | -| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue;value;manual | +| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Enumerable;false;DefaultIfEmpty;(System.Collections.Generic.IEnumerable,TSource);;Argument[1];ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;Distinct;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;Distinct;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;DistinctBy;(System.Collections.Generic.IEnumerable,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -8192,8 +8194,8 @@ summary | System.Linq;Enumerable;false;ElementAt;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;Enumerable;false;ElementAtOrDefault;(System.Collections.Generic.IEnumerable,System.Index);;Argument[0].Element;ReturnValue;taint;df-generated | | System.Linq;Enumerable;false;ElementAtOrDefault;(System.Collections.Generic.IEnumerable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | +| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Enumerable;false;Except;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Enumerable;false;ExceptBy;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Enumerable;false;ExceptBy;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Enumerable;false;First;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | @@ -8613,17 +8615,17 @@ summary | System.Linq;ParallelEnumerable;false;Concat;(System.Linq.ParallelQuery,System.Linq.ParallelQuery);;Argument[1].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;Count;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;ParallelEnumerable;false;Count;(System.Linq.ParallelQuery,System.Func);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | -| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[1];ReturnValue;value;manual | +| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;DefaultIfEmpty;(System.Linq.ParallelQuery,TSource);;Argument[1];ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;Distinct;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;Distinct;(System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;ElementAt;(System.Linq.ParallelQuery,System.Int32);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;ParallelEnumerable;false;ElementAtOrDefault;(System.Linq.ParallelQuery,System.Int32);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;ParallelEnumerable;false;Except;(System.Linq.ParallelQuery,System.Linq.ParallelQuery,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;ParallelEnumerable;false;First;(System.Linq.ParallelQuery);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;ParallelEnumerable;false;First;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;ParallelEnumerable;false;First;(System.Linq.ParallelQuery,System.Func);;Argument[0].Element;ReturnValue;value;manual | @@ -8997,17 +8999,17 @@ summary | System.Linq;Queryable;false;Concat;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable);;Argument[1].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Count;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[0].Element;Argument[1].Parameter[0];value;manual | | System.Linq;Queryable;false;Count;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;manual | -| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[1];ReturnValue;value;manual | +| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Queryable;false;DefaultIfEmpty;(System.Linq.IQueryable,TSource);;Argument[1];ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Distinct;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;Distinct;(System.Linq.IQueryable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;DistinctBy;(System.Linq.IQueryable,System.Linq.Expressions.Expression>);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;DistinctBy;(System.Linq.IQueryable,System.Linq.Expressions.Expression>,System.Collections.Generic.IEqualityComparer);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;ElementAt;(System.Linq.IQueryable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | | System.Linq;Queryable;false;ElementAtOrDefault;(System.Linq.IQueryable,System.Int32);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;value;manual | -| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue;value;manual | +| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue.Element;value;manual | +| System.Linq;Queryable;false;Except;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);;Argument[0].Element;ReturnValue.Element;value;manual | | System.Linq;Queryable;false;ExceptBy;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;ExceptBy;(System.Linq.IQueryable,System.Collections.Generic.IEnumerable,System.Linq.Expressions.Expression>,System.Collections.Generic.IEqualityComparer);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Linq;Queryable;false;First;(System.Linq.IQueryable);;Argument[0].Element;ReturnValue;value;manual | @@ -15265,6 +15267,9 @@ summary | System;MemoryExtensions;false;AsMemory;(T[],System.Range);;Argument[0].Element;ReturnValue;taint;df-generated | | System;MemoryExtensions;false;EnumerateLines;(System.ReadOnlySpan);;Argument[0];ReturnValue;taint;df-generated | | System;MemoryExtensions;false;EnumerateRunes;(System.ReadOnlySpan);;Argument[0];ReturnValue;taint;df-generated | +| System;MemoryExtensions;false;Replace;(System.ReadOnlySpan,System.Span,T,T);;Argument[0].Element;Argument[1].Element;value;manual | +| System;MemoryExtensions;false;Replace;(System.ReadOnlySpan,System.Span,T,T);;Argument[3];Argument[1].Element;value;manual | +| System;MemoryExtensions;false;Replace;(System.Span,T,T);;Argument[2];Argument[0].Element;value;manual | | System;MemoryExtensions;false;Sort;(System.Span,System.Comparison);;Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System;MemoryExtensions;false;Sort;(System.Span,System.Span,System.Comparison);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System;MemoryExtensions;false;Trim;(System.Memory);;Argument[0];ReturnValue;taint;df-generated | @@ -15338,7 +15343,17 @@ summary | System;ReadOnlyMemory;false;Slice;(System.Int32);;Argument[this];ReturnValue;taint;df-generated | | System;ReadOnlyMemory;false;Slice;(System.Int32,System.Int32);;Argument[this];ReturnValue;taint;df-generated | | System;ReadOnlyMemory;false;ToString;();;Argument[this];ReturnValue;taint;df-generated | +| System;ReadOnlySpan;false;CopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | | System;ReadOnlySpan;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | +| System;ReadOnlySpan;false;GetPinnableReference;();;Argument[this].Element;ReturnValue;value;manual | +| System;ReadOnlySpan;false;ReadOnlySpan;(T);;Argument[0];Argument[this].Element;value;manual | +| System;ReadOnlySpan;false;ReadOnlySpan;(T[]);;Argument[0].Element;Argument[this].Element;value;manual | +| System;ReadOnlySpan;false;ReadOnlySpan;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[this].Element;value;manual | +| System;ReadOnlySpan;false;Slice;(System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;ReadOnlySpan;false;Slice;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;ReadOnlySpan;false;ToArray;();;Argument[this].Element;ReturnValue.Element;value;manual | +| System;ReadOnlySpan;false;TryCopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | +| System;ReadOnlySpan;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System;ResolveEventHandler;false;BeginInvoke;(System.Object,System.ResolveEventArgs,System.AsyncCallback,System.Object);;Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System;RuntimeFieldHandle;false;FromIntPtr;(System.IntPtr);;Argument[0];ReturnValue;taint;df-generated | | System;RuntimeFieldHandle;false;ToIntPtr;(System.RuntimeFieldHandle);;Argument[0];ReturnValue;taint;df-generated | @@ -15354,7 +15369,19 @@ summary | System;Single;false;ToString;(System.IFormatProvider);;Argument[0];ReturnValue;taint;df-generated | | System;Single;false;ToString;(System.String,System.IFormatProvider);;Argument[1];ReturnValue;taint;df-generated | | System;Single;false;ToType;(System.Type,System.IFormatProvider);;Argument[1];ReturnValue;taint;df-generated | +| System;Span;false;Clear;();;Argument[this].WithoutElement;Argument[this];value;manual | +| System;Span;false;CopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | +| System;Span;false;Fill;(T);;Argument[0];Argument[this].Element;value;manual | | System;Span;false;GetEnumerator;();;Argument[this];ReturnValue;taint;df-generated | +| System;Span;false;GetPinnableReference;();;Argument[this].Element;ReturnValue;value;manual | +| System;Span;false;Slice;(System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;Span;false;Slice;(System.Int32,System.Int32);;Argument[this].Element;ReturnValue.Element;value;manual | +| System;Span;false;Span;(T);;Argument[0];Argument[this].Element;value;manual | +| System;Span;false;Span;(T[]);;Argument[0].Element;Argument[this].Element;value;manual | +| System;Span;false;Span;(T[],System.Int32,System.Int32);;Argument[0].Element;Argument[this].Element;value;manual | +| System;Span;false;ToArray;();;Argument[this].Element;ReturnValue.Element;value;manual | +| System;Span;false;TryCopyTo;(System.Span);;Argument[this].Element;Argument[0].Element;value;manual | +| System;Span;false;get_Item;(System.Int32);;Argument[this].Element;ReturnValue;value;manual | | System;String;false;Clone;();;Argument[this];ReturnValue;value;manual | | System;String;false;Concat;(System.Collections.Generic.IEnumerable);;Argument[0].Element;ReturnValue;taint;manual | | System;String;false;Concat;(System.Object);;Argument[0];ReturnValue;taint;manual | diff --git a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected index f5f0902b3a8..d55c099ca4f 100644 --- a/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/operators/operatorFlow.expected @@ -1,77 +1,77 @@ testFailures edges -| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | -| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | -| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | -| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | -| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | -| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | -| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | -| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | -| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | -| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | -| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | -| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | -| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | -| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | -| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | -| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | -| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | -| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | -| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | -| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | -| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | -| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | -| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | -| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | -| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | -| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | -| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | -| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | -| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | -| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | -| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | -| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | -| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | -| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | -| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | -| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | -| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | -| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | -| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | -| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | -| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | -| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | -| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | -| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | -| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | -| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | -| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | -| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | -| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | -| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | -| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | -| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | -| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | -| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | +| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | provenance | | +| Operator.cs:9:39:9:39 | x : C | Operator.cs:9:50:9:50 | access to parameter x : C | provenance | | +| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | provenance | | +| Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | provenance | | +| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | provenance | | +| Operator.cs:18:51:18:51 | y : C | Operator.cs:18:57:18:57 | access to parameter y : C | provenance | | +| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | provenance | | +| Operator.cs:19:38:19:38 | x : C | Operator.cs:19:49:19:49 | access to parameter x : C | provenance | | +| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | provenance | | +| Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | provenance | | +| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | provenance | | +| Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | provenance | | +| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | provenance | | +| Operator.cs:27:17:27:28 | call to method Source : C | Operator.cs:29:17:29:17 | access to local variable x : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | provenance | | +| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:29:17:29:21 | call to operator + : C | provenance | | +| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | provenance | | +| Operator.cs:29:17:29:21 | call to operator + : C | Operator.cs:30:14:30:14 | access to local variable z | provenance | | +| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | provenance | | +| Operator.cs:35:17:35:28 | call to method Source : C | Operator.cs:37:27:37:27 | access to local variable x : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:19:38:19:38 | x : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | provenance | | +| Operator.cs:37:27:37:27 | access to local variable x : C | Operator.cs:37:27:37:31 | call to operator - : C | provenance | | +| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | provenance | | +| Operator.cs:37:27:37:31 | call to operator - : C | Operator.cs:38:14:38:14 | access to local variable z | provenance | | +| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | provenance | | +| Operator.cs:44:17:44:28 | call to method Source : C | Operator.cs:45:29:45:29 | access to local variable y : C | provenance | | +| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | provenance | | +| Operator.cs:45:25:45:29 | call to operator checked - : C | Operator.cs:46:14:46:14 | access to local variable z | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:18:51:18:51 | y : C | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | provenance | | +| Operator.cs:45:29:45:29 | access to local variable y : C | Operator.cs:45:25:45:29 | call to operator checked - : C | provenance | | +| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | provenance | | +| Operator.cs:49:28:49:28 | x : C | Operator.cs:51:17:51:17 | access to parameter x : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:9:39:9:39 | x : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | provenance | | +| Operator.cs:51:17:51:17 | access to parameter x : C | Operator.cs:51:17:51:21 | call to operator * : C | provenance | | +| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | provenance | | +| Operator.cs:51:17:51:21 | call to operator * : C | Operator.cs:52:14:52:14 | (...) ... | provenance | | +| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | provenance | | +| Operator.cs:57:17:57:28 | call to method Source : C | Operator.cs:59:15:59:15 | access to local variable x : C | provenance | | +| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | provenance | | +| Operator.cs:59:15:59:15 | access to local variable x : C | Operator.cs:49:28:49:28 | x : C | provenance | | +| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | provenance | | +| Operator.cs:62:33:62:33 | y : C | Operator.cs:64:21:64:21 | access to parameter y : C | provenance | | +| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | provenance | | +| Operator.cs:64:17:64:21 | call to operator / : C | Operator.cs:65:14:65:14 | (...) ... | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | provenance | | +| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C | provenance | | +| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | provenance | | +| Operator.cs:71:17:71:29 | call to method Source : C | Operator.cs:72:18:72:18 | access to local variable y : C | provenance | | +| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | provenance | | +| Operator.cs:72:18:72:18 | access to local variable y : C | Operator.cs:62:33:62:33 | y : C | provenance | | +| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | provenance | | +| Operator.cs:75:33:75:33 | y : C | Operator.cs:77:29:77:29 | access to parameter y : C | provenance | | +| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | provenance | | +| Operator.cs:77:25:77:29 | call to operator checked / : C | Operator.cs:78:14:78:14 | (...) ... | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | provenance | | +| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C | provenance | | +| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | provenance | | +| Operator.cs:84:17:84:29 | call to method Source : C | Operator.cs:85:18:85:18 | access to local variable y : C | provenance | | +| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | provenance | | +| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | provenance | | nodes | Operator.cs:9:39:9:39 | x : C | semmle.label | x : C | | Operator.cs:9:39:9:39 | x : C | semmle.label | x : C | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs b/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs index a74d480668d..2e2c491bfc1 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs +++ b/csharp/ql/test/library-tests/dataflow/ssa/Capture.cs @@ -148,7 +148,7 @@ class Capture void M5() { Use(e); - e = 0; // Should *not* get an SSA definition (`e` is never read) + e = 0; // Should *not* get an SSA definition (`e` is never read), but does since captured variables are conservatively considered live } var f = 12; @@ -165,7 +165,7 @@ class Capture Use(g); }; - var h = 12; // Should *not* get an SSA definition + var h = 12; // Should *not* get an SSA definition, but does since captured variables are conservatively considered live void M8() { h = 0; diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected index 8cbd5e6b1b6..134190ef871 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected @@ -4,6 +4,7 @@ | DefUse.cs:6:14:6:14 | y | DefUse.cs:23:9:23:15 | SSA phi(y) | DefUse.cs:18:13:18:18 | SSA def(y) | | DefUse.cs:6:14:6:14 | y | DefUse.cs:42:9:42:15 | SSA phi(y) | DefUse.cs:28:13:28:18 | SSA def(y) | | DefUse.cs:6:14:6:14 | y | DefUse.cs:42:9:42:15 | SSA phi(y) | DefUse.cs:39:13:39:18 | SSA def(y) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:3:17:3:19 | SSA phi(i) | DefUse.cs:76:9:76:11 | SSA def(i) | | DefUse.cs:79:13:79:14 | x1 | DefUse.cs:80:30:80:31 | SSA phi(x1) | DefUse.cs:79:13:79:18 | SSA def(x1) | | DefUse.cs:79:13:79:14 | x1 | DefUse.cs:80:30:80:31 | SSA phi(x1) | DefUse.cs:80:30:80:31 | SSA def(x1) | | DefUse.cs:97:13:97:14 | x5 | DefUse.cs:98:16:98:17 | SSA phi(x5) | DefUse.cs:97:13:97:18 | SSA def(x5) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected index 7cd94d64ec2..48aafe94201 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaCapturedVariableDef.expected @@ -27,14 +27,19 @@ | in | Properties.cs:74:23:74:23 | a | Properties.cs:74:23:74:54 | SSA def(a) | Properties.cs:82:24:82:46 | SSA capture def(a) | Properties.cs:82:9:82:47 | call to method Select | true | | in | Properties.cs:75:23:75:23 | b | Properties.cs:75:23:75:35 | SSA def(b) | Properties.cs:85:24:85:46 | SSA capture def(b) | Properties.cs:85:9:85:47 | call to method Select | true | | out | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:38:9:38:11 | delegate call | false | +| out | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:44:9:44:12 | call to method M | true | | out | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | Capture.cs:38:9:38:11 | SSA call def(x) | Capture.cs:38:9:38:11 | delegate call | false | | out | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | Capture.cs:44:9:44:12 | SSA call def(x) | Capture.cs:44:9:44:12 | call to method M | true | | out | Capture.cs:29:13:29:13 | z | Capture.cs:30:28:30:32 | SSA def(z) | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:32:9:32:11 | delegate call | false | +| out | Capture.cs:29:13:29:13 | z | Capture.cs:30:28:30:32 | SSA def(z) | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:44:9:44:12 | call to method M | true | | out | Capture.cs:50:20:50:20 | a | Capture.cs:52:28:52:40 | SSA def(a) | Capture.cs:53:9:53:11 | SSA call def(a) | Capture.cs:53:9:53:11 | delegate call | false | | out | Capture.cs:59:13:59:13 | i | Capture.cs:60:36:60:38 | SSA def(i) | Capture.cs:61:9:61:25 | SSA call def(i) | Capture.cs:61:9:61:25 | call to method Select | true | | out | Capture.cs:75:13:75:13 | i | Capture.cs:76:80:76:80 | SSA def(i) | Capture.cs:77:9:77:25 | SSA call def(i) | Capture.cs:77:9:77:25 | call to method Select | true | +| out | Capture.cs:102:13:102:13 | z | Capture.cs:105:13:105:17 | SSA def(z) | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:103:9:107:10 | call to local function fn | true | +| out | Capture.cs:122:13:122:13 | b | Capture.cs:125:13:125:17 | SSA def(b) | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:128:9:128:12 | call to local function M2 | false | | out | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:136:9:136:12 | call to local function M3 | false | | out | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:144:9:144:12 | call to local function M4 | false | +| out | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:160:9:160:12 | call to local function M6 | false | | out | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:176:13:176:16 | call to local function M9 | false | | out | Capture.cs:229:13:229:13 | i | Capture.cs:235:21:235:25 | SSA def(i) | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:236:9:236:12 | call to local function M3 | false | | out | DefUse.cs:167:23:167:23 | i | DefUse.cs:173:13:173:17 | SSA def(i) | DefUse.cs:181:9:181:11 | SSA call def(i) | DefUse.cs:181:9:181:11 | delegate call | false | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index ed1b3a00cc1..02d622c006a 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -2,6 +2,7 @@ | Capture.cs:6:16:6:16 | i | Capture.cs:10:20:27:9 | SSA capture def(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | | Capture.cs:8:13:8:13 | x | Capture.cs:8:13:8:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:19:24:23:13 | SSA capture def(x) | @@ -16,6 +17,7 @@ | Capture.cs:29:13:29:13 | z | Capture.cs:30:28:30:32 | SSA def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:37:9:37:13 | SSA def(z) | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | | Capture.cs:30:16:30:16 | c | Capture.cs:30:16:30:35 | SSA def(c) | | Capture.cs:50:20:50:20 | a | Capture.cs:50:20:50:20 | SSA param(a) | | Capture.cs:50:20:50:20 | a | Capture.cs:52:28:52:40 | SSA def(a) | @@ -50,22 +52,28 @@ | Capture.cs:94:13:94:13 | y | Capture.cs:96:12:100:9 | SSA capture def(y) | | Capture.cs:98:17:98:17 | x | Capture.cs:98:17:98:21 | SSA def(x) | | Capture.cs:102:13:102:13 | z | Capture.cs:102:13:102:18 | SSA def(z) | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | | Capture.cs:102:13:102:13 | z | Capture.cs:105:13:105:17 | SSA def(z) | | Capture.cs:114:13:114:13 | a | Capture.cs:114:13:114:18 | SSA def(a) | | Capture.cs:114:13:114:13 | a | Capture.cs:115:9:119:9 | SSA capture def(a) | | Capture.cs:117:17:117:17 | x | Capture.cs:117:17:117:21 | SSA def(x) | | Capture.cs:122:13:122:13 | b | Capture.cs:122:13:122:18 | SSA def(b) | | Capture.cs:122:13:122:13 | b | Capture.cs:125:13:125:17 | SSA def(b) | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | | Capture.cs:130:13:130:13 | c | Capture.cs:130:13:130:18 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:136:9:136:12 | SSA call def(c) | | Capture.cs:139:13:139:13 | d | Capture.cs:139:13:139:18 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | +| Capture.cs:147:13:147:13 | e | Capture.cs:147:13:147:18 | SSA def(e) | | Capture.cs:147:13:147:13 | e | Capture.cs:148:9:152:9 | SSA capture def(e) | +| Capture.cs:147:13:147:13 | e | Capture.cs:151:13:151:17 | SSA def(e) | | Capture.cs:154:13:154:13 | f | Capture.cs:154:13:154:18 | SSA def(f) | | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | | Capture.cs:162:13:162:13 | g | Capture.cs:163:9:166:9 | SSA capture def(g) | +| Capture.cs:168:13:168:13 | h | Capture.cs:168:13:168:18 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:171:13:171:17 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:176:13:176:16 | SSA call def(h) | @@ -86,6 +94,7 @@ | Capture.cs:229:13:229:13 | i | Capture.cs:235:21:235:25 | SSA def(i) | | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:242:13:242:17 | SSA def(i) | +| Capture.cs:242:13:242:13 | i | Capture.cs:245:13:245:17 | SSA def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:254:27:254:27 | SSA def(i) | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | @@ -94,6 +103,7 @@ | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | +| Consistency.cs:38:13:38:13 | i | Consistency.cs:38:13:38:13 | SSA def(i) | | Consistency.cs:38:13:38:13 | i | Consistency.cs:39:28:39:32 | SSA def(i) | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | | Consistency.cs:49:30:49:30 | a | Consistency.cs:49:30:49:30 | SSA param(a) | @@ -119,7 +129,9 @@ | DefUse.cs:44:13:44:13 | z | DefUse.cs:50:23:50:23 | SSA def(z) | | DefUse.cs:53:9:53:13 | this.Field | DefUse.cs:53:9:53:17 | SSA def(this.Field) | | DefUse.cs:56:9:56:12 | this.Prop | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:3:17:3:19 | SSA phi(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:59:13:59:17 | SSA def(i) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:60:37:60:41 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:71:9:71:13 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:72:9:72:11 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:75:9:75:13 | SSA def(i) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 55ab1190c8f..4ec9fbf90b0 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -16,7 +16,9 @@ | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:38:9:38:11 | delegate call | | Capture.cs:38:9:38:11 | SSA call def(x) | Capture.cs:38:9:38:11 | delegate call | | Capture.cs:43:9:43:13 | SSA def(x) | Capture.cs:43:9:43:13 | ... = ... | +| Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:44:9:44:12 | call to method M | | Capture.cs:44:9:44:12 | SSA call def(x) | Capture.cs:44:9:44:12 | call to method M | +| Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:44:9:44:12 | call to method M | | Capture.cs:50:20:50:20 | SSA param(a) | Capture.cs:50:20:50:20 | a | | Capture.cs:52:16:52:43 | SSA def(b) | Capture.cs:52:16:52:43 | Action b = ... | | Capture.cs:52:28:52:40 | SSA def(a) | Capture.cs:52:28:52:40 | ... = ... | @@ -50,22 +52,28 @@ | Capture.cs:96:12:100:9 | SSA capture def(y) | Capture.cs:96:12:100:9 | (...) => ... | | Capture.cs:98:17:98:21 | SSA def(x) | Capture.cs:98:17:98:21 | Int32 x = ... | | Capture.cs:102:13:102:18 | SSA def(z) | Capture.cs:102:13:102:18 | Int32 z = ... | +| Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:103:9:107:10 | call to local function fn | | Capture.cs:105:13:105:17 | SSA def(z) | Capture.cs:105:13:105:17 | ... = ... | | Capture.cs:114:13:114:18 | SSA def(a) | Capture.cs:114:13:114:18 | Int32 a = ... | | Capture.cs:115:9:119:9 | SSA capture def(a) | Capture.cs:115:9:119:9 | M1 | | Capture.cs:117:17:117:21 | SSA def(x) | Capture.cs:117:17:117:21 | Int32 x = ... | | Capture.cs:122:13:122:18 | SSA def(b) | Capture.cs:122:13:122:18 | Int32 b = ... | | Capture.cs:125:13:125:17 | SSA def(b) | Capture.cs:125:13:125:17 | ... = ... | +| Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:128:9:128:12 | call to local function M2 | | Capture.cs:130:13:130:18 | SSA def(c) | Capture.cs:130:13:130:18 | Int32 c = ... | | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:133:13:133:17 | ... = ... | | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:136:9:136:12 | call to local function M3 | | Capture.cs:139:13:139:18 | SSA def(d) | Capture.cs:139:13:139:18 | Int32 d = ... | | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:142:13:142:17 | ... = ... | | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:144:9:144:12 | call to local function M4 | +| Capture.cs:147:13:147:18 | SSA def(e) | Capture.cs:147:13:147:18 | Int32 e = ... | | Capture.cs:148:9:152:9 | SSA capture def(e) | Capture.cs:148:9:152:9 | M5 | +| Capture.cs:151:13:151:17 | SSA def(e) | Capture.cs:151:13:151:17 | ... = ... | | Capture.cs:154:13:154:18 | SSA def(f) | Capture.cs:154:13:154:18 | Int32 f = ... | | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:158:13:158:17 | ... = ... | +| Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:160:9:160:12 | call to local function M6 | | Capture.cs:163:9:166:9 | SSA capture def(g) | Capture.cs:163:9:166:9 | M7 | +| Capture.cs:168:13:168:18 | SSA def(h) | Capture.cs:168:13:168:18 | Int32 h = ... | | Capture.cs:171:13:171:17 | SSA def(h) | Capture.cs:171:13:171:17 | ... = ... | | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:174:17:174:21 | ... = ... | | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:176:13:176:16 | call to local function M9 | @@ -86,6 +94,7 @@ | Capture.cs:235:21:235:25 | SSA def(i) | Capture.cs:235:21:235:25 | ... = ... | | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:236:9:236:12 | call to local function M3 | | Capture.cs:242:13:242:17 | SSA def(i) | Capture.cs:242:13:242:17 | Int32 i = ... | +| Capture.cs:245:13:245:17 | SSA def(i) | Capture.cs:245:13:245:17 | ... = ... | | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Capture.cs:254:27:254:27 | SSA def(i) | Capture.cs:254:9:254:28 | call to local function CaptureAndRef | | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | @@ -94,6 +103,7 @@ | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | +| Consistency.cs:38:13:38:13 | SSA def(i) | Consistency.cs:38:13:38:13 | Int32 i | | Consistency.cs:39:28:39:32 | SSA def(i) | Consistency.cs:39:28:39:32 | ... = ... | | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | | Consistency.cs:49:30:49:30 | SSA param(a) | Consistency.cs:49:30:49:30 | a | @@ -117,6 +127,7 @@ | DefUse.cs:53:9:53:17 | SSA def(this.Field) | DefUse.cs:53:9:53:17 | ... = ... | | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | DefUse.cs:56:9:56:16 | ... = ... | | DefUse.cs:59:13:59:17 | SSA def(i) | DefUse.cs:59:13:59:17 | Int32 i = ... | +| DefUse.cs:60:37:60:41 | SSA def(i) | DefUse.cs:60:37:60:41 | ... = ... | | DefUse.cs:63:9:63:18 | SSA def(this.Field2) | DefUse.cs:63:9:63:18 | ... = ... | | DefUse.cs:66:9:66:18 | SSA def(this.Field3) | DefUse.cs:66:9:66:18 | ... = ... | | DefUse.cs:67:19:67:27 | SSA def(tc) | DefUse.cs:67:19:67:27 | TestClass tc = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected index a969905fadb..56d86ea53cd 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected @@ -43,8 +43,11 @@ | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:133:13:133:17 | ... = ... | | Capture.cs:139:13:139:13 | d | Capture.cs:139:13:139:18 | SSA def(d) | Capture.cs:139:13:139:18 | Int32 d = ... | | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:142:13:142:17 | ... = ... | +| Capture.cs:147:13:147:13 | e | Capture.cs:147:13:147:18 | SSA def(e) | Capture.cs:147:13:147:18 | Int32 e = ... | +| Capture.cs:147:13:147:13 | e | Capture.cs:151:13:151:17 | SSA def(e) | Capture.cs:151:13:151:17 | ... = ... | | Capture.cs:154:13:154:13 | f | Capture.cs:154:13:154:18 | SSA def(f) | Capture.cs:154:13:154:18 | Int32 f = ... | | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:158:13:158:17 | ... = ... | +| Capture.cs:168:13:168:13 | h | Capture.cs:168:13:168:18 | SSA def(h) | Capture.cs:168:13:168:18 | Int32 h = ... | | Capture.cs:168:13:168:13 | h | Capture.cs:171:13:171:17 | SSA def(h) | Capture.cs:171:13:171:17 | ... = ... | | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:174:17:174:21 | ... = ... | | Capture.cs:182:17:182:17 | i | Capture.cs:182:17:182:21 | SSA def(i) | Capture.cs:182:17:182:21 | Int32 i = ... | @@ -58,6 +61,7 @@ | Capture.cs:229:13:229:13 | i | Capture.cs:232:9:232:13 | SSA def(i) | Capture.cs:232:9:232:13 | ... = ... | | Capture.cs:229:13:229:13 | i | Capture.cs:235:21:235:25 | SSA def(i) | Capture.cs:235:21:235:25 | ... = ... | | Capture.cs:242:13:242:13 | i | Capture.cs:242:13:242:17 | SSA def(i) | Capture.cs:242:13:242:17 | Int32 i = ... | +| Capture.cs:242:13:242:13 | i | Capture.cs:245:13:245:17 | SSA def(i) | Capture.cs:245:13:245:17 | ... = ... | | Capture.cs:242:13:242:13 | i | Capture.cs:254:27:254:27 | SSA def(i) | Capture.cs:254:27:254:27 | access to local variable i | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | @@ -65,6 +69,7 @@ | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | Consistency c | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | +| Consistency.cs:38:13:38:13 | i | Consistency.cs:38:13:38:13 | SSA def(i) | Consistency.cs:38:13:38:13 | Int32 i | | Consistency.cs:38:13:38:13 | i | Consistency.cs:39:28:39:32 | SSA def(i) | Consistency.cs:39:28:39:32 | ... = ... | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | | Consistency.cs:49:30:49:30 | a | Consistency.cs:49:30:49:30 | SSA param(a) | Consistency.cs:49:30:49:30 | a | @@ -88,6 +93,7 @@ | DefUse.cs:53:9:53:13 | this.Field | DefUse.cs:53:9:53:17 | SSA def(this.Field) | DefUse.cs:53:9:53:17 | ... = ... | | DefUse.cs:56:9:56:12 | this.Prop | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | DefUse.cs:56:9:56:16 | ... = ... | | DefUse.cs:59:13:59:13 | i | DefUse.cs:59:13:59:17 | SSA def(i) | DefUse.cs:59:13:59:17 | Int32 i = ... | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:60:37:60:41 | SSA def(i) | DefUse.cs:60:37:60:41 | ... = ... | | DefUse.cs:59:13:59:13 | i | DefUse.cs:71:9:71:13 | SSA def(i) | DefUse.cs:71:9:71:13 | ... = ... | | DefUse.cs:59:13:59:13 | i | DefUse.cs:72:9:72:11 | SSA def(i) | DefUse.cs:72:9:72:11 | ...++ | | DefUse.cs:59:13:59:13 | i | DefUse.cs:75:9:75:13 | SSA def(i) | DefUse.cs:75:9:75:13 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected index d6bf7341101..22a56a7da24 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitCall.expected @@ -1,12 +1,17 @@ | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:13:13:13:17 | ... = ... | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:13:13:13:17 | ... = ... | | Capture.cs:8:13:8:13 | x | Capture.cs:38:9:38:11 | SSA call def(x) | Capture.cs:15:13:15:17 | ... = ... | | Capture.cs:8:13:8:13 | x | Capture.cs:44:9:44:12 | SSA call def(x) | Capture.cs:15:13:15:17 | ... = ... | | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:30:28:30:32 | ... = ... | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:30:28:30:32 | ... = ... | | Capture.cs:50:20:50:20 | a | Capture.cs:53:9:53:11 | SSA call def(a) | Capture.cs:52:28:52:40 | ... = ... | | Capture.cs:59:13:59:13 | i | Capture.cs:61:9:61:25 | SSA call def(i) | Capture.cs:60:36:60:38 | ...++ | | Capture.cs:75:13:75:13 | i | Capture.cs:77:9:77:25 | SSA call def(i) | Capture.cs:76:80:76:80 | access to local variable i | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:105:13:105:17 | ... = ... | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:125:13:125:17 | ... = ... | | Capture.cs:130:13:130:13 | c | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:133:13:133:17 | ... = ... | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:142:13:142:17 | ... = ... | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:158:13:158:17 | ... = ... | | Capture.cs:168:13:168:13 | h | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:174:17:174:21 | ... = ... | | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:235:21:235:25 | ... = ... | | DefUse.cs:167:23:167:23 | i | DefUse.cs:181:9:181:11 | SSA call def(i) | DefUse.cs:173:13:173:17 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index 78e35e1c381..bf7db292429 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -3,6 +3,9 @@ | Capture.cs:6:16:6:16 | i | Capture.cs:13:13:13:17 | SSA def(i) | Capture.cs:13:13:13:17 | SSA def(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:6:16:6:16 | SSA param(i) | | Capture.cs:6:16:6:16 | i | Capture.cs:38:9:38:11 | SSA call def(i) | Capture.cs:38:9:38:11 | SSA call def(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:6:16:6:16 | SSA param(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:38:9:38:11 | SSA call def(i) | +| Capture.cs:6:16:6:16 | i | Capture.cs:44:9:44:12 | SSA call def(i) | Capture.cs:44:9:44:12 | SSA call def(i) | | Capture.cs:8:13:8:13 | x | Capture.cs:8:13:8:17 | SSA def(x) | Capture.cs:8:13:8:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:15:13:15:17 | SSA def(x) | Capture.cs:15:13:15:17 | SSA def(x) | | Capture.cs:8:13:8:13 | x | Capture.cs:19:24:23:13 | SSA capture def(x) | Capture.cs:19:24:23:13 | SSA capture def(x) | @@ -20,6 +23,8 @@ | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:29:13:29:17 | SSA def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:32:9:32:11 | SSA call def(z) | Capture.cs:32:9:32:11 | SSA call def(z) | | Capture.cs:29:13:29:13 | z | Capture.cs:37:9:37:13 | SSA def(z) | Capture.cs:37:9:37:13 | SSA def(z) | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:37:9:37:13 | SSA def(z) | +| Capture.cs:29:13:29:13 | z | Capture.cs:44:9:44:12 | SSA call def(z) | Capture.cs:44:9:44:12 | SSA call def(z) | | Capture.cs:30:16:30:16 | c | Capture.cs:30:16:30:35 | SSA def(c) | Capture.cs:30:16:30:35 | SSA def(c) | | Capture.cs:50:20:50:20 | a | Capture.cs:50:20:50:20 | SSA param(a) | Capture.cs:50:20:50:20 | SSA param(a) | | Capture.cs:50:20:50:20 | a | Capture.cs:52:28:52:40 | SSA def(a) | Capture.cs:52:28:52:40 | SSA def(a) | @@ -57,12 +62,16 @@ | Capture.cs:94:13:94:13 | y | Capture.cs:96:12:100:9 | SSA capture def(y) | Capture.cs:96:12:100:9 | SSA capture def(y) | | Capture.cs:98:17:98:17 | x | Capture.cs:98:17:98:21 | SSA def(x) | Capture.cs:98:17:98:21 | SSA def(x) | | Capture.cs:102:13:102:13 | z | Capture.cs:102:13:102:18 | SSA def(z) | Capture.cs:102:13:102:18 | SSA def(z) | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:102:13:102:18 | SSA def(z) | +| Capture.cs:102:13:102:13 | z | Capture.cs:103:9:107:10 | SSA call def(z) | Capture.cs:103:9:107:10 | SSA call def(z) | | Capture.cs:102:13:102:13 | z | Capture.cs:105:13:105:17 | SSA def(z) | Capture.cs:105:13:105:17 | SSA def(z) | | Capture.cs:114:13:114:13 | a | Capture.cs:114:13:114:18 | SSA def(a) | Capture.cs:114:13:114:18 | SSA def(a) | | Capture.cs:114:13:114:13 | a | Capture.cs:115:9:119:9 | SSA capture def(a) | Capture.cs:115:9:119:9 | SSA capture def(a) | | Capture.cs:117:17:117:17 | x | Capture.cs:117:17:117:21 | SSA def(x) | Capture.cs:117:17:117:21 | SSA def(x) | | Capture.cs:122:13:122:13 | b | Capture.cs:122:13:122:18 | SSA def(b) | Capture.cs:122:13:122:18 | SSA def(b) | | Capture.cs:122:13:122:13 | b | Capture.cs:125:13:125:17 | SSA def(b) | Capture.cs:125:13:125:17 | SSA def(b) | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:122:13:122:18 | SSA def(b) | +| Capture.cs:122:13:122:13 | b | Capture.cs:128:9:128:12 | SSA call def(b) | Capture.cs:128:9:128:12 | SSA call def(b) | | Capture.cs:130:13:130:13 | c | Capture.cs:130:13:130:18 | SSA def(c) | Capture.cs:130:13:130:18 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:133:13:133:17 | SSA def(c) | Capture.cs:133:13:133:17 | SSA def(c) | | Capture.cs:130:13:130:13 | c | Capture.cs:136:9:136:12 | SSA call def(c) | Capture.cs:130:13:130:18 | SSA def(c) | @@ -71,10 +80,15 @@ | Capture.cs:139:13:139:13 | d | Capture.cs:142:13:142:17 | SSA def(d) | Capture.cs:142:13:142:17 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:139:13:139:18 | SSA def(d) | | Capture.cs:139:13:139:13 | d | Capture.cs:144:9:144:12 | SSA call def(d) | Capture.cs:144:9:144:12 | SSA call def(d) | +| Capture.cs:147:13:147:13 | e | Capture.cs:147:13:147:18 | SSA def(e) | Capture.cs:147:13:147:18 | SSA def(e) | | Capture.cs:147:13:147:13 | e | Capture.cs:148:9:152:9 | SSA capture def(e) | Capture.cs:148:9:152:9 | SSA capture def(e) | +| Capture.cs:147:13:147:13 | e | Capture.cs:151:13:151:17 | SSA def(e) | Capture.cs:151:13:151:17 | SSA def(e) | | Capture.cs:154:13:154:13 | f | Capture.cs:154:13:154:18 | SSA def(f) | Capture.cs:154:13:154:18 | SSA def(f) | | Capture.cs:154:13:154:13 | f | Capture.cs:158:13:158:17 | SSA def(f) | Capture.cs:158:13:158:17 | SSA def(f) | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:154:13:154:18 | SSA def(f) | +| Capture.cs:154:13:154:13 | f | Capture.cs:160:9:160:12 | SSA call def(f) | Capture.cs:160:9:160:12 | SSA call def(f) | | Capture.cs:162:13:162:13 | g | Capture.cs:163:9:166:9 | SSA capture def(g) | Capture.cs:163:9:166:9 | SSA capture def(g) | +| Capture.cs:168:13:168:13 | h | Capture.cs:168:13:168:18 | SSA def(h) | Capture.cs:168:13:168:18 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:171:13:171:17 | SSA def(h) | Capture.cs:171:13:171:17 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:174:17:174:21 | SSA def(h) | Capture.cs:174:17:174:21 | SSA def(h) | | Capture.cs:168:13:168:13 | h | Capture.cs:176:13:176:16 | SSA call def(h) | Capture.cs:171:13:171:17 | SSA def(h) | @@ -97,6 +111,7 @@ | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:232:9:232:13 | SSA def(i) | | Capture.cs:229:13:229:13 | i | Capture.cs:236:9:236:12 | SSA call def(i) | Capture.cs:236:9:236:12 | SSA call def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:242:13:242:17 | SSA def(i) | Capture.cs:242:13:242:17 | SSA def(i) | +| Capture.cs:242:13:242:13 | i | Capture.cs:245:13:245:17 | SSA def(i) | Capture.cs:245:13:245:17 | SSA def(i) | | Capture.cs:242:13:242:13 | i | Capture.cs:254:27:254:27 | SSA def(i) | Capture.cs:254:27:254:27 | SSA def(i) | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | SSA param(b) | @@ -105,6 +120,7 @@ | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | SSA def(c) | +| Consistency.cs:38:13:38:13 | i | Consistency.cs:38:13:38:13 | SSA def(i) | Consistency.cs:38:13:38:13 | SSA def(i) | | Consistency.cs:38:13:38:13 | i | Consistency.cs:39:28:39:32 | SSA def(i) | Consistency.cs:39:28:39:32 | SSA def(i) | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | SSA def(s) | | Consistency.cs:49:30:49:30 | a | Consistency.cs:49:30:49:30 | SSA param(a) | Consistency.cs:49:30:49:30 | SSA param(a) | @@ -133,7 +149,9 @@ | DefUse.cs:44:13:44:13 | z | DefUse.cs:50:23:50:23 | SSA def(z) | DefUse.cs:50:23:50:23 | SSA def(z) | | DefUse.cs:53:9:53:13 | this.Field | DefUse.cs:53:9:53:17 | SSA def(this.Field) | DefUse.cs:53:9:53:17 | SSA def(this.Field) | | DefUse.cs:56:9:56:12 | this.Prop | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | DefUse.cs:56:9:56:16 | SSA def(this.Prop) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:3:17:3:19 | SSA phi(i) | DefUse.cs:76:9:76:11 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:59:13:59:17 | SSA def(i) | DefUse.cs:59:13:59:17 | SSA def(i) | +| DefUse.cs:59:13:59:13 | i | DefUse.cs:60:37:60:41 | SSA def(i) | DefUse.cs:60:37:60:41 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:71:9:71:13 | SSA def(i) | DefUse.cs:71:9:71:13 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:72:9:72:11 | SSA def(i) | DefUse.cs:72:9:72:11 | SSA def(i) | | DefUse.cs:59:13:59:13 | i | DefUse.cs:75:9:75:13 | SSA def(i) | DefUse.cs:75:9:75:13 | SSA def(i) | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected index edde57342e5..2000a735bdb 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected @@ -1,12 +1,12 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected index 38da52c1af5..85243196a39 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected @@ -1,13 +1,13 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected index 82868f7fce3..a499529d57d 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected @@ -1,15 +1,15 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | -| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | +| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected index b4863cc7b12..53b70178511 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected @@ -1,16 +1,16 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | -| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | -| Test.cs:53:29:53:52 | call to method GetCustom : String | Test.cs:56:42:56:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | +| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | provenance | | +| Test.cs:53:29:53:52 | call to method GetCustom : String | Test.cs:56:42:56:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected index 69b547c0bdd..184c4722f80 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected @@ -1,14 +1,14 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected index f48ee60904b..72271d08836 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected @@ -1,14 +1,14 @@ edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | -| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | -| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | -| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | -| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | +| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | | +| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | | +| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | provenance | | +| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:65:42:65:96 | ... + ... | provenance | | nodes | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected index bf41a804fdb..7a3c03fb060 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected @@ -135,6 +135,9 @@ | Tuples.cs:87:27:87:27 | SSA def(q) | Tuples.cs:91:18:91:18 | access to local variable q | | Tuples.cs:87:30:87:30 | SSA def(r) | Tuples.cs:90:18:90:18 | access to local variable r | | Tuples.cs:91:18:91:18 | access to local variable q | Tuples.cs:91:18:91:18 | (...) ... | +| Tuples.cs:95:12:95:13 | this | Tuples.cs:95:22:95:22 | this | +| Tuples.cs:95:22:95:22 | [post] this | Tuples.cs:95:29:95:29 | this | +| Tuples.cs:95:22:95:22 | this | Tuples.cs:95:29:95:29 | this | | Tuples.cs:99:13:99:33 | SSA def(o) | Tuples.cs:100:24:100:24 | access to local variable o | | Tuples.cs:99:17:99:33 | call to method Source | Tuples.cs:99:13:99:33 | SSA def(o) | | Tuples.cs:99:32:99:32 | 9 | Tuples.cs:99:32:99:32 | (...) ... | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected index bbe5e6d22c5..97fb24fb239 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected @@ -363,12 +363,13 @@ Tuples.cs: # 95| 1: [Parameter] right # 95| 14: [Property] EqualityContract # 95| 3: [Getter] get_EqualityContract -# 95| 15: [InstanceConstructor] R1 +# 95| 15: [InstanceConstructor,PrimaryConstructor] R1 #-----| 2: (Parameters) # 95| 0: [Parameter] i # 95| -1: [TypeMention] string # 95| 1: [Parameter] j # 95| -1: [TypeMention] int +# 95| 4: [BlockStmt] {...} # 95| 16: [Property] i # 95| 3: [Getter] get_i # 95| 4: [Setter] set_i diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected index 95c39fd302c..e93d25ad84a 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected @@ -1,205 +1,205 @@ testFailures edges -| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | -| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | -| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | -| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | -| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | -| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | -| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | -| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | -| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | -| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | -| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | -| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | -| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | -| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | -| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | -| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | -| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | -| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | -| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | -| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | -| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | -| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | -| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | -| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | -| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | -| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | -| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | -| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | -| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | -| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | -| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | -| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | -| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | -| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | -| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | -| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | -| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | -| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | -| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | -| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | -| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | -| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | -| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | -| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | -| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | -| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | -| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | -| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | -| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | -| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | -| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | -| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | -| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | -| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | -| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | -| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | -| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | -| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | -| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | -| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | -| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | -| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | -| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | -| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | -| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | -| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | -| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | -| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | -| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | -| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | -| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | -| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | -| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | -| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | -| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | -| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | -| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | -| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | -| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | -| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | -| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | -| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | -| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | -| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | -| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | -| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | -| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | -| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | -| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | +| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | provenance | | +| Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:10:21:10:22 | access to local variable o1 : Object | provenance | | +| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | provenance | | +| Tuples.cs:8:18:8:34 | call to method Source : Object | Tuples.cs:10:29:10:30 | access to local variable o2 : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:21:10:22 | access to local variable o1 : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:10:17:10:32 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | provenance | | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:10:29:10:30 | access to local variable o2 : Object | Tuples.cs:10:25:10:31 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:11:9:11:27 | SSA def(c) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:11:9:11:27 | SSA def(a) : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:11:9:11:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(a) : Object | Tuples.cs:12:14:12:14 | access to local variable a | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | provenance | | +| Tuples.cs:11:9:11:27 | SSA def(c) : Object | Tuples.cs:14:14:14:14 | access to local variable c | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:16:9:16:23 | SSA def(a) : Object | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:16:9:16:19 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(a) : Object | Tuples.cs:17:14:17:14 | access to local variable a | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | provenance | | +| Tuples.cs:16:9:16:23 | SSA def(c) : Object | Tuples.cs:19:14:19:14 | access to local variable c | provenance | | +| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | provenance | | +| Tuples.cs:16:13:16:18 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:16:9:16:23 | SSA def(c) : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:21:9:21:26 | SSA def(p) : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:21:9:21:22 | (..., ...) : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(p) : Object | Tuples.cs:22:14:22:14 | access to local variable p | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:21:9:21:26 | SSA def(q) : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | provenance | | +| Tuples.cs:24:14:24:14 | access to local variable q : ValueTuple [field Item2] : Object | Tuples.cs:24:14:24:20 | access to field Item2 | provenance | | +| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | provenance | | +| Tuples.cs:26:14:26:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:26:14:26:20 | access to field Item1 | provenance | | +| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | provenance | | +| Tuples.cs:27:14:27:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:27:14:27:16 | access to field Item1 | provenance | | +| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:29:14:29:14 | access to local variable x : ValueTuple> [field Item2, field Item2] : Object | Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | provenance | | +| Tuples.cs:29:14:29:20 | access to field Item2 : ValueTuple [field Item2] : Object | Tuples.cs:29:14:29:26 | access to field Item2 | provenance | | +| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | provenance | | +| Tuples.cs:34:18:34:34 | call to method Source : Object | Tuples.cs:37:18:37:19 | access to local variable o1 : Object | provenance | | +| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | provenance | | +| Tuples.cs:35:18:35:34 | call to method Source : Object | Tuples.cs:37:46:37:47 | access to local variable o2 : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:18:37:19 | access to local variable o1 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item1] : Object | provenance | | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:37:46:37:47 | access to local variable o2 : Object | Tuples.cs:37:17:37:48 | (..., ...) : ValueTuple> [field Item10] : Object | provenance | | +| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | provenance | | +| Tuples.cs:38:14:38:14 | access to local variable x : ValueTuple> [field Item1] : Object | Tuples.cs:38:14:38:20 | access to field Item1 | provenance | | +| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | provenance | | +| Tuples.cs:40:14:40:14 | access to local variable x : ValueTuple> [field Item10] : Object | Tuples.cs:40:14:40:21 | access to field Item10 | provenance | | +| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | provenance | | +| Tuples.cs:45:17:45:33 | call to method Source : String | Tuples.cs:46:48:46:48 | access to local variable o : String | provenance | | +| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | Tuples.cs:46:17:46:55 | (...) ... : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:46:48:46:48 | access to local variable o : String | Tuples.cs:46:47:46:55 | (..., ...) : ValueTuple [field Item1] : String | provenance | | +| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | provenance | | +| Tuples.cs:47:14:47:14 | access to local variable x : ValueTuple [field Item1] : String | Tuples.cs:47:14:47:20 | access to field Item1 | provenance | | +| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | provenance | | +| Tuples.cs:57:18:57:34 | call to method Source : String | Tuples.cs:59:18:59:19 | access to local variable o1 : String | provenance | | +| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | provenance | | +| Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:59:26:59:27 | access to local variable o2 : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:18:59:19 | access to local variable o1 : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:59:17:59:32 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:59:26:59:27 | access to local variable o2 : String | Tuples.cs:59:22:59:28 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:62:18:62:57 | SSA def(t) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | provenance | | +| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | provenance | | +| Tuples.cs:63:22:63:22 | access to local variable t : ValueTuple,Int32> [field Item1] : String | Tuples.cs:63:22:63:28 | access to field Item1 | provenance | | +| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:64:22:64:22 | access to local variable t : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | provenance | | +| Tuples.cs:64:22:64:28 | access to field Item2 : ValueTuple [field Item2] : String | Tuples.cs:64:22:64:34 | access to field Item2 | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:67:30:67:30 | SSA def(c) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:67:23:67:23 | SSA def(a) : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:67:18:67:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | provenance | | +| Tuples.cs:67:23:67:23 | SSA def(a) : String | Tuples.cs:68:22:68:22 | access to local variable a | provenance | | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | provenance | | +| Tuples.cs:67:30:67:30 | SSA def(c) : String | Tuples.cs:69:22:69:22 | access to local variable c | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | Tuples.cs:87:30:87:30 | SSA def(r) : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:87:23:87:23 | SSA def(p) : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | provenance | | +| Tuples.cs:87:23:87:23 | SSA def(p) : String | Tuples.cs:89:18:89:18 | access to local variable p | provenance | | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | provenance | | +| Tuples.cs:87:30:87:30 | SSA def(r) : String | Tuples.cs:90:18:90:18 | access to local variable r | provenance | | +| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | provenance | | +| Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:100:24:100:24 | access to local variable o : String | provenance | | +| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | provenance | | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | provenance | | +| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | provenance | | +| Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:125:25:125:25 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:129:31:129:31 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:133:28:133:28 | access to local variable o : Object | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | provenance | | +| Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:32 | SSA def(x1) : Object | provenance | | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:121:9:121:32 | SSA def(x1) : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | +| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:121:9:121:23 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:121:28:121:28 | access to local variable o : Object | Tuples.cs:121:27:121:32 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | provenance | | +| Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:29 | SSA def(x2) : Object | provenance | | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:125:9:125:29 | SSA def(x2) : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | provenance | | +| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | Tuples.cs:125:9:125:20 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:125:25:125:25 | access to local variable o : Object | Tuples.cs:125:24:125:29 | (..., ...) : ValueTuple [field Item1] : Object | provenance | | +| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | provenance | | +| Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:32 | SSA def(y3) : Object | provenance | | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:129:9:129:32 | SSA def(y3) : Object | Tuples.cs:130:14:130:15 | access to local variable y3 | provenance | | +| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:129:9:129:23 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:129:31:129:31 | access to local variable o : Object | Tuples.cs:129:27:129:32 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | provenance | | +| Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:29 | SSA def(y4) : Object | provenance | | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:133:9:133:29 | SSA def(y4) : Object | Tuples.cs:134:14:134:15 | access to local variable y4 | provenance | | +| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | Tuples.cs:133:9:133:20 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | +| Tuples.cs:133:28:133:28 | access to local variable o : Object | Tuples.cs:133:24:133:29 | (..., ...) : ValueTuple [field Item2] : Object | provenance | | nodes | Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | | Tuples.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected b/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected index 51286b90578..cb7792957a8 100644 --- a/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected +++ b/csharp/ql/test/library-tests/dataflow/typeflow-dispatch/TypeFlowDispatch.expected @@ -1,59 +1,59 @@ testFailures edges -| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | -| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | -| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | -| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | -| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | -| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | -| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | -| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | -| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | -| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | -| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | -| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | -| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | -| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | -| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | -| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | -| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | -| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | -| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | -| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | -| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | -| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | -| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | -| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | -| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | -| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | -| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | -| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | -| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | -| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | -| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | -| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | -| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | -| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | -| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | -| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | -| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | -| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | -| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | -| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | +| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:11:42:11:42 | x : String | TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | provenance | | +| TypeFlowDispatch.cs:13:11:13:11 | access to parameter x : String | TypeFlowDispatch.cs:23:20:23:20 | x : String | provenance | | +| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:16:46:16:46 | x : String | TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | provenance | | +| TypeFlowDispatch.cs:18:19:18:19 | access to parameter x : String | TypeFlowDispatch.cs:11:42:11:42 | x : String | provenance | | +| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:23:20:23:20 | x : String | TypeFlowDispatch.cs:23:32:23:32 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | provenance | | +| TypeFlowDispatch.cs:23:39:23:49 | call to method Source : String | TypeFlowDispatch.cs:16:46:16:46 | x : String | provenance | | +| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | provenance | | +| TypeFlowDispatch.cs:31:9:31:9 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:39:34:39:34 | x : String | provenance | | +| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:36:42:36:52 | call to method Source : String | TypeFlowDispatch.cs:36:23:36:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:39:25:39:31 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:29:37:29:37 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:39:34:39:34 | x : String | TypeFlowDispatch.cs:39:46:39:46 | access to parameter x | provenance | | +| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:42:42:42:42 | x : String | TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:44:11:44:11 | access to parameter x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:47:46:47:46 | x : String | TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | provenance | | +| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | provenance | | +| TypeFlowDispatch.cs:49:19:49:19 | access to parameter x : String | TypeFlowDispatch.cs:42:42:42:42 | x : String | provenance | | +| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | provenance | | +| TypeFlowDispatch.cs:52:32:52:32 | t : String | TypeFlowDispatch.cs:52:43:52:43 | access to parameter t | provenance | | +| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | provenance | | +| TypeFlowDispatch.cs:57:38:57:48 | call to method Source : String | TypeFlowDispatch.cs:47:46:47:46 | x : String | provenance | | +| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | provenance | | +| TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | provenance | | +| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | provenance | | +| TypeFlowDispatch.cs:63:27:63:27 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:63:22:63:22 | SSA def(x) : String | provenance | | +| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:64:15:64:15 | access to local variable x : String | TypeFlowDispatch.cs:52:32:52:32 | t : String | provenance | | +| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:69:17:69:17 | access to parameter l : List [element] : String | TypeFlowDispatch.cs:61:29:61:29 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:74:42:74:52 | call to method Source : String | TypeFlowDispatch.cs:74:23:74:54 | object creation of type List : List [element] : String | provenance | | +| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | provenance | | +| TypeFlowDispatch.cs:77:21:77:27 | access to local variable tainted : List [element] : String | TypeFlowDispatch.cs:67:33:67:33 | l : List [element] : String | provenance | | nodes | TypeFlowDispatch.cs:11:42:11:42 | x : String | semmle.label | x : String | | TypeFlowDispatch.cs:11:42:11:42 | x : String | semmle.label | x : String | diff --git a/csharp/ql/test/library-tests/dataflow/types/Types.expected b/csharp/ql/test/library-tests/dataflow/types/Types.expected index 76628874c48..1c35152bc26 100644 --- a/csharp/ql/test/library-tests/dataflow/types/Types.expected +++ b/csharp/ql/test/library-tests/dataflow/types/Types.expected @@ -1,63 +1,63 @@ testFailures edges -| Types.cs:7:21:7:25 | this : D | Types.cs:7:32:7:35 | this access : D | -| Types.cs:7:32:7:35 | this access : D | Types.cs:16:30:16:30 | this : D | -| Types.cs:16:30:16:30 | this : D | Types.cs:16:42:16:45 | this access | -| Types.cs:23:12:23:18 | object creation of type C : C | Types.cs:47:22:47:22 | a : C | -| Types.cs:25:12:25:18 | object creation of type C : C | Types.cs:63:22:63:22 | a : C | -| Types.cs:26:12:26:18 | object creation of type C : C | Types.cs:65:25:65:25 | x : C | -| Types.cs:27:12:27:18 | object creation of type C : C | Types.cs:67:25:67:25 | x : C | -| Types.cs:28:12:28:18 | object creation of type C : C | Types.cs:69:25:69:25 | x : C | -| Types.cs:30:12:30:18 | object creation of type C : C | Types.cs:77:22:77:22 | a : C | -| Types.cs:32:9:32:15 | object creation of type D : D | Types.cs:16:30:16:30 | this : D | -| Types.cs:33:9:33:15 | object creation of type D : D | Types.cs:7:21:7:25 | this : D | -| Types.cs:35:12:35:18 | object creation of type D : D | Types.cs:53:22:53:22 | a : D | -| Types.cs:37:12:37:18 | object creation of type D : D | Types.cs:65:25:65:25 | x : D | -| Types.cs:38:12:38:18 | object creation of type D : D | Types.cs:67:25:67:25 | x : D | -| Types.cs:39:12:39:18 | object creation of type D : D | Types.cs:69:25:69:25 | x : D | -| Types.cs:40:12:40:18 | object creation of type D : D | Types.cs:71:25:71:25 | x : D | -| Types.cs:43:20:43:23 | null : null | Types.cs:44:14:44:14 | access to local variable o | -| Types.cs:47:22:47:22 | a : C | Types.cs:49:18:49:20 | SSA def(c) : C | -| Types.cs:49:18:49:20 | SSA def(c) : C | Types.cs:50:18:50:18 | access to local variable c | -| Types.cs:53:22:53:22 | a : D | Types.cs:57:18:57:20 | SSA def(d) : D | -| Types.cs:57:18:57:20 | SSA def(d) : D | Types.cs:58:22:58:22 | access to local variable d | -| Types.cs:63:22:63:22 | a : C | Types.cs:63:33:63:36 | (...) ... | -| Types.cs:65:25:65:25 | x : C | Types.cs:65:36:65:36 | access to parameter x | -| Types.cs:65:25:65:25 | x : D | Types.cs:65:36:65:36 | access to parameter x | -| Types.cs:67:25:67:25 | x : C | Types.cs:67:48:67:48 | access to parameter x | -| Types.cs:67:25:67:25 | x : D | Types.cs:67:48:67:48 | access to parameter x | -| Types.cs:69:25:69:25 | x : C | Types.cs:69:52:69:52 | access to parameter x | -| Types.cs:69:25:69:25 | x : D | Types.cs:69:52:69:52 | access to parameter x | -| Types.cs:71:25:71:25 | x : D | Types.cs:73:21:73:21 | (...) ... : D | -| Types.cs:73:21:73:21 | (...) ... : D | Types.cs:74:9:74:9 | access to local variable d : D | -| Types.cs:74:9:74:9 | access to local variable d : D | Types.cs:16:30:16:30 | this : D | -| Types.cs:77:22:77:22 | a : C | Types.cs:79:18:79:25 | SSA def(b) : C | -| Types.cs:79:18:79:25 | SSA def(b) : C | Types.cs:80:18:80:18 | access to local variable b | -| Types.cs:90:22:90:22 | e : Types+E.E2 | Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | -| Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | -| Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | -| Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | -| Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | Types.cs:90:22:90:22 | e : Types+E.E2 | -| Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | -| Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:31 | access to field Field | -| Types.cs:120:25:120:31 | object creation of type A : A | Types.cs:122:30:122:30 | access to local variable a : A | -| Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | -| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:122:22:122:31 | call to method Through | -| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:130:34:130:34 | x : A | -| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:123:22:123:32 | call to method Through | -| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:130:34:130:34 | x : Types+E.E2 | -| Types.cs:130:34:130:34 | x : A | Types.cs:130:40:130:40 | access to parameter x : A | -| Types.cs:130:34:130:34 | x : Types+E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types+E.E2 | -| Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | -| Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | -| Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | -| Types.cs:144:23:144:34 | object creation of type Object : Object | Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | -| Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | -| Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | -| Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | Types.cs:153:42:153:51 | access to field Field | -| Types.cs:162:34:162:34 | this : Types+F+F1 | Types.cs:162:46:162:49 | this access | -| Types.cs:167:22:167:34 | object creation of type F1 : Types+F+F1 | Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | -| Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | Types.cs:162:34:162:34 | this : Types+F+F1 | +| Types.cs:7:21:7:25 | this : D | Types.cs:7:32:7:35 | this access : D | provenance | | +| Types.cs:7:32:7:35 | this access : D | Types.cs:16:30:16:30 | this : D | provenance | | +| Types.cs:16:30:16:30 | this : D | Types.cs:16:42:16:45 | this access | provenance | | +| Types.cs:23:12:23:18 | object creation of type C : C | Types.cs:47:22:47:22 | a : C | provenance | | +| Types.cs:25:12:25:18 | object creation of type C : C | Types.cs:63:22:63:22 | a : C | provenance | | +| Types.cs:26:12:26:18 | object creation of type C : C | Types.cs:65:25:65:25 | x : C | provenance | | +| Types.cs:27:12:27:18 | object creation of type C : C | Types.cs:67:25:67:25 | x : C | provenance | | +| Types.cs:28:12:28:18 | object creation of type C : C | Types.cs:69:25:69:25 | x : C | provenance | | +| Types.cs:30:12:30:18 | object creation of type C : C | Types.cs:77:22:77:22 | a : C | provenance | | +| Types.cs:32:9:32:15 | object creation of type D : D | Types.cs:16:30:16:30 | this : D | provenance | | +| Types.cs:33:9:33:15 | object creation of type D : D | Types.cs:7:21:7:25 | this : D | provenance | | +| Types.cs:35:12:35:18 | object creation of type D : D | Types.cs:53:22:53:22 | a : D | provenance | | +| Types.cs:37:12:37:18 | object creation of type D : D | Types.cs:65:25:65:25 | x : D | provenance | | +| Types.cs:38:12:38:18 | object creation of type D : D | Types.cs:67:25:67:25 | x : D | provenance | | +| Types.cs:39:12:39:18 | object creation of type D : D | Types.cs:69:25:69:25 | x : D | provenance | | +| Types.cs:40:12:40:18 | object creation of type D : D | Types.cs:71:25:71:25 | x : D | provenance | | +| Types.cs:43:20:43:23 | null : null | Types.cs:44:14:44:14 | access to local variable o | provenance | | +| Types.cs:47:22:47:22 | a : C | Types.cs:49:18:49:20 | SSA def(c) : C | provenance | | +| Types.cs:49:18:49:20 | SSA def(c) : C | Types.cs:50:18:50:18 | access to local variable c | provenance | | +| Types.cs:53:22:53:22 | a : D | Types.cs:57:18:57:20 | SSA def(d) : D | provenance | | +| Types.cs:57:18:57:20 | SSA def(d) : D | Types.cs:58:22:58:22 | access to local variable d | provenance | | +| Types.cs:63:22:63:22 | a : C | Types.cs:63:33:63:36 | (...) ... | provenance | | +| Types.cs:65:25:65:25 | x : C | Types.cs:65:36:65:36 | access to parameter x | provenance | | +| Types.cs:65:25:65:25 | x : D | Types.cs:65:36:65:36 | access to parameter x | provenance | | +| Types.cs:67:25:67:25 | x : C | Types.cs:67:48:67:48 | access to parameter x | provenance | | +| Types.cs:67:25:67:25 | x : D | Types.cs:67:48:67:48 | access to parameter x | provenance | | +| Types.cs:69:25:69:25 | x : C | Types.cs:69:52:69:52 | access to parameter x | provenance | | +| Types.cs:69:25:69:25 | x : D | Types.cs:69:52:69:52 | access to parameter x | provenance | | +| Types.cs:71:25:71:25 | x : D | Types.cs:73:21:73:21 | (...) ... : D | provenance | | +| Types.cs:73:21:73:21 | (...) ... : D | Types.cs:74:9:74:9 | access to local variable d : D | provenance | | +| Types.cs:74:9:74:9 | access to local variable d : D | Types.cs:16:30:16:30 | this : D | provenance | | +| Types.cs:77:22:77:22 | a : C | Types.cs:79:18:79:25 | SSA def(b) : C | provenance | | +| Types.cs:79:18:79:25 | SSA def(b) : C | Types.cs:80:18:80:18 | access to local variable b | provenance | | +| Types.cs:90:22:90:22 | e : Types+E.E2 | Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | provenance | | +| Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:92:26:92:26 | access to parameter e : Types+E.E2 | Types.cs:92:13:92:16 | [post] this access : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:93:13:93:16 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:110:25:110:32 | object creation of type E2 : Types+E.E2 | Types.cs:90:22:90:22 | e : Types+E.E2 | provenance | | +| Types.cs:113:34:113:34 | this : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | provenance | | +| Types.cs:115:22:115:25 | this access : Types+E [field Field] : Types+E.E2 | Types.cs:115:22:115:31 | access to field Field | provenance | | +| Types.cs:120:25:120:31 | object creation of type A : A | Types.cs:122:30:122:30 | access to local variable a : A | provenance | | +| Types.cs:121:26:121:33 | object creation of type E2 : Types+E.E2 | Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | provenance | | +| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:122:22:122:31 | call to method Through | provenance | | +| Types.cs:122:30:122:30 | access to local variable a : A | Types.cs:130:34:130:34 | x : A | provenance | | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:123:22:123:32 | call to method Through | provenance | | +| Types.cs:123:30:123:31 | access to local variable e2 : Types+E.E2 | Types.cs:130:34:130:34 | x : Types+E.E2 | provenance | | +| Types.cs:130:34:130:34 | x : A | Types.cs:130:40:130:40 | access to parameter x : A | provenance | | +| Types.cs:130:34:130:34 | x : Types+E.E2 | Types.cs:130:40:130:40 | access to parameter x : Types+E.E2 | provenance | | +| Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | provenance | | +| Types.cs:138:32:138:35 | this access : FieldC [field Field] : Object | Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | provenance | | +| Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | provenance | | +| Types.cs:144:23:144:34 | object creation of type Object : Object | Types.cs:144:13:144:13 | [post] access to parameter c : FieldC [field Field] : Object | provenance | | +| Types.cs:145:13:145:13 | access to parameter c : FieldC [field Field] : Object | Types.cs:138:21:138:25 | this : FieldC [field Field] : Object | provenance | | +| Types.cs:153:30:153:30 | this : FieldC [field Field] : Object | Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | provenance | | +| Types.cs:153:42:153:45 | this access : FieldC [field Field] : Object | Types.cs:153:42:153:51 | access to field Field | provenance | | +| Types.cs:162:34:162:34 | this : Types+F+F1 | Types.cs:162:46:162:49 | this access | provenance | | +| Types.cs:167:22:167:34 | object creation of type F1 : Types+F+F1 | Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | provenance | | +| Types.cs:173:13:173:19 | call to method GetF1 : Types+F+F1 | Types.cs:162:34:162:34 | this : Types+F+F1 | provenance | | nodes | Types.cs:7:21:7:25 | this : D | semmle.label | this : D | | Types.cs:7:32:7:35 | this access : D | semmle.label | this access : D | diff --git a/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected b/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected index 9f65e360ec0..d6224193f87 100644 --- a/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected +++ b/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected @@ -6,3 +6,5 @@ | expressions.cs:271:16:271:24 | IntVector | expressions.cs:271:16:271:24 | call to constructor Object | file://:0:0:0:0 | Object | | expressions.cs:311:16:311:20 | Digit | expressions.cs:311:16:311:20 | call to constructor ValueType | file://:0:0:0:0 | ValueType | | expressions.cs:481:20:481:22 | Num | expressions.cs:481:20:481:22 | call to constructor Object | file://:0:0:0:0 | Object | +| expressions.cs:518:11:518:17 | ClassC1 | expressions.cs:518:11:518:17 | call to constructor Object | file://:0:0:0:0 | Object | +| expressions.cs:520:11:520:17 | ClassC2 | expressions.cs:520:33:520:44 | call to constructor ClassC1 | expressions.cs:518:11:518:17 | ClassC1 | diff --git a/csharp/ql/test/library-tests/expressions/PrintAst.expected b/csharp/ql/test/library-tests/expressions/PrintAst.expected index 60006e8d939..d6e677602e3 100644 --- a/csharp/ql/test/library-tests/expressions/PrintAst.expected +++ b/csharp/ql/test/library-tests/expressions/PrintAst.expected @@ -2406,3 +2406,19 @@ expressions.cs: # 512| 0: [IntLiteral] 10 # 515| 5: [Field] myInlineArrayElements # 515| -1: [TypeMention] int +# 518| 22: [Class] ClassC1 +# 518| 4: [InstanceConstructor,PrimaryConstructor] ClassC1 +#-----| 2: (Parameters) +# 518| 0: [Parameter] oc1 +# 518| -1: [TypeMention] object +# 518| 4: [BlockStmt] {...} +# 520| 23: [Class] ClassC2 +#-----| 3: (Base types) +# 520| 0: [TypeMention] ClassC1 +# 520| 4: [InstanceConstructor,PrimaryConstructor] ClassC2 +#-----| 2: (Parameters) +# 520| 0: [Parameter] oc2 +# 520| -1: [TypeMention] object +# 520| 3: [ConstructorInitializer] call to constructor ClassC1 +# 520| 0: [ParameterAccess] access to parameter oc2 +# 520| 4: [BlockStmt] {...} diff --git a/csharp/ql/test/library-tests/expressions/expressions.cs b/csharp/ql/test/library-tests/expressions/expressions.cs index 5e5826d7d23..b4079d5e9a3 100644 --- a/csharp/ql/test/library-tests/expressions/expressions.cs +++ b/csharp/ql/test/library-tests/expressions/expressions.cs @@ -514,4 +514,8 @@ namespace Expressions { private int myInlineArrayElements; } + + class ClassC1(object oc1) { } + + class ClassC2(object oc2) : ClassC1(oc2) { } } diff --git a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected index a9d4895fb46..b4b4cf6f129 100644 --- a/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected +++ b/csharp/ql/test/library-tests/frameworks/EntityFramework/Dataflow.expected @@ -1,178 +1,178 @@ edges -| EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:61:24:61:32 | "tainted" : String | EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:83:24:83:32 | "tainted" : String | EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:105:24:105:32 | "tainted" : String | EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | -| EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | -| EntityFramework.cs:124:25:124:33 | "tainted" : String | EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | -| EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | EntityFramework.cs:129:18:129:25 | access to property Title | -| EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | -| EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | -| EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | -| EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | -| EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | -| EntityFramework.cs:145:34:145:42 | "tainted" : String | EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | -| EntityFramework.cs:159:26:159:34 | "tainted" : String | EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | -| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | -| EntityFramework.cs:175:24:175:32 | "tainted" : String | EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | -| EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | -| EntityFramework.cs:180:26:180:34 | "tainted" : String | EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | -| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | -| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | -| EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | -| EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | -| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | -| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | -| EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | -| EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | EntityFramework.cs:204:18:204:41 | access to property Name | -| EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | -| EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | EntityFramework.cs:212:18:212:45 | access to property Street | -| EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | -| EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | -| EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | EntityFramework.cs:219:18:219:61 | access to property Street | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | -| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | -| EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | EntityFrameworkCore.cs:84:18:84:46 | (...) ... | -| EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | -| EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | -| EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | -| EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | -| EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | -| EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | -| EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:25 | access to property Title | -| EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | -| EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | -| EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | -| EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | -| EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | -| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | -| EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | -| EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | -| EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | -| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | -| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | -| EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | -| EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | -| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | -| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | -| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | -| EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | -| EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | -| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | -| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | -| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | -| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | -| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | -| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | -| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | +| EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:61:24:61:32 | "tainted" : String | EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:66:13:66:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:66:29:66:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:66:13:66:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:68:13:68:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:83:24:83:32 | "tainted" : String | EntityFramework.cs:81:13:84:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:88:13:88:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:88:29:88:30 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:88:13:88:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:90:19:90:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:105:24:105:32 | "tainted" : String | EntityFramework.cs:103:13:106:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:109:27:109:28 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | provenance | | +| EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | provenance | | +| EntityFramework.cs:124:25:124:33 | "tainted" : String | EntityFramework.cs:122:13:125:13 | { ..., ... } : Person [property Title] : String | provenance | | +| EntityFramework.cs:129:18:129:19 | access to local variable p1 : Person [property Title] : String | EntityFramework.cs:129:18:129:25 | access to property Title | provenance | | +| EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | EntityFramework.cs:141:13:148:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | EntityFramework.cs:142:29:147:17 | array creation of type Address[] : null [element, property Street] : String | provenance | | +| EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | EntityFramework.cs:142:35:147:17 | { ..., ... } : null [element, property Street] : String | provenance | | +| EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:143:21:146:21 | object creation of type Address : Address [property Street] : String | provenance | | +| EntityFramework.cs:145:34:145:42 | "tainted" : String | EntityFramework.cs:143:33:146:21 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:149:29:149:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFramework.cs:149:13:149:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:150:13:150:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:154:13:154:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFramework.cs:159:26:159:34 | "tainted" : String | EntityFramework.cs:157:13:160:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFramework.cs:161:13:161:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:161:31:161:32 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:161:13:161:25 | [post] access to property Addresses : DbSet [element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:162:13:162:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:166:13:166:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFramework.cs:175:24:175:32 | "tainted" : String | EntityFramework.cs:173:13:176:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFramework.cs:180:26:180:34 | "tainted" : String | EntityFramework.cs:178:13:181:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFramework.cs:182:71:182:72 | access to local variable p1 : Person [property Name] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFramework.cs:182:85:182:86 | access to local variable a1 : Address [property Street] : String | EntityFramework.cs:182:60:182:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFramework.cs:183:13:183:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | provenance | | +| EntityFramework.cs:183:37:183:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFramework.cs:183:13:183:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | provenance | | +| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:184:13:184:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:190:13:190:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:193:35:193:35 | p : Person [property Name] : String | EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | provenance | | +| EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:196:13:196:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFramework.cs:196:29:196:29 | access to parameter p : Person [property Name] : String | EntityFramework.cs:196:13:196:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:197:13:197:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFramework.cs:204:18:204:28 | access to property Persons : DbSet [element, property Name] : String | EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | provenance | | +| EntityFramework.cs:204:18:204:36 | call to method First : Person [property Name] : String | EntityFramework.cs:204:18:204:41 | access to property Name | provenance | | +| EntityFramework.cs:212:18:212:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFramework.cs:212:18:212:38 | call to method First
    : Address [property Street] : String | EntityFramework.cs:212:18:212:45 | access to property Street | provenance | | +| EntityFramework.cs:219:18:219:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFramework.cs:219:18:219:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | provenance | | +| EntityFramework.cs:219:18:219:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFramework.cs:219:18:219:54 | call to method First
    : Address [property Street] : String | EntityFramework.cs:219:18:219:61 | access to property Street | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:83:18:83:28 | access to local variable taintSource | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | provenance | | +| EntityFrameworkCore.cs:82:31:82:39 | "tainted" : String | EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | provenance | | +| EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | EntityFrameworkCore.cs:84:18:84:46 | (...) ... | provenance | | +| EntityFrameworkCore.cs:84:35:84:45 | access to local variable taintSource : String | EntityFrameworkCore.cs:84:18:84:46 | object creation of type RawSqlString : RawSqlString | provenance | | +| EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | EntityFrameworkCore.cs:85:18:85:42 | (...) ... | provenance | | +| EntityFrameworkCore.cs:85:32:85:42 | access to local variable taintSource : String | EntityFrameworkCore.cs:85:18:85:42 | call to operator implicit conversion : RawSqlString | provenance | | +| EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:94:24:94:32 | "tainted" : String | EntityFrameworkCore.cs:92:13:95:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:99:13:99:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:99:29:99:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:99:13:99:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:101:13:101:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:116:24:116:32 | "tainted" : String | EntityFrameworkCore.cs:114:13:117:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:121:13:121:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:121:29:121:30 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:121:13:121:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:123:19:123:21 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:138:24:138:32 | "tainted" : String | EntityFrameworkCore.cs:136:13:139:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:142:27:142:28 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | provenance | | +| EntityFrameworkCore.cs:157:25:157:33 | "tainted" : String | EntityFrameworkCore.cs:155:13:158:13 | { ..., ... } : Person [property Title] : String | provenance | | +| EntityFrameworkCore.cs:162:18:162:19 | access to local variable p1 : Person [property Title] : String | EntityFrameworkCore.cs:162:18:162:25 | access to property Title | provenance | | +| EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | EntityFrameworkCore.cs:174:13:181:13 | { ..., ... } : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | EntityFrameworkCore.cs:175:29:180:17 | array creation of type Address[] : null [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | EntityFrameworkCore.cs:175:35:180:17 | { ..., ... } : null [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:176:21:179:21 | object creation of type Address : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:178:34:178:42 | "tainted" : String | EntityFrameworkCore.cs:176:33:179:21 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:182:29:182:30 | access to local variable p1 : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:182:13:182:23 | [post] access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:183:13:183:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:187:13:187:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:192:26:192:34 | "tainted" : String | EntityFrameworkCore.cs:190:13:193:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | EntityFrameworkCore.cs:194:13:194:15 | [post] access to local variable ctx : MyContext [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:194:31:194:32 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:194:13:194:25 | [post] access to property Addresses : DbSet [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:195:13:195:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:199:13:199:15 | access to local variable ctx : MyContext [property Persons, element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:208:24:208:32 | "tainted" : String | EntityFrameworkCore.cs:206:13:209:13 | { ..., ... } : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:213:26:213:34 | "tainted" : String | EntityFrameworkCore.cs:211:13:214:13 | { ..., ... } : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:215:71:215:72 | access to local variable p1 : Person [property Name] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:215:85:215:86 | access to local variable a1 : Address [property Street] : String | EntityFrameworkCore.cs:215:60:215:88 | { ..., ... } : PersonAddressMap [property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:15 | [post] access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Address, property Street] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Address, property Street] : String | provenance | | +| EntityFrameworkCore.cs:216:37:216:53 | access to local variable personAddressMap1 : PersonAddressMap [property Person, property Name] : String | EntityFrameworkCore.cs:216:13:216:31 | [post] access to property PersonAddresses : DbSet [element, property Person, property Name] : String | provenance | | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:217:13:217:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Address, property Street] : String | EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:223:13:223:15 | access to local variable ctx : MyContext [property PersonAddresses, element, property Person, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:226:35:226:35 | p : Person [property Name] : String | EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:229:13:229:15 | [post] access to local variable ctx : MyContext [property Persons, element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:229:29:229:29 | access to parameter p : Person [property Name] : String | EntityFrameworkCore.cs:229:13:229:23 | [post] access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:230:13:230:15 | access to local variable ctx : MyContext [property Persons, element, property Name] : String | EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | provenance | | +| EntityFrameworkCore.cs:237:18:237:28 | access to property Persons : DbSet [element, property Name] : String | EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | provenance | | +| EntityFrameworkCore.cs:237:18:237:36 | call to method First : Person [property Name] : String | EntityFrameworkCore.cs:237:18:237:41 | access to property Name | provenance | | +| EntityFrameworkCore.cs:245:18:245:30 | access to property Addresses : DbSet
    [element, property Street] : String | EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:245:18:245:38 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:245:18:245:45 | access to property Street | provenance | | +| EntityFrameworkCore.cs:252:18:252:28 | access to property Persons : DbSet [element, property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:252:18:252:36 | call to method First : Person [property Addresses, element, property Street] : String | EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | provenance | | +| EntityFrameworkCore.cs:252:18:252:46 | access to property Addresses : ICollection
    [element, property Street] : String | EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | provenance | | +| EntityFrameworkCore.cs:252:18:252:54 | call to method First
    : Address [property Street] : String | EntityFrameworkCore.cs:252:18:252:61 | access to property Street | provenance | | nodes | EntityFramework.cs:59:13:62:13 | { ..., ... } : Person [property Name] : String | semmle.label | { ..., ... } : Person [property Name] : String | | EntityFramework.cs:61:24:61:32 | "tainted" : String | semmle.label | "tainted" : String | diff --git a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected index f3525d8bd47..a1c5e925437 100644 --- a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected +++ b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected @@ -1,6 +1,6 @@ edges -| FormatMissingArgument.cs:22:16:22:20 | "{1}" : String | FormatMissingArgument.cs:28:24:28:29 | format : String | -| FormatMissingArgument.cs:28:24:28:29 | format : String | FormatMissingArgument.cs:31:23:31:28 | access to parameter format | +| FormatMissingArgument.cs:22:16:22:20 | "{1}" : String | FormatMissingArgument.cs:28:24:28:29 | format : String | provenance | | +| FormatMissingArgument.cs:28:24:28:29 | format : String | FormatMissingArgument.cs:31:23:31:28 | access to parameter format | provenance | | nodes | FormatInvalid.cs:9:23:9:27 | "{0}" | semmle.label | "{0}" | | FormatInvalid.cs:12:23:12:29 | "{0,1}" | semmle.label | "{0,1}" | diff --git a/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected b/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected index bf23b05a35a..5ff0ff32c21 100644 --- a/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected +++ b/csharp/ql/test/query-tests/Likely Bugs/UnsafeYearConstruction/UnsafeYearConstruction.expected @@ -1,7 +1,7 @@ edges -| Program.cs:15:27:15:38 | ... + ... : Int32 | Program.cs:17:37:17:43 | access to local variable endYear | -| Program.cs:23:31:23:34 | year : Int32 | Program.cs:26:39:26:42 | access to parameter year | -| Program.cs:33:18:33:29 | ... - ... : Int32 | Program.cs:23:31:23:34 | year : Int32 | +| Program.cs:15:27:15:38 | ... + ... : Int32 | Program.cs:17:37:17:43 | access to local variable endYear | provenance | | +| Program.cs:23:31:23:34 | year : Int32 | Program.cs:26:39:26:42 | access to parameter year | provenance | | +| Program.cs:33:18:33:29 | ... - ... : Int32 | Program.cs:23:31:23:34 | year : Int32 | provenance | | nodes | Program.cs:13:39:13:50 | ... - ... | semmle.label | ... - ... | | Program.cs:15:27:15:38 | ... + ... : Int32 | semmle.label | ... + ... : Int32 | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected b/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected index 4135e7ce5d6..10a233c2c82 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-020/UntrustedDataToExternalAPI.expected @@ -1,7 +1,7 @@ edges -| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:9:20:9:50 | access to indexer : String | -| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:13:28:13:31 | access to local variable name | -| UntrustedData.cs:9:20:9:50 | access to indexer : String | UntrustedData.cs:13:28:13:31 | access to local variable name | +| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:9:20:9:50 | access to indexer : String | provenance | | +| UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | UntrustedData.cs:13:28:13:31 | access to local variable name | provenance | | +| UntrustedData.cs:9:20:9:50 | access to indexer : String | UntrustedData.cs:13:28:13:31 | access to local variable name | provenance | | nodes | UntrustedData.cs:9:20:9:30 | access to property Request | semmle.label | access to property Request | | UntrustedData.cs:9:20:9:42 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected index 77e55c484e7..e3bc1c2dd1b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-022/TaintedPath/TaintedPath.expected @@ -1,19 +1,19 @@ edges -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:10:23:10:53 | access to indexer : String | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:12:50:12:53 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:17:51:17:54 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:25:30:25:33 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:31:30:31:33 | access to local variable path | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:36:25:36:31 | access to local variable badPath | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:38:49:38:55 | access to local variable badPath | -| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:51:26:51:29 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:12:50:12:53 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:17:51:17:54 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:25:30:25:33 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:31:30:31:33 | access to local variable path | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:36:25:36:31 | access to local variable badPath | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:38:49:38:55 | access to local variable badPath | -| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:51:26:51:29 | access to local variable path | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:10:23:10:53 | access to indexer : String | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:12:50:12:53 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:17:51:17:54 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:25:30:25:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:31:30:31:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:36:25:36:31 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:38:49:38:55 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | TaintedPath.cs:51:26:51:29 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:12:50:12:53 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:17:51:17:54 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:25:30:25:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:31:30:31:33 | access to local variable path | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:36:25:36:31 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:38:49:38:55 | access to local variable badPath | provenance | | +| TaintedPath.cs:10:23:10:53 | access to indexer : String | TaintedPath.cs:51:26:51:29 | access to local variable path | provenance | | nodes | TaintedPath.cs:10:23:10:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | TaintedPath.cs:10:23:10:53 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected b/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected index e47404352b7..9e7f0cbc237 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-022/ZipSlip/ZipSlip.expected @@ -1,22 +1,23 @@ edges -| ZipSlip.cs:15:44:15:75 | call to method GetFullPath : String | ZipSlip.cs:30:71:30:87 | access to local variable fullPath_relative : String | -| ZipSlip.cs:15:44:15:75 | call to method GetFullPath : String | ZipSlip.cs:39:45:39:73 | access to local variable destFilePath_notCanonicalized | -| ZipSlip.cs:15:61:15:74 | access to property FullName : String | ZipSlip.cs:15:44:15:75 | call to method GetFullPath : String | -| ZipSlip.cs:18:53:18:66 | access to property FullName : String | ZipSlip.cs:22:71:22:96 | access to local variable file_badDirectoryTraversal : String | -| ZipSlip.cs:22:43:22:97 | call to method Combine : String | ZipSlip.cs:23:41:23:52 | access to local variable destFileName | -| ZipSlip.cs:22:71:22:96 | access to local variable file_badDirectoryTraversal : String | ZipSlip.cs:22:43:22:97 | call to method Combine : String | -| ZipSlip.cs:30:43:30:88 | call to method Combine : String | ZipSlip.cs:31:41:31:52 | access to local variable destFilePath | -| ZipSlip.cs:30:71:30:87 | access to local variable fullPath_relative : String | ZipSlip.cs:30:43:30:88 | call to method Combine : String | -| ZipSlip.cs:58:31:58:75 | call to method Combine : String | ZipSlip.cs:62:33:62:40 | access to local variable fullpath | -| ZipSlip.cs:58:31:58:75 | call to method Combine : String | ZipSlip.cs:71:37:71:44 | access to local variable fullpath | -| ZipSlip.cs:58:61:58:74 | access to property FullName : String | ZipSlip.cs:58:31:58:75 | call to method Combine : String | -| ZipSlip.cs:105:47:105:86 | call to method Combine : String | ZipSlip.cs:112:74:112:85 | access to local variable destFilePath | -| ZipSlip.cs:105:47:105:86 | call to method Combine : String | ZipSlip.cs:119:71:119:82 | access to local variable destFilePath | -| ZipSlip.cs:105:47:105:86 | call to method Combine : String | ZipSlip.cs:126:57:126:68 | access to local variable destFilePath | -| ZipSlip.cs:105:47:105:86 | call to method Combine : String | ZipSlip.cs:134:58:134:69 | access to local variable destFilePath | -| ZipSlip.cs:105:72:105:85 | access to property FullName : String | ZipSlip.cs:105:47:105:86 | call to method Combine : String | -| ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | ZipSlipBad.cs:10:29:10:40 | access to local variable destFileName | -| ZipSlipBad.cs:9:59:9:72 | access to property FullName : String | ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | +| ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | ZipSlip.cs:30:71:30:78 | access to local variable fullPath : String | provenance | | +| ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | ZipSlip.cs:38:81:38:88 | access to local variable fullPath : String | provenance | | +| ZipSlip.cs:15:52:15:65 | access to property FullName : String | ZipSlip.cs:15:35:15:66 | call to method GetFullPath : String | provenance | | +| ZipSlip.cs:18:31:18:44 | access to property FullName : String | ZipSlip.cs:22:71:22:74 | access to local variable file : String | provenance | | +| ZipSlip.cs:22:43:22:75 | call to method Combine : String | ZipSlip.cs:23:41:23:52 | access to local variable destFileName | provenance | | +| ZipSlip.cs:22:71:22:74 | access to local variable file : String | ZipSlip.cs:22:43:22:75 | call to method Combine : String | provenance | | +| ZipSlip.cs:30:43:30:79 | call to method Combine : String | ZipSlip.cs:31:41:31:52 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:30:43:30:79 | call to method Combine : String | ZipSlip.cs:35:45:35:56 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:30:71:30:78 | access to local variable fullPath : String | ZipSlip.cs:30:43:30:79 | call to method Combine : String | provenance | | +| ZipSlip.cs:38:36:38:90 | call to method GetFullPath : String | ZipSlip.cs:39:41:39:52 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:38:53:38:89 | call to method Combine : String | ZipSlip.cs:38:36:38:90 | call to method GetFullPath : String | provenance | | +| ZipSlip.cs:38:81:38:88 | access to local variable fullPath : String | ZipSlip.cs:38:53:38:89 | call to method Combine : String | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:68:74:68:85 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:75:71:75:82 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:82:57:82:68 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:47:61:86 | call to method Combine : String | ZipSlip.cs:90:58:90:69 | access to local variable destFilePath | provenance | | +| ZipSlip.cs:61:72:61:85 | access to property FullName : String | ZipSlip.cs:61:47:61:86 | call to method Combine : String | provenance | | +| ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | ZipSlipBad.cs:10:29:10:40 | access to local variable destFileName | provenance | | +| ZipSlipBad.cs:9:59:9:72 | access to property FullName : String | ZipSlipBad.cs:9:31:9:73 | call to method Combine : String | provenance | | nodes | ZipSlip.cs:15:44:15:75 | call to method GetFullPath : String | semmle.label | call to method GetFullPath : String | | ZipSlip.cs:15:61:15:74 | access to property FullName : String | semmle.label | access to property FullName : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected index 336342b9747..fc1da3ba7c6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/CommandInjection.expected @@ -1,26 +1,26 @@ edges -| CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:25:32:25:51 | access to property Text : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:27:26:47 | ... + ... | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:50:26:66 | ... + ... | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput | -| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | -| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | -| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | -| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | -| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | -| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | -| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | -| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | -| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | -| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | +| CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | CommandInjection.cs:25:32:25:51 | access to property Text : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:27:26:47 | ... + ... | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:26:50:26:66 | ... + ... | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput | provenance | | +| CommandInjection.cs:25:32:25:51 | access to property Text : String | CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | provenance | | +| CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | CommandInjection.cs:29:27:29:35 | access to local variable startInfo | provenance | | +| CommandInjection.cs:28:63:28:71 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | +| CommandInjection.cs:28:74:28:82 | access to local variable userInput : String | CommandInjection.cs:28:42:28:83 | object creation of type ProcessStartInfo : ProcessStartInfo | provenance | | +| CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:32:39:32:47 | access to local variable userInput : String | CommandInjection.cs:32:13:32:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:33:40:33:48 | access to local variable userInput : String | CommandInjection.cs:33:13:33:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | +| CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | CommandInjection.cs:35:27:35:40 | access to local variable startInfoProps | provenance | | +| CommandInjection.cs:34:47:34:55 | access to local variable userInput : String | CommandInjection.cs:34:13:34:26 | [post] access to local variable startInfoProps : ProcessStartInfo | provenance | | nodes | CommandInjection.cs:25:32:25:46 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | | CommandInjection.cs:25:32:25:51 | access to property Text : String | semmle.label | access to property Text : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected index 0c166565a83..46c85f7abbe 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-078/StoredCommandInjection.expected @@ -1,5 +1,5 @@ edges -| StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | StoredCommandInjection.cs:22:46:22:80 | ... + ... | +| StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | StoredCommandInjection.cs:22:46:22:80 | ... + ... | provenance | | nodes | StoredCommandInjection.cs:22:46:22:80 | ... + ... | semmle.label | ... + ... | | StoredCommandInjection.cs:22:54:22:80 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected index beef5ec2968..488df85e1c4 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/StoredXSS/StoredXSS.expected @@ -1,5 +1,5 @@ edges -| StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | +| StoredXSS.cs:22:60:22:86 | call to method GetString : String | StoredXSS.cs:22:44:22:86 | ... + ... | provenance | | nodes | StoredXSS.cs:22:44:22:86 | ... + ... | semmle.label | ... + ... | | StoredXSS.cs:22:60:22:86 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected index added443400..1e1c6258c89 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSS/XSS.expected @@ -1,19 +1,19 @@ edges -| Index.cshtml:5:19:5:31 | access to property Query : IQueryCollection | Index.cshtml:14:16:14:22 | call to operator implicit conversion | -| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:19:25:19:52 | access to indexer : String | -| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | -| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | -| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | -| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | -| XSSAspNet.cs:43:28:43:46 | access to property QueryString : NameValueCollection | XSSAspNet.cs:43:28:43:55 | access to indexer | -| XSSAspNetCore.cs:21:52:21:64 | access to property Query : IQueryCollection | XSSAspNetCore.cs:21:52:21:76 | call to operator implicit conversion | -| XSSAspNetCore.cs:40:56:40:58 | foo : String | XSSAspNetCore.cs:44:51:44:53 | access to parameter foo | -| XSSAspNetCore.cs:58:43:58:55 | access to property Query : IQueryCollection | XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | -| XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | XSSAspNetCore.cs:58:43:58:73 | call to method ToString | -| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | -| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:66 | access to indexer | -| XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | XSSAspNetCore.cs:61:44:61:66 | access to indexer | -| XSSAspNetCore.cs:72:51:72:65 | access to property Headers : IHeaderDictionary | XSSAspNetCore.cs:72:51:72:72 | call to operator implicit conversion | +| Index.cshtml:5:19:5:31 | access to property Query : IQueryCollection | Index.cshtml:14:16:14:22 | call to operator implicit conversion | provenance | | +| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:19:25:19:52 | access to indexer : String | provenance | | +| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:19:25:19:43 | access to property QueryString : NameValueCollection | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:26:30:26:34 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:19:25:19:52 | access to indexer : String | XSSAspNet.cs:36:40:36:44 | access to local variable sayHi | provenance | | +| XSSAspNet.cs:43:28:43:46 | access to property QueryString : NameValueCollection | XSSAspNet.cs:43:28:43:55 | access to indexer | provenance | | +| XSSAspNetCore.cs:21:52:21:64 | access to property Query : IQueryCollection | XSSAspNetCore.cs:21:52:21:76 | call to operator implicit conversion | provenance | | +| XSSAspNetCore.cs:40:56:40:58 | foo : String | XSSAspNetCore.cs:44:51:44:53 | access to parameter foo | provenance | | +| XSSAspNetCore.cs:58:43:58:55 | access to property Query : IQueryCollection | XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | provenance | | +| XSSAspNetCore.cs:58:43:58:62 | access to indexer : StringValues | XSSAspNetCore.cs:58:43:58:73 | call to method ToString | provenance | | +| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | provenance | | +| XSSAspNetCore.cs:61:44:61:56 | access to property Query : IQueryCollection | XSSAspNetCore.cs:61:44:61:66 | access to indexer | provenance | | +| XSSAspNetCore.cs:61:44:61:63 | access to indexer : StringValues | XSSAspNetCore.cs:61:44:61:66 | access to indexer | provenance | | +| XSSAspNetCore.cs:72:51:72:65 | access to property Headers : IHeaderDictionary | XSSAspNetCore.cs:72:51:72:72 | call to operator implicit conversion | provenance | | nodes | Index.cshtml:5:19:5:31 | access to property Query : IQueryCollection | semmle.label | access to property Query : IQueryCollection | | Index.cshtml:14:16:14:22 | call to operator implicit conversion | semmle.label | call to operator implicit conversion | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected index 941b4b359a9..e3c29b08316 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSAsp/XSS.expected @@ -1,33 +1,33 @@ edges -| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | -| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | -| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | -| XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | XSS.cs:25:48:25:67 | access to property Text : String | -| XSS.cs:25:48:25:67 | access to property Text : String | XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | -| XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | XSS.cs:26:32:26:51 | call to method ToString | -| XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | XSS.cs:27:29:27:48 | call to method ToString | -| XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | XSS.cs:28:26:28:45 | call to method ToString | -| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:37:27:37:61 | access to indexer : String | -| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:38:36:38:39 | access to local variable name | -| XSS.cs:37:27:37:61 | access to indexer : String | XSS.cs:38:36:38:39 | access to local variable name | -| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:57:27:57:73 | access to indexer : String | -| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:59:22:59:25 | access to local variable name | -| XSS.cs:57:27:57:73 | access to indexer : String | XSS.cs:59:22:59:25 | access to local variable name | -| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:75:27:75:61 | access to indexer : String | -| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:76:36:76:39 | access to local variable name | -| XSS.cs:75:27:75:61 | access to indexer : String | XSS.cs:76:36:76:39 | access to local variable name | -| XSS.cs:78:28:78:42 | access to property Request : HttpRequestBase | XSS.cs:79:36:79:40 | access to local variable name2 | -| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:85:27:85:61 | access to indexer : String | -| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:86:28:86:31 | access to local variable name | -| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:87:31:87:34 | access to local variable name | -| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:86:28:86:31 | access to local variable name | -| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:87:31:87:34 | access to local variable name | -| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:94:27:94:61 | access to indexer : String | -| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:95:31:95:34 | access to local variable name | -| XSS.cs:94:27:94:61 | access to indexer : String | XSS.cs:95:31:95:34 | access to local variable name | -| script.aspx:12:1:12:14 | <%= ... %> | script.aspx:12:1:12:14 | <%= ... %> | -| script.aspx:16:1:16:34 | <%= ... %> | script.aspx:16:1:16:34 | <%= ... %> | -| script.aspx:20:1:20:41 | <%= ... %> | script.aspx:20:1:20:41 | <%= ... %> | +| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | XSS.cs:25:48:25:67 | access to property Text : String | provenance | | +| XSS.cs:25:48:25:67 | access to property Text : String | XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | provenance | | +| XSS.cs:26:32:26:40 | access to local variable userInput : StringBuilder | XSS.cs:26:32:26:51 | call to method ToString | provenance | | +| XSS.cs:27:29:27:37 | access to local variable userInput : StringBuilder | XSS.cs:27:29:27:48 | call to method ToString | provenance | | +| XSS.cs:28:26:28:34 | access to local variable userInput : StringBuilder | XSS.cs:28:26:28:45 | call to method ToString | provenance | | +| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:37:27:37:61 | access to indexer : String | provenance | | +| XSS.cs:37:27:37:53 | access to property QueryString : NameValueCollection | XSS.cs:38:36:38:39 | access to local variable name | provenance | | +| XSS.cs:37:27:37:61 | access to indexer : String | XSS.cs:38:36:38:39 | access to local variable name | provenance | | +| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:57:27:57:73 | access to indexer : String | provenance | | +| XSS.cs:57:27:57:65 | access to property QueryString : NameValueCollection | XSS.cs:59:22:59:25 | access to local variable name | provenance | | +| XSS.cs:57:27:57:73 | access to indexer : String | XSS.cs:59:22:59:25 | access to local variable name | provenance | | +| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:75:27:75:61 | access to indexer : String | provenance | | +| XSS.cs:75:27:75:53 | access to property QueryString : NameValueCollection | XSS.cs:76:36:76:39 | access to local variable name | provenance | | +| XSS.cs:75:27:75:61 | access to indexer : String | XSS.cs:76:36:76:39 | access to local variable name | provenance | | +| XSS.cs:78:28:78:42 | access to property Request : HttpRequestBase | XSS.cs:79:36:79:40 | access to local variable name2 | provenance | | +| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:85:27:85:61 | access to indexer : String | provenance | | +| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:86:28:86:31 | access to local variable name | provenance | | +| XSS.cs:85:27:85:53 | access to property QueryString : NameValueCollection | XSS.cs:87:31:87:34 | access to local variable name | provenance | | +| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:86:28:86:31 | access to local variable name | provenance | | +| XSS.cs:85:27:85:61 | access to indexer : String | XSS.cs:87:31:87:34 | access to local variable name | provenance | | +| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:94:27:94:61 | access to indexer : String | provenance | | +| XSS.cs:94:27:94:53 | access to property QueryString : NameValueCollection | XSS.cs:95:31:95:34 | access to local variable name | provenance | | +| XSS.cs:94:27:94:61 | access to indexer : String | XSS.cs:95:31:95:34 | access to local variable name | provenance | | +| script.aspx:12:1:12:14 | <%= ... %> | script.aspx:12:1:12:14 | <%= ... %> | provenance | | +| script.aspx:16:1:16:34 | <%= ... %> | script.aspx:16:1:16:34 | <%= ... %> | provenance | | +| script.aspx:20:1:20:41 | <%= ... %> | script.aspx:20:1:20:41 | <%= ... %> | provenance | | nodes | XSS.cs:25:13:25:21 | [post] access to local variable userInput : StringBuilder | semmle.label | [post] access to local variable userInput : StringBuilder | | XSS.cs:25:48:25:62 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs index eecb00361d6..52b0510994e 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Shared_Test18.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Areas/TestArea/Views/Shared/Test18.cshtml" +#line 6 "../Areas/TestArea/Views/Shared/Test18.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Areas/TestArea/Views/Shared/Test18.cshtml" +#line 8 "../Areas/TestArea/Views/Shared/Test18.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Areas/TestArea/Views/Shared/Test18.cshtml" +#line 9 "../Areas/TestArea/Views/Shared/Test18.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs index ee7ee811920..5d33dbbed54 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Areas_TestArea_Views_Test4_Test17.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Areas/TestArea/Views/Test4/Test17.cshtml" +#line 6 "../Areas/TestArea/Views/Test4/Test17.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Areas/TestArea/Views/Test4/Test17.cshtml" +#line 8 "../Areas/TestArea/Views/Test4/Test17.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Areas/TestArea/Views/Test4/Test17.cshtml" +#line 9 "../Areas/TestArea/Views/Test4/Test17.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs index f8b2ecde53a..6624ae0ebf3 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/MyAreas_Test4_Test22.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "MyAreas/Test4/Test22.cshtml" +#line 6 "../MyAreas/Test4/Test22.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "MyAreas/Test4/Test22.cshtml" +#line 8 "../MyAreas/Test4/Test22.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "MyAreas/Test4/Test22.cshtml" +#line 9 "../MyAreas/Test4/Test22.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs index 483df5af705..c75acc2aaa9 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Pages_Shared_Test21.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Pages/Shared/Test21.cshtml" +#line 6 "../Pages/Shared/Test21.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Pages/Shared/Test21.cshtml" +#line 8 "../Pages/Shared/Test21.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Pages/Shared/Test21.cshtml" +#line 9 "../Pages/Shared/Test21.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g index 1f283c9e3a0..0fa1767db71 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Template.g @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "$PATHSLASH" +#line 6 "../$PATHSLASH" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "$PATHSLASH" +#line 8 "../$PATHSLASH" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "$PATHSLASH" +#line 9 "../$PATHSLASH" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs index c6048503384..82ed6254956 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom2_Test16.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Custom2/Test16.cshtml" +#line 6 "../Views/Custom2/Test16.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Custom2/Test16.cshtml" +#line 8 "../Views/Custom2/Test16.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Custom2/Test16.cshtml" +#line 9 "../Views/Custom2/Test16.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs index 00edb1f4b8c..eb366a727b6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Custom_Test3_Test15.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Custom/Test3/Test15.cshtml" +#line 6 "../Views/Custom/Test3/Test15.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Custom/Test3/Test15.cshtml" +#line 8 "../Views/Custom/Test3/Test15.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Custom/Test3/Test15.cshtml" +#line 9 "../Views/Custom/Test3/Test15.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs index ad153243a9d..240733439bc 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test13.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test13.cshtml" +#line 6 "../Views/Other/Test13.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test13.cshtml" +#line 8 "../Views/Other/Test13.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test13.cshtml" +#line 9 "../Views/Other/Test13.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs index 8b6dcfa243b..f51631b536a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test5.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test5.cshtml" +#line 6 "../Views/Other/Test5.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test5.cshtml" +#line 8 "../Views/Other/Test5.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test5.cshtml" +#line 9 "../Views/Other/Test5.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs index 58aa308379b..fbbd4e99798 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test6.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test6.cshtml" +#line 6 "../Views/Other/Test6.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test6.cshtml" +#line 8 "../Views/Other/Test6.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test6.cshtml" +#line 9 "../Views/Other/Test6.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs index 799e7a84768..c3643f4dd2f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test8.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test8.cshtml" +#line 6 "../Views/Other/Test8.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test8.cshtml" +#line 8 "../Views/Other/Test8.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test8.cshtml" +#line 9 "../Views/Other/Test8.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs index 9c1199c2ee3..0a839142450 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Other_Test9.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Other/Test9.cshtml" +#line 6 "../Views/Other/Test9.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Other/Test9.cshtml" +#line 8 "../Views/Other/Test9.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Other/Test9.cshtml" +#line 9 "../Views/Other/Test9.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs index 6292047ecec..d68e6cfb707 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test12.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test12.cshtml" +#line 6 "../Views/Shared/Test12.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test12.cshtml" +#line 8 "../Views/Shared/Test12.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test12.cshtml" +#line 9 "../Views/Shared/Test12.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs index 93cb009780f..d42efb18be2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test14.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test14.cshtml" +#line 6 "../Views/Shared/Test14.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test14.cshtml" +#line 8 "../Views/Shared/Test14.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test14.cshtml" +#line 9 "../Views/Shared/Test14.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs index daacf56a1f1..cd20980fb4d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test19.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test19.cshtml" +#line 6 "../Views/Shared/Test19.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test19.cshtml" +#line 8 "../Views/Shared/Test19.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test19.cshtml" +#line 9 "../Views/Shared/Test19.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs index c20f1456c06..0fbdbfd2f0f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test2.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test2.cshtml" +#line 6 "../Views/Shared/Test2.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test2.cshtml" +#line 8 "../Views/Shared/Test2.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test2.cshtml" +#line 9 "../Views/Shared/Test2.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs index 919c874680b..218968593b9 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test23.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test23.cshtml" +#line 6 "../Views/Shared/Test23.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test23.cshtml" +#line 8 "../Views/Shared/Test23.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test23.cshtml" +#line 9 "../Views/Shared/Test23.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs index 7bd08d8665b..ea4626788bb 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Shared_Test3.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Shared/Test3.cshtml" +#line 6 "../Views/Shared/Test3.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Shared/Test3.cshtml" +#line 8 "../Views/Shared/Test3.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Shared/Test3.cshtml" +#line 9 "../Views/Shared/Test3.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs index a4dec53b632..bb27bae1320 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test1.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test1.cshtml" +#line 6 "../Views/Test2/Test1.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test1.cshtml" +#line 8 "../Views/Test2/Test1.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test1.cshtml" +#line 9 "../Views/Test2/Test1.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs index 33a4d27e254..dbb7f68a284 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test10.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test10.cshtml" +#line 6 "../Views/Test2/Test10.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test10.cshtml" +#line 8 "../Views/Test2/Test10.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test10.cshtml" +#line 9 "../Views/Test2/Test10.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs index da0b0a9c162..069bbd688f9 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test11.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test11.cshtml" +#line 6 "../Views/Test2/Test11.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test11.cshtml" +#line 8 "../Views/Test2/Test11.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test11.cshtml" +#line 9 "../Views/Test2/Test11.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs index 023daa7b03e..410f9d8a0d6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test12.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test12.cshtml" +#line 6 "../Views/Test2/Test12.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test12.cshtml" +#line 8 "../Views/Test2/Test12.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test12.cshtml" +#line 9 "../Views/Test2/Test12.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs index 28b0ab8ee3f..c5c4253384e 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test14.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test14.cshtml" +#line 6 "../Views/Test2/Test14.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test14.cshtml" +#line 8 "../Views/Test2/Test14.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test14.cshtml" +#line 9 "../Views/Test2/Test14.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs index 53c7e6eed47..6d57bfd899c 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test2.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test2.cshtml" +#line 6 "../Views/Test2/Test2.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test2.cshtml" +#line 8 "../Views/Test2/Test2.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test2.cshtml" +#line 9 "../Views/Test2/Test2.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs index 299f6f89a16..a3d046fe038 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test2_Test3.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test2/Test3.cshtml" +#line 6 "../Views/Test2/Test3.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test2/Test3.cshtml" +#line 8 "../Views/Test2/Test3.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test2/Test3.cshtml" +#line 9 "../Views/Test2/Test3.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs index 814a81a5b5d..26ebc94e101 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test4_Test20.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test4/Test20.cshtml" +#line 6 "../Views/Test4/Test20.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test4/Test20.cshtml" +#line 8 "../Views/Test4/Test20.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test4/Test20.cshtml" +#line 9 "../Views/Test4/Test20.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs index 2ad66b7a032..30123d04467 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test1.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test1.cshtml" +#line 6 "../Views/Test/Test1.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test1.cshtml" +#line 8 "../Views/Test/Test1.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test1.cshtml" +#line 9 "../Views/Test/Test1.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs index 95ef158286b..ade57ee3476 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test3.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test3.cshtml" +#line 6 "../Views/Test/Test3.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test3.cshtml" +#line 8 "../Views/Test/Test3.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test3.cshtml" +#line 9 "../Views/Test/Test3.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs index 7a8cea221f7..583c0a35b1a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test4.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test4.cshtml" +#line 6 "../Views/Test/Test4.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test4.cshtml" +#line 8 "../Views/Test/Test4.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test4.cshtml" +#line 9 "../Views/Test/Test4.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs index 1eef0024c7a..710cc34bd07 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/Generated/Views_Test_Test7.cshtml.g.cs @@ -24,7 +24,7 @@ using test; #pragma warning disable 1998 public async override global::System.Threading.Tasks.Task ExecuteAsync() { -#line 6 "Views/Test/Test7.cshtml" +#line 6 "../Views/Test/Test7.cshtml" if (Model != null) { @@ -33,7 +33,7 @@ using test; #nullable disable WriteLiteral("

    Hello \""); #nullable restore -#line 8 "Views/Test/Test7.cshtml" +#line 8 "../Views/Test/Test7.cshtml" Write(Html.Raw(Model.Name)); #line default @@ -41,7 +41,7 @@ Write(Html.Raw(Model.Name)); #nullable disable WriteLiteral("\"

    \n"); #nullable restore -#line 9 "Views/Test/Test7.cshtml" +#line 9 "../Views/Test/Test7.cshtml" } #line default diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected index 19413509bcb..70c8dcfbd11 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XSSRazorPages/XSS.expected @@ -1,72 +1,72 @@ edges -| Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:25 | access to property Name | -| Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:25 | access to property Name | -| Controllers/TestController.cs:13:41:13:48 | tainted1 : UserData | Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | -| Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:18:41:18:48 | tainted2 : UserData | Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | -| Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:23:41:23:48 | tainted3 : UserData | Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | -| Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:28:41:28:48 | tainted4 : UserData | Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | -| Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:33:41:33:48 | tainted5 : UserData | Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | -| Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:38:41:38:48 | tainted6 : UserData | Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | -| Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:43:41:43:48 | tainted7 : UserData | Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | -| Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:48:41:48:48 | tainted8 : UserData | Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | -| Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:53:41:53:48 | tainted9 : UserData | Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | -| Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:60:42:60:50 | tainted10 : UserData | Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | -| Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:65:42:65:50 | tainted11 : UserData | Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | -| Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | Controllers/TestController.cs:70:43:70:43 | x : UserData | -| Controllers/TestController.cs:70:43:70:43 | x : UserData | Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | -| Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:81:42:81:50 | tainted13 : UserData | Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | -| Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | Controllers/TestController.cs:94:64:94:64 | x : UserData | -| Controllers/TestController.cs:86:42:86:50 | tainted14 : UserData | Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | -| Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | Controllers/TestController.cs:96:64:96:64 | x : UserData | -| Controllers/TestController.cs:94:64:94:64 | x : UserData | Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | -| Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:96:64:96:64 | x : UserData | Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | -| Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:106:42:106:50 | tainted15 : UserData | Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | -| Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:111:42:111:50 | tainted16 : UserData | Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | -| Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:119:42:119:50 | tainted17 : UserData | Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | -| Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:124:42:124:50 | tainted18 : UserData | Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | -| Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:129:42:129:50 | tainted19 : UserData | Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | -| Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:139:42:139:50 | tainted21 : UserData | Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | -| Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | -| Controllers/TestController.cs:149:40:149:48 | tainted23 : String | Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | -| Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | -| Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | -| Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | -| Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | Pages/Shared/Test21.cshtml:8:16:8:25 | access to property Name | -| Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom2/Test16.cshtml:8:16:8:25 | access to property Name | -| Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test5.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test6.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test8.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test9.cshtml:8:16:8:25 | access to property Name | -| Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test13.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test2.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test14.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test19.cshtml:8:16:8:25 | access to property Name | -| Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:25 | access to property Name | -| Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test10.cshtml:8:16:8:25 | access to property Name | -| Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test11.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test1.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test3.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test4.cshtml:8:16:8:25 | access to property Name | -| Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test7.cshtml:8:16:8:25 | access to property Name | +| Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:25 | access to property Name | provenance | | +| Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:25 | access to property Name | provenance | | +| Controllers/TestController.cs:13:41:13:48 | tainted1 : UserData | Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | provenance | | +| Controllers/TestController.cs:15:30:15:37 | access to parameter tainted1 : UserData | Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:18:41:18:48 | tainted2 : UserData | Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | provenance | | +| Controllers/TestController.cs:20:30:20:37 | access to parameter tainted2 : UserData | Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:23:41:23:48 | tainted3 : UserData | Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | provenance | | +| Controllers/TestController.cs:25:30:25:37 | access to parameter tainted3 : UserData | Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:28:41:28:48 | tainted4 : UserData | Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | provenance | | +| Controllers/TestController.cs:30:32:30:39 | access to parameter tainted4 : UserData | Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:33:41:33:48 | tainted5 : UserData | Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | provenance | | +| Controllers/TestController.cs:35:39:35:46 | access to parameter tainted5 : UserData | Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:38:41:38:48 | tainted6 : UserData | Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | provenance | | +| Controllers/TestController.cs:40:64:40:71 | access to parameter tainted6 : UserData | Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:43:41:43:48 | tainted7 : UserData | Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | provenance | | +| Controllers/TestController.cs:45:21:45:28 | access to parameter tainted7 : UserData | Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:48:41:48:48 | tainted8 : UserData | Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | provenance | | +| Controllers/TestController.cs:50:50:50:57 | access to parameter tainted8 : UserData | Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:53:41:53:48 | tainted9 : UserData | Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | provenance | | +| Controllers/TestController.cs:55:51:55:58 | access to parameter tainted9 : UserData | Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:60:42:60:50 | tainted10 : UserData | Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | provenance | | +| Controllers/TestController.cs:62:31:62:39 | access to parameter tainted10 : UserData | Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:65:42:65:50 | tainted11 : UserData | Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | provenance | | +| Controllers/TestController.cs:67:23:67:31 | access to parameter tainted11 : UserData | Controllers/TestController.cs:70:43:70:43 | x : UserData | provenance | | +| Controllers/TestController.cs:70:43:70:43 | x : UserData | Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | provenance | | +| Controllers/TestController.cs:70:70:70:70 | access to parameter x : UserData | Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:81:42:81:50 | tainted13 : UserData | Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | provenance | | +| Controllers/TestController.cs:83:37:83:45 | access to parameter tainted13 : UserData | Controllers/TestController.cs:94:64:94:64 | x : UserData | provenance | | +| Controllers/TestController.cs:86:42:86:50 | tainted14 : UserData | Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | provenance | | +| Controllers/TestController.cs:88:37:88:45 | access to parameter tainted14 : UserData | Controllers/TestController.cs:96:64:96:64 | x : UserData | provenance | | +| Controllers/TestController.cs:94:64:94:64 | x : UserData | Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | provenance | | +| Controllers/TestController.cs:94:113:94:113 | access to parameter x : UserData | Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:96:64:96:64 | x : UserData | Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | provenance | | +| Controllers/TestController.cs:96:93:96:93 | access to parameter x : UserData | Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:106:42:106:50 | tainted15 : UserData | Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | provenance | | +| Controllers/TestController.cs:108:21:108:29 | access to parameter tainted15 : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:111:42:111:50 | tainted16 : UserData | Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | provenance | | +| Controllers/TestController.cs:113:31:113:39 | access to parameter tainted16 : UserData | Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:119:42:119:50 | tainted17 : UserData | Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | provenance | | +| Controllers/TestController.cs:121:31:121:39 | access to parameter tainted17 : UserData | Areas/TestArea/Views/Test4/Test17.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:124:42:124:50 | tainted18 : UserData | Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | provenance | | +| Controllers/TestController.cs:126:31:126:39 | access to parameter tainted18 : UserData | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:129:42:129:50 | tainted19 : UserData | Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | provenance | | +| Controllers/TestController.cs:131:31:131:39 | access to parameter tainted19 : UserData | Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:139:42:139:50 | tainted21 : UserData | Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | provenance | | +| Controllers/TestController.cs:141:31:141:39 | access to parameter tainted21 : UserData | Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | provenance | | +| Controllers/TestController.cs:149:40:149:48 | tainted23 : String | Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | provenance | | +| Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | provenance | | +| Controllers/TestController.cs:152:18:152:26 | access to parameter tainted23 : String | Controllers/TestController.cs:152:9:152:9 | [post] access to local variable x : UserData [property Name] : String | provenance | | +| Controllers/TestController.cs:153:31:153:31 | access to local variable x : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | provenance | | +| Pages/Shared/Test21.cshtml:8:16:8:20 | access to property Model : UserData | Pages/Shared/Test21.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Custom2/Test16.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom2/Test16.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Custom/Test3/Test15.cshtml:8:16:8:20 | access to property Model : UserData | Views/Custom/Test3/Test15.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test5.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test5.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test6.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test6.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test8.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test8.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test9.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test9.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Other/Test13.cshtml:8:16:8:20 | access to property Model : UserData | Views/Other/Test13.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test2.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test2.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test14.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test14.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test19.cshtml:8:16:8:20 | access to property Model : UserData | Views/Shared/Test19.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Shared/Test23.cshtml:8:16:8:20 | access to property Model : UserData [property Name] : String | Views/Shared/Test23.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test2/Test10.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test10.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test2/Test11.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test2/Test11.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test1.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test1.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test3.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test3.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test4.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test4.cshtml:8:16:8:25 | access to property Name | provenance | | +| Views/Test/Test7.cshtml:8:16:8:20 | access to property Model : UserData | Views/Test/Test7.cshtml:8:16:8:25 | access to property Name | provenance | | nodes | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:20 | access to property Model : UserData | semmle.label | access to property Model : UserData | | Areas/TestArea/Views/Shared/Test18.cshtml:8:16:8:25 | access to property Name | semmle.label | access to property Name | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected b/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected index 6806ff9abe4..b939e45a082 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-079/XssPageModels/test.expected @@ -1,13 +1,13 @@ edges -| TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | -| TestModel.cs:13:21:13:28 | call to method source : String | TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | -| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | -| TestModel.cs:18:16:18:23 | call to method source : String | TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | -| TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | -| TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:25 | access to property Name | +| TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | provenance | | +| TestModel.cs:13:21:13:28 | call to method source : String | TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | provenance | | +| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:14:16:14:21 | this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | provenance | | +| TestModel.cs:18:16:18:23 | call to method source : String | TestModel.cs:18:9:18:12 | [post] this access : TestModel [property Name] : String | provenance | | +| TestPage.cshtml.g.cs:63:35:63:48 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | provenance | | +| TestPage.cshtml:5:16:5:20 | access to property Model : TestModel [property Name] : String | TestPage.cshtml:5:16:5:25 | access to property Name | provenance | | nodes | TestModel.cs:13:9:13:12 | [post] this access : TestModel [property Name] : String | semmle.label | [post] this access : TestModel [property Name] : String | | TestModel.cs:13:21:13:28 | call to method source : String | semmle.label | call to method source : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected index e6048fc656e..c2ce4a209f6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.expected @@ -1,19 +1,19 @@ edges -| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | -| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | -| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | -| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | -| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | -| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | -| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | -| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | -| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | -| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | -| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | -| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | -| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | -| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | +| SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | provenance | | +| SecondOrderSqlInjection.cs:33:36:33:78 | object creation of type FileStream : FileStream | SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | provenance | | +| SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | provenance | | +| SecondOrderSqlInjection.cs:35:59:35:60 | access to local variable fs : FileStream | SecondOrderSqlInjection.cs:35:42:35:76 | object creation of type StreamReader : StreamReader | provenance | | +| SecondOrderSqlInjection.cs:38:35:38:36 | access to local variable sr : StreamReader | SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | provenance | | +| SecondOrderSqlInjection.cs:38:35:38:47 | call to method ReadLine : String | SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | provenance | | +| SecondOrderSqlInjection.cs:40:31:40:33 | access to local variable sql : String | SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | provenance | | +| SecondOrderSqlInjection.cs:40:31:40:40 | call to method Trim : String | SecondOrderSqlInjection.cs:45:57:45:59 | access to local variable sql | provenance | | +| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | provenance | | +| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | provenance | | +| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | provenance | | +| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | provenance | | +| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | provenance | | nodes | SecondOrderSqlInjection.cs:25:71:25:145 | ... + ... | semmle.label | ... + ... | | SecondOrderSqlInjection.cs:25:119:25:145 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected index 888573d86b6..9ef1a073fbe 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.expected @@ -1,37 +1,37 @@ edges -| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:33:21:33:40 | access to property Text : String | -| SqlInjection.cs:33:21:33:40 | access to property Text : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | -| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:68:33:68:52 | access to property Text : String | -| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | -| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:70:55:70:60 | access to local variable query1 | -| SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | -| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | -| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | -| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:94:50:94:52 | access to local variable cmd | -| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | -| SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | -| SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | -| SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | -| SqlInjectionDapper.cs:47:86:47:94 | access to property Text : String | SqlInjectionDapper.cs:49:47:49:51 | access to local variable query | -| SqlInjectionDapper.cs:57:86:57:94 | access to property Text : String | SqlInjectionDapper.cs:58:42:58:46 | access to local variable query | -| SqlInjectionDapper.cs:66:86:66:94 | access to property Text : String | SqlInjectionDapper.cs:67:42:67:46 | access to local variable query | -| SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | -| SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | -| SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | -| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | -| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | -| SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | -| SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | -| SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | -| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | -| SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | -| SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | -| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | -| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | -| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | -| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | -| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | -| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | +| SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | SqlInjection.cs:33:21:33:40 | access to property Text : String | provenance | | +| SqlInjection.cs:33:21:33:40 | access to property Text : String | SqlInjection.cs:34:50:34:55 | access to local variable query1 | provenance | | +| SqlInjection.cs:68:33:68:47 | access to field categoryTextBox : TextBox | SqlInjection.cs:68:33:68:52 | access to property Text : String | provenance | | +| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:69:56:69:61 | access to local variable query1 | provenance | | +| SqlInjection.cs:68:33:68:52 | access to property Text : String | SqlInjection.cs:70:55:70:60 | access to local variable query1 | provenance | | +| SqlInjection.cs:82:21:82:29 | access to property Text : String | SqlInjection.cs:83:50:83:55 | access to local variable query1 | provenance | | +| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString | provenance | | +| SqlInjection.cs:92:21:92:29 | access to property Text : String | SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | provenance | | +| SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:94:50:94:52 | access to local variable cmd | provenance | | +| SqlInjection.cs:93:42:93:52 | access to local variable queryString : String | SqlInjection.cs:93:27:93:53 | object creation of type SqlCommand : SqlCommand | provenance | | +| SqlInjectionDapper.cs:20:86:20:94 | access to property Text : String | SqlInjectionDapper.cs:21:55:21:59 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:29:86:29:94 | access to property Text : String | SqlInjectionDapper.cs:30:66:30:70 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:38:86:38:94 | access to property Text : String | SqlInjectionDapper.cs:39:63:39:67 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:47:86:47:94 | access to property Text : String | SqlInjectionDapper.cs:49:47:49:51 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:57:86:57:94 | access to property Text : String | SqlInjectionDapper.cs:58:42:58:46 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:66:86:66:94 | access to property Text : String | SqlInjectionDapper.cs:67:42:67:46 | access to local variable query | provenance | | +| SqlInjectionDapper.cs:75:86:75:94 | access to property Text : String | SqlInjectionDapper.cs:77:52:77:56 | access to local variable query | provenance | | +| SqlInjectionSqlite.cs:19:51:19:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:19:51:19:68 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | SqlInjectionSqlite.cs:44:45:44:47 | access to local variable cmd | provenance | | +| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:24:41:24:53 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | provenance | | +| SqlInjectionSqlite.cs:24:41:24:58 | access to property Text : String | SqlInjectionSqlite.cs:24:23:24:71 | object creation of type SQLiteCommand : SQLiteCommand | provenance | | +| SqlInjectionSqlite.cs:33:49:33:61 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:33:49:33:66 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:39:45:39:57 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:39:45:39:62 | access to property Text | provenance | | +| SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | provenance | | +| SqlInjectionSqlite.cs:49:51:49:63 | access to field untrustedData : TextBox | SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | provenance | | +| SqlInjectionSqlite.cs:49:51:49:68 | access to property Text : String | SqlInjectionSqlite.cs:49:36:49:84 | object creation of type FileStream : FileStream | provenance | | +| SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | provenance | | +| SqlInjectionSqlite.cs:51:59:51:60 | access to local variable fs : FileStream | SqlInjectionSqlite.cs:51:42:51:76 | object creation of type StreamReader : StreamReader | provenance | | +| SqlInjectionSqlite.cs:54:35:54:36 | access to local variable sr : StreamReader | SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | provenance | | +| SqlInjectionSqlite.cs:54:35:54:47 | call to method ReadLine : String | SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:33 | access to local variable sql : String | SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | provenance | | +| SqlInjectionSqlite.cs:56:31:56:40 | call to method Trim : String | SqlInjectionSqlite.cs:61:53:61:55 | access to local variable sql | provenance | | nodes | SqlInjection.cs:33:21:33:35 | access to field categoryTextBox : TextBox | semmle.label | access to field categoryTextBox : TextBox | | SqlInjection.cs:33:21:33:40 | access to property Text : String | semmle.label | access to property Text : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected index 0699a17d531..ec812749311 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/LDAPInjection.expected @@ -1,17 +1,17 @@ edges -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:11:27:11:61 | access to indexer : String | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:14:54:14:78 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:16:21:16:45 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:23:21:23:45 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:53:24:77 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:27:48:27:70 | ... + ... | -| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:29:20:29:42 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:14:54:14:78 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:16:21:16:45 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:23:21:23:45 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:24:53:24:77 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:27:48:27:70 | ... + ... | -| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:29:20:29:42 | ... + ... | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:11:27:11:61 | access to indexer : String | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:14:54:14:78 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:16:21:16:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:23:21:23:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:24:53:24:77 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:27:48:27:70 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | LDAPInjection.cs:29:20:29:42 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:14:54:14:78 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:16:21:16:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:23:21:23:45 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:24:53:24:77 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:27:48:27:70 | ... + ... | provenance | | +| LDAPInjection.cs:11:27:11:61 | access to indexer : String | LDAPInjection.cs:29:20:29:42 | ... + ... | provenance | | nodes | LDAPInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | LDAPInjection.cs:11:27:11:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected index 34e5ef3dc99..d66714c82cc 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-090/StoredLDAPInjection.expected @@ -1,5 +1,5 @@ edges -| StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | +| StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | provenance | | nodes | StoredLDAPInjection.cs:22:66:22:109 | ... + ... | semmle.label | ... + ... | | StoredLDAPInjection.cs:22:83:22:109 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected index 63b1d336449..028af79c5df 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected @@ -1,7 +1,7 @@ edges -| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:8:27:8:65 | access to indexer : String | -| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | -| Test.cs:8:27:8:65 | access to indexer : String | Test.cs:15:25:15:80 | ... + ... | +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:8:27:8:65 | access to indexer : String | provenance | | +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | provenance | | +| Test.cs:8:27:8:65 | access to indexer : String | Test.cs:15:25:15:80 | ... + ... | provenance | | nodes | Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | Test.cs:8:27:8:65 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected index 006ca27fdd7..f247e97bc35 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-094/CodeInjection.expected @@ -1,9 +1,9 @@ edges -| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:23:23:23:53 | access to indexer : String | -| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:29:64:29:67 | access to local variable code | -| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:40:36:40:39 | access to local variable code | -| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:29:64:29:67 | access to local variable code | -| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:40:36:40:39 | access to local variable code | +| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:23:23:23:53 | access to indexer : String | provenance | | +| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:29:64:29:67 | access to local variable code | provenance | | +| CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | CodeInjection.cs:40:36:40:39 | access to local variable code | provenance | | +| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:29:64:29:67 | access to local variable code | provenance | | +| CodeInjection.cs:23:23:23:53 | access to indexer : String | CodeInjection.cs:40:36:40:39 | access to local variable code | provenance | | nodes | CodeInjection.cs:23:23:23:45 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | CodeInjection.cs:23:23:23:53 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected index 75ef7285557..cc089c9898b 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-099/ResourceInjection.expected @@ -1,9 +1,9 @@ edges -| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:8:27:8:61 | access to indexer : String | -| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | -| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | -| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | -| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | +| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:8:27:8:61 | access to indexer : String | provenance | | +| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | provenance | | +| ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | provenance | | +| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:11:57:11:72 | access to local variable connectionString | provenance | | +| ResourceInjection.cs:8:27:8:61 | access to indexer : String | ResourceInjection.cs:13:42:13:57 | access to local variable connectionString | provenance | | nodes | ResourceInjection.cs:8:27:8:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ResourceInjection.cs:8:27:8:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected b/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected index 869daaa60cb..72d5d497820 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-112/MissingXMLValidation.expected @@ -1,20 +1,20 @@ edges -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | -| MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:16:26:16:58 | object creation of type StringReader | -| MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:21:26:21:58 | object creation of type StringReader | -| MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:27:26:27:58 | object creation of type StringReader | -| MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:35:26:35:58 | object creation of type StringReader | -| MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:45:26:45:58 | object creation of type StringReader | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | provenance | | +| MissingXMLValidation.cs:16:43:16:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:16:26:16:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:21:43:21:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:21:26:21:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:27:43:27:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:27:26:27:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:35:43:35:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:35:26:35:58 | object creation of type StringReader | provenance | | +| MissingXMLValidation.cs:45:43:45:57 | access to local variable userProvidedXml : String | MissingXMLValidation.cs:45:26:45:58 | object creation of type StringReader | provenance | | nodes | MissingXMLValidation.cs:12:34:12:56 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | MissingXMLValidation.cs:12:34:12:75 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected index 396d766c3e6..a13b0d64004 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-114/AssemblyPathInjection/AssemblyPathInjection.expected @@ -1,7 +1,7 @@ edges -| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:7:26:7:63 | access to indexer : String | -| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:10:36:10:46 | access to local variable libraryName | -| Test.cs:7:26:7:63 | access to indexer : String | Test.cs:10:36:10:46 | access to local variable libraryName | +| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:7:26:7:63 | access to indexer : String | provenance | | +| Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | Test.cs:10:36:10:46 | access to local variable libraryName | provenance | | +| Test.cs:7:26:7:63 | access to indexer : String | Test.cs:10:36:10:46 | access to local variable libraryName | provenance | | nodes | Test.cs:7:26:7:48 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | Test.cs:7:26:7:63 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected index 4e863739f34..b01941c6d39 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected @@ -1,12 +1,12 @@ edges -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:21:21:21:43 | ... + ... | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:29:50:29:72 | ... + ... | -| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:33:26:33:33 | access to local variable username | -| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:21:21:21:43 | ... + ... | -| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:29:50:29:72 | ... + ... | -| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:33:26:33:33 | access to local variable username | -| LogForgingAsp.cs:8:32:8:39 | username : String | LogForgingAsp.cs:12:21:12:43 | ... + ... | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:21:21:21:43 | ... + ... | provenance | | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:29:50:29:72 | ... + ... | provenance | | +| LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:33:26:33:33 | access to local variable username | provenance | | +| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:21:21:21:43 | ... + ... | provenance | | +| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:29:50:29:72 | ... + ... | provenance | | +| LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:33:26:33:33 | access to local variable username | provenance | | +| LogForgingAsp.cs:8:32:8:39 | username : String | LogForgingAsp.cs:12:21:12:43 | ... + ... | provenance | | nodes | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | LogForging.cs:18:27:18:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected index 5945b83d635..9ae706885f6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-134/UncontrolledFormatString.expected @@ -1,13 +1,13 @@ edges -| ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | -| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | -| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | -| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | -| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | -| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | -| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | -| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | -| UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | +| ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | provenance | | +| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | provenance | | +| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | provenance | | +| UncontrolledFormatString.cs:9:23:9:45 | access to property QueryString : NameValueCollection | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | provenance | | +| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:12:23:12:26 | access to local variable path | provenance | | +| UncontrolledFormatString.cs:9:23:9:53 | access to indexer : String | UncontrolledFormatString.cs:15:46:15:49 | access to local variable path | provenance | | +| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | provenance | | +| UncontrolledFormatStringBad.cs:9:25:9:47 | access to property QueryString : NameValueCollection | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | provenance | | +| UncontrolledFormatStringBad.cs:9:25:9:61 | access to indexer : String | UncontrolledFormatStringBad.cs:12:39:12:44 | access to local variable format | provenance | | nodes | ConsoleUncontrolledFormatString.cs:8:22:8:39 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | | ConsoleUncontrolledFormatString.cs:11:31:11:36 | access to local variable format | semmle.label | access to local variable format | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected b/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected index 9399dd0a6eb..9a1d6036ad7 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-201/ExposureInTransmittedData/ExposureInTransmittedData.expected @@ -1,9 +1,9 @@ edges -| ExposureInTransmittedData.cs:24:32:24:38 | access to property Data : IDictionary | ExposureInTransmittedData.cs:24:32:24:50 | access to indexer | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:53:31:53 | access to local variable p | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:56:31:56 | access to local variable p | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:32:24:32:52 | ... + ... | -| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:33:27:33:27 | access to local variable p | +| ExposureInTransmittedData.cs:24:32:24:38 | access to property Data : IDictionary | ExposureInTransmittedData.cs:24:32:24:50 | access to indexer | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:53:31:53 | access to local variable p | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:31:56:31:56 | access to local variable p | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:32:24:32:52 | ... + ... | provenance | | +| ExposureInTransmittedData.cs:30:17:30:36 | call to method GetField : String | ExposureInTransmittedData.cs:33:27:33:27 | access to local variable p | provenance | | nodes | ExposureInTransmittedData.cs:14:32:14:39 | access to local variable password | semmle.label | access to local variable password | | ExposureInTransmittedData.cs:18:32:18:44 | call to method ToString | semmle.label | call to method ToString | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected b/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected index 3e273ef83b8..4ba1ed42f1d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-209/ExceptionInformationExposure.expected @@ -1,10 +1,10 @@ edges -| ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | -| ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | -| ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException : Exception | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | -| ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | -| ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | -| ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException : MyException | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | +| ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | provenance | | +| ExceptionInformationExposure.cs:23:32:23:33 | access to local variable ex : Exception | ExceptionInformationExposure.cs:23:32:23:44 | access to property StackTrace | provenance | | +| ExceptionInformationExposure.cs:39:28:39:44 | access to property InnerException : Exception | ExceptionInformationExposure.cs:39:28:39:55 | access to property StackTrace | provenance | | +| ExceptionInformationExposure.cs:40:28:40:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:40:28:40:40 | access to property StackTrace | provenance | | +| ExceptionInformationExposure.cs:41:28:41:29 | access to local variable ex : Exception | ExceptionInformationExposure.cs:41:28:41:40 | call to method ToString | provenance | | +| ExceptionInformationExposure.cs:47:28:47:44 | object creation of type MyException : MyException | ExceptionInformationExposure.cs:47:28:47:55 | call to method ToString | provenance | | nodes | ExceptionInformationExposure.cs:19:32:19:33 | access to local variable ex : Exception | semmle.label | access to local variable ex : Exception | | ExceptionInformationExposure.cs:19:32:19:44 | call to method ToString | semmle.label | call to method ToString | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected b/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected index 10cb82ff67e..8fcc865b54c 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-321/HardcodedSymmetricEncryptionKey/HardcodedSymmetricEncryptionKey.expected @@ -1,17 +1,17 @@ edges -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:31:21:31:21 | access to local variable d | -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:28:62:28:115 | "Hello, world: here is a very bad way to create a key" : String | HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | -| HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | HardcodedSymmetricEncryptionKey.cs:68:87:68:94 | access to parameter password | -| HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:108:23:108:25 | access to parameter key | -| HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:121:87:121:89 | access to parameter key | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:31:21:31:21 | access to local variable d | provenance | | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:25:21:25:97 | array creation of type Byte[] : Byte[] | HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:28:62:28:115 | "Hello, world: here is a very bad way to create a key" : String | HardcodedSymmetricEncryptionKey.cs:28:39:28:116 | call to method GetBytes : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:36:37:36:37 | access to local variable d : Byte[] | HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:41:50:41:50 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:44:51:44:69 | access to local variable byteArrayFromString : Byte[] | HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:50:35:50:35 | access to local variable c : Byte[] | HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | provenance | | +| HardcodedSymmetricEncryptionKey.cs:59:64:59:71 | password : Byte[] | HardcodedSymmetricEncryptionKey.cs:68:87:68:94 | access to parameter password | provenance | | +| HardcodedSymmetricEncryptionKey.cs:103:57:103:59 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:108:23:108:25 | access to parameter key | provenance | | +| HardcodedSymmetricEncryptionKey.cs:112:63:112:65 | key : Byte[] | HardcodedSymmetricEncryptionKey.cs:121:87:121:89 | access to parameter key | provenance | | nodes | HardcodedSymmetricEncryptionKey.cs:17:21:17:97 | array creation of type Byte[] | semmle.label | array creation of type Byte[] | | HardcodedSymmetricEncryptionKey.cs:22:23:22:99 | array creation of type Byte[] | semmle.label | array creation of type Byte[] | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected b/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected index 9f20b582a86..616fe890da8 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-327/DontInstallRootCert/DontInstallRootCert.expected @@ -1,7 +1,7 @@ edges -| Test.cs:15:31:15:59 | object creation of type X509Store : X509Store | Test.cs:18:13:18:17 | access to local variable store | -| Test.cs:25:31:25:86 | object creation of type X509Store : X509Store | Test.cs:28:13:28:17 | access to local variable store | -| Test.cs:70:31:70:86 | object creation of type X509Store : X509Store | Test.cs:73:13:73:17 | access to local variable store | +| Test.cs:15:31:15:59 | object creation of type X509Store : X509Store | Test.cs:18:13:18:17 | access to local variable store | provenance | | +| Test.cs:25:31:25:86 | object creation of type X509Store : X509Store | Test.cs:28:13:28:17 | access to local variable store | provenance | | +| Test.cs:70:31:70:86 | object creation of type X509Store : X509Store | Test.cs:73:13:73:17 | access to local variable store | provenance | | nodes | Test.cs:15:31:15:59 | object creation of type X509Store : X509Store | semmle.label | object creation of type X509Store : X509Store | | Test.cs:18:13:18:17 | access to local variable store | semmle.label | access to local variable store | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected b/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected index 14d9e9213c6..fc657fcde1d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-327/InsecureSQLConnection/InsecureSQLConnection.expected @@ -1,6 +1,6 @@ edges -| InsecureSQLConnection.cs:44:17:44:64 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | InsecureSQLConnection.cs:46:81:46:93 | access to local variable connectString | -| InsecureSQLConnection.cs:53:17:53:78 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd;Encrypt=false" : String | InsecureSQLConnection.cs:55:81:55:93 | access to local variable connectString | +| InsecureSQLConnection.cs:44:17:44:64 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | InsecureSQLConnection.cs:46:81:46:93 | access to local variable connectString | provenance | | +| InsecureSQLConnection.cs:53:17:53:78 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd;Encrypt=false" : String | InsecureSQLConnection.cs:55:81:55:93 | access to local variable connectString | provenance | | nodes | InsecureSQLConnection.cs:38:52:38:128 | "Server=myServerName\\myInstanceName;Database=myDataBase;User Id=myUsername;" | semmle.label | "Server=myServerName\\myInstanceName;Database=myDataBase;User Id=myUsername;" | | InsecureSQLConnection.cs:44:17:44:64 | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | semmle.label | "Server=1.2.3.4;Database=Anything;UID=ab;Pwd=cd" : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected index 20312f4c17b..b0c0dbae40f 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-338/InsecureRandomness.expected @@ -1,19 +1,19 @@ edges -| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | -| InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | -| InsecureRandomness.cs:28:29:28:43 | call to method Next : Int32 | InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | -| InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | -| InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | -| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | -| InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | -| InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | -| InsecureRandomness.cs:60:23:60:40 | access to array element : String | InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | -| InsecureRandomness.cs:60:31:60:39 | call to method Next : Int32 | InsecureRandomness.cs:60:23:60:40 | access to array element : String | -| InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | -| InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | -| InsecureRandomness.cs:72:23:72:40 | access to indexer : String | InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | -| InsecureRandomness.cs:72:31:72:39 | call to method Next : Int32 | InsecureRandomness.cs:72:23:72:40 | access to indexer : String | -| InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | InsecureRandomness.cs:14:20:14:54 | call to method InsecureRandomStringFromIndexer | +| InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | provenance | | +| InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | InsecureRandomness.cs:28:13:28:16 | [post] access to local variable data : Byte[] [element] : Byte | provenance | | +| InsecureRandomness.cs:28:29:28:43 | call to method Next : Int32 | InsecureRandomness.cs:28:23:28:43 | (...) ... : Byte | provenance | | +| InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | provenance | | +| InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | InsecureRandomness.cs:29:13:29:18 | [post] access to local variable result : StringBuilder | provenance | | +| InsecureRandomness.cs:29:57:29:60 | access to local variable data : Byte[] [element] : Byte | InsecureRandomness.cs:29:27:29:61 | call to method GetString : String | provenance | | +| InsecureRandomness.cs:31:16:31:21 | access to local variable result : StringBuilder | InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | provenance | | +| InsecureRandomness.cs:31:16:31:32 | call to method ToString : String | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | provenance | | +| InsecureRandomness.cs:60:23:60:40 | access to array element : String | InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | provenance | | +| InsecureRandomness.cs:60:31:60:39 | call to method Next : Int32 | InsecureRandomness.cs:60:23:60:40 | access to array element : String | provenance | | +| InsecureRandomness.cs:62:16:62:21 | access to local variable result : String | InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | provenance | | +| InsecureRandomness.cs:62:16:62:32 | call to method ToString : String | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | provenance | | +| InsecureRandomness.cs:72:23:72:40 | access to indexer : String | InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | provenance | | +| InsecureRandomness.cs:72:31:72:39 | call to method Next : Int32 | InsecureRandomness.cs:72:23:72:40 | access to indexer : String | provenance | | +| InsecureRandomness.cs:74:16:74:21 | access to local variable result : String | InsecureRandomness.cs:14:20:14:54 | call to method InsecureRandomStringFromIndexer | provenance | | nodes | InsecureRandomness.cs:12:27:12:50 | call to method InsecureRandomString | semmle.label | call to method InsecureRandomString | | InsecureRandomness.cs:13:20:13:56 | call to method InsecureRandomStringFromSelection | semmle.label | call to method InsecureRandomStringFromSelection | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected index 0761f950feb..d9ee462e64a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected @@ -1,23 +1,23 @@ edges -| BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | BinaryFormatterUntrustedInputBad.cs:12:31:12:84 | object creation of type MemoryStream | -| BinaryFormatterUntrustedInputBad.cs:12:71:12:77 | access to parameter textBox : TextBox | BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | -| BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | -| DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | -| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | -| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | -| DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | -| DataContractSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | -| DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | -| ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | ResourceReaderUntrustedInputBad.cs:11:37:11:87 | object creation of type MemoryStream | -| ResourceReaderUntrustedInputBad.cs:11:77:11:80 | access to parameter data : TextBox | ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | -| ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | -| UnsafeDeserializationUntrustedInputBad.cs:10:37:10:43 | access to parameter textBox : TextBox | UnsafeDeserializationUntrustedInputBad.cs:10:37:10:48 | access to property Text | -| XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | XmlObjectSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | -| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | -| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | -| XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | XmlSerializerUntrustedInputBad.cs:13:31:13:81 | object creation of type MemoryStream | -| XmlSerializerUntrustedInputBad.cs:13:71:13:74 | access to parameter data : TextBox | XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | -| XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | +| BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | BinaryFormatterUntrustedInputBad.cs:12:31:12:84 | object creation of type MemoryStream | provenance | | +| BinaryFormatterUntrustedInputBad.cs:12:71:12:77 | access to parameter textBox : TextBox | BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | provenance | | +| BinaryFormatterUntrustedInputBad.cs:12:71:12:82 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | provenance | | +| DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | | +| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | | +| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | | +| DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | | +| DataContractSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | | +| DataContractSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | | +| ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | ResourceReaderUntrustedInputBad.cs:11:37:11:87 | object creation of type MemoryStream | provenance | | +| ResourceReaderUntrustedInputBad.cs:11:77:11:80 | access to parameter data : TextBox | ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | provenance | | +| ResourceReaderUntrustedInputBad.cs:11:77:11:85 | access to property Text : String | ResourceReaderUntrustedInputBad.cs:11:54:11:86 | call to method GetBytes : Byte[] | provenance | | +| UnsafeDeserializationUntrustedInputBad.cs:10:37:10:43 | access to parameter textBox : TextBox | UnsafeDeserializationUntrustedInputBad.cs:10:37:10:48 | access to property Text | provenance | | +| XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | XmlObjectSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | | +| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | | +| XmlObjectSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | XmlObjectSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | | +| XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | XmlSerializerUntrustedInputBad.cs:13:31:13:81 | object creation of type MemoryStream | provenance | | +| XmlSerializerUntrustedInputBad.cs:13:71:13:74 | access to parameter data : TextBox | XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | provenance | | +| XmlSerializerUntrustedInputBad.cs:13:71:13:79 | access to property Text : String | XmlSerializerUntrustedInputBad.cs:13:48:13:80 | call to method GetBytes : Byte[] | provenance | | nodes | BinaryFormatterUntrustedInputBad.cs:12:31:12:84 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream | | BinaryFormatterUntrustedInputBad.cs:12:48:12:83 | call to method GetBytes : Byte[] | semmle.label | call to method GetBytes : Byte[] | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected index c73b3122688..c50a361dac7 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInputNewtonsoftJson/UnsafeDeserializationUntrustedInput.expected @@ -1,7 +1,7 @@ edges -| Test.cs:9:46:9:49 | access to parameter data : TextBox | Test.cs:9:46:9:54 | access to property Text | -| Test.cs:17:46:17:49 | access to parameter data : TextBox | Test.cs:17:46:17:54 | access to property Text | -| Test.cs:25:46:25:49 | access to parameter data : TextBox | Test.cs:25:46:25:54 | access to property Text | +| Test.cs:9:46:9:49 | access to parameter data : TextBox | Test.cs:9:46:9:54 | access to property Text | provenance | | +| Test.cs:17:46:17:49 | access to parameter data : TextBox | Test.cs:17:46:17:54 | access to property Text | provenance | | +| Test.cs:25:46:25:49 | access to parameter data : TextBox | Test.cs:25:46:25:54 | access to property Text | provenance | | nodes | Test.cs:9:46:9:49 | access to parameter data : TextBox | semmle.label | access to parameter data : TextBox | | Test.cs:9:46:9:54 | access to property Text | semmle.label | access to property Text | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected index ff1cac032fe..b36b30253e0 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect.expected @@ -1,33 +1,36 @@ edges -| UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:13:31:13:61 | access to indexer | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:23:22:23:52 | access to indexer : String | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:48:29:48:31 | access to local variable url | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:64:31:64:52 | $"..." | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:48:29:48:31 | access to local variable url | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:64:31:64:52 | $"..." | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | -| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | -| UrlRedirect.cs:38:44:38:66 | access to property QueryString : NameValueCollection | UrlRedirect.cs:38:44:38:74 | access to indexer | -| UrlRedirect.cs:39:47:39:69 | access to property QueryString : NameValueCollection | UrlRedirect.cs:39:47:39:77 | access to indexer | -| UrlRedirect.cs:70:66:70:68 | access to local variable url : String | UrlRedirect.cs:70:31:70:69 | call to method Format | -| UrlRedirect.cs:76:69:76:71 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | -| UrlRedirect.cs:76:74:76:76 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:16:22:16:26 | access to parameter value | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:19:44:19:48 | call to operator implicit conversion | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:25:46:25:50 | call to operator implicit conversion | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:31:66:31:70 | access to parameter value | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:34:49:34:53 | call to operator implicit conversion | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:37:69:37:73 | access to parameter value | -| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:40:39:40:53 | ... + ... | -| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:48:28:48:32 | access to parameter value | -| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | -| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:56:31:56:35 | access to parameter value | -| UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | UrlRedirectCore.cs:53:32:53:45 | object creation of type Uri | +| UrlRedirect2.cs:14:31:14:53 | access to property QueryString : NameValueCollection | UrlRedirect2.cs:14:31:14:61 | access to indexer | provenance | | +| UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:13:31:13:61 | access to indexer | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:23:22:23:52 | access to indexer : String | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:48:29:48:31 | access to local variable url | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:64:31:64:52 | $"..." | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:48:29:48:31 | access to local variable url | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:64:31:64:52 | $"..." | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:70:66:70:68 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:69:76:71 | access to local variable url : String | provenance | | +| UrlRedirect.cs:23:22:23:52 | access to indexer : String | UrlRedirect.cs:76:74:76:76 | access to local variable url : String | provenance | | +| UrlRedirect.cs:38:44:38:66 | access to property QueryString : NameValueCollection | UrlRedirect.cs:38:44:38:74 | access to indexer | provenance | | +| UrlRedirect.cs:39:47:39:69 | access to property QueryString : NameValueCollection | UrlRedirect.cs:39:47:39:77 | access to indexer | provenance | | +| UrlRedirect.cs:70:66:70:68 | access to local variable url : String | UrlRedirect.cs:70:31:70:69 | call to method Format | provenance | | +| UrlRedirect.cs:76:69:76:71 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | provenance | | +| UrlRedirect.cs:76:74:76:76 | access to local variable url : String | UrlRedirect.cs:76:31:76:77 | call to method Format | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:16:22:16:26 | access to parameter value | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:19:44:19:48 | call to operator implicit conversion | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:25:46:25:50 | call to operator implicit conversion | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:31:66:31:70 | access to parameter value | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:34:49:34:53 | call to operator implicit conversion | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:37:69:37:73 | access to parameter value | provenance | | +| UrlRedirectCore.cs:13:44:13:48 | value : String | UrlRedirectCore.cs:40:39:40:53 | ... + ... | provenance | | +| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:48:28:48:32 | access to parameter value | provenance | | +| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | provenance | | +| UrlRedirectCore.cs:45:51:45:55 | value : String | UrlRedirectCore.cs:56:31:56:35 | access to parameter value | provenance | | +| UrlRedirectCore.cs:53:40:53:44 | access to parameter value : String | UrlRedirectCore.cs:53:32:53:45 | object creation of type Uri | provenance | | nodes +| UrlRedirect2.cs:14:31:14:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| UrlRedirect2.cs:14:31:14:61 | access to indexer | semmle.label | access to indexer | | UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | UrlRedirect.cs:13:31:13:61 | access to indexer | semmle.label | access to indexer | | UrlRedirect.cs:23:22:23:44 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | @@ -58,6 +61,7 @@ nodes | UrlRedirectCore.cs:56:31:56:35 | access to parameter value | semmle.label | access to parameter value | subpaths #select +| UrlRedirect2.cs:14:31:14:61 | access to indexer | UrlRedirect2.cs:14:31:14:53 | access to property QueryString : NameValueCollection | UrlRedirect2.cs:14:31:14:61 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect2.cs:14:31:14:53 | access to property QueryString | user-provided value | | UrlRedirect.cs:13:31:13:61 | access to indexer | UrlRedirect.cs:13:31:13:53 | access to property QueryString : NameValueCollection | UrlRedirect.cs:13:31:13:61 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect.cs:13:31:13:53 | access to property QueryString | user-provided value | | UrlRedirect.cs:38:44:38:74 | access to indexer | UrlRedirect.cs:38:44:38:66 | access to property QueryString : NameValueCollection | UrlRedirect.cs:38:44:38:74 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect.cs:38:44:38:66 | access to property QueryString | user-provided value | | UrlRedirect.cs:39:47:39:77 | access to indexer | UrlRedirect.cs:39:47:39:69 | access to property QueryString : NameValueCollection | UrlRedirect.cs:39:47:39:77 | access to indexer | Untrusted URL redirection due to $@. | UrlRedirect.cs:39:47:39:69 | access to property QueryString | user-provided value | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs new file mode 100644 index 00000000000..83f499ea048 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-601/UrlRedirect/UrlRedirect2.cs @@ -0,0 +1,34 @@ +using System; +using System.Web; +using System.Web.Mvc; +using System.Web.WebPages; +using System.Collections.Generic; + +public class UrlRedirectHandler2 : IHttpHandler +{ + private List VALID_REDIRECTS = new List{ "http://cwe.mitre.org/data/definitions/601.html", "http://cwe.mitre.org/data/definitions/79.html" }; + + public void ProcessRequest(HttpContext ctx) + { + // BAD: a request parameter is incorporated without validation into a URL redirect + ctx.Response.Redirect(ctx.Request.QueryString["page"]); + + var redirectUrl = ctx.Request.QueryString["page"]; + if (VALID_REDIRECTS.Contains(redirectUrl)) + { + // GOOD: the request parameter is validated against set of known fixed strings + ctx.Response.Redirect(redirectUrl); + } + + var url = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); + if (!url.IsAbsoluteUri) { + // GOOD: The redirect is to a relative URL + ctx.Response.Redirect(url.ToString()); + } + + if (url.Host == "example.org") { + // GOOD: The redirect is to a known host + ctx.Response.Redirect(url.ToString()); + } + } +} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected b/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected index c6e463428a6..4a3a88b7a74 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-611/UntrustedDataInsecureXml.expected @@ -1,5 +1,5 @@ edges -| Test.cs:11:50:11:72 | access to property QueryString : NameValueCollection | Test.cs:11:50:11:84 | access to indexer | +| Test.cs:11:50:11:72 | access to property QueryString : NameValueCollection | Test.cs:11:50:11:84 | access to indexer | provenance | | nodes | Test.cs:11:50:11:72 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | Test.cs:11:50:11:84 | access to indexer | semmle.label | access to indexer | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected index 63235e25c92..daaca6c5d3a 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/StoredXPathInjection.expected @@ -1,8 +1,8 @@ edges -| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | -| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | -| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | -| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | +| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | provenance | | +| StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | provenance | | +| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:25:45:25:148 | ... + ... | provenance | | +| StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | StoredXPathInjection.cs:28:41:28:144 | ... + ... | provenance | | nodes | StoredXPathInjection.cs:22:39:22:65 | call to method GetString : String | semmle.label | call to method GetString : String | | StoredXPathInjection.cs:23:39:23:65 | call to method GetString : String | semmle.label | call to method GetString : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected index fa812c210ed..78652e8ea9d 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-643/XPathInjection.expected @@ -1,34 +1,34 @@ edges -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:10:27:10:61 | access to indexer : String | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:27:11:61 | access to indexer : String | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | -| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:10:27:10:61 | access to indexer : String | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:10:27:10:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:11:27:11:61 | access to indexer : String | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:49 | access to property QueryString : NameValueCollection | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:16:33:16:33 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:19:29:19:29 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:28:20:28:20 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:34:30:34:30 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:40:21:40:21 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:46:22:46:22 | access to local variable s | provenance | | +| XPathInjection.cs:11:27:11:61 | access to indexer : String | XPathInjection.cs:52:21:52:21 | access to local variable s | provenance | | nodes | XPathInjection.cs:10:27:10:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | XPathInjection.cs:10:27:10:61 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected index 8f378704ce5..ed14c44e2af 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoS/ReDoS.expected @@ -1,15 +1,15 @@ edges -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:11:28:11:63 | access to indexer : String | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | -| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:11:28:11:63 | access to indexer : String | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:15:40:15:48 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:16:42:16:50 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:19:139:19:147 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:22:43:22:51 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:11:28:11:63 | access to indexer : String | ExponentialRegex.cs:24:21:24:29 | access to local variable userInput | provenance | | nodes | ExponentialRegex.cs:11:28:11:50 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ExponentialRegex.cs:11:28:11:63 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected index 100f4fc61cc..989d0648f48 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/ReDoSGlobalTimeout/ReDoS.expected @@ -1,7 +1,7 @@ edges -| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:13:28:13:63 | access to indexer : String | -| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | -| ExponentialRegex.cs:13:28:13:63 | access to indexer : String | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | +| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:13:28:13:63 | access to indexer : String | provenance | | +| ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | provenance | | +| ExponentialRegex.cs:13:28:13:63 | access to indexer : String | ExponentialRegex.cs:16:40:16:48 | access to local variable userInput | provenance | | nodes | ExponentialRegex.cs:13:28:13:50 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ExponentialRegex.cs:13:28:13:63 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected index 01b1dcfb67f..7fa9f7428f4 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-730/RegexInjection/RegexInjection.expected @@ -1,7 +1,7 @@ edges -| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:10:24:10:55 | access to indexer : String | -| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:14:19:14:23 | access to local variable regex | -| RegexInjection.cs:10:24:10:55 | access to indexer : String | RegexInjection.cs:14:19:14:23 | access to local variable regex | +| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:10:24:10:55 | access to indexer : String | provenance | | +| RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | RegexInjection.cs:14:19:14:23 | access to local variable regex | provenance | | +| RegexInjection.cs:10:24:10:55 | access to indexer : String | RegexInjection.cs:14:19:14:23 | access to local variable regex | provenance | | nodes | RegexInjection.cs:10:24:10:46 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | RegexInjection.cs:10:24:10:55 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected b/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected index 4dc81537e20..5c707971384 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-798/HardcodedCredentials.expected @@ -1,5 +1,5 @@ edges -| HardcodedCredentials.cs:48:30:48:60 | array creation of type Byte[] : Byte[] | HardcodedCredentials.cs:51:13:51:23 | access to local variable rawCertData | +| HardcodedCredentials.cs:48:30:48:60 | array creation of type Byte[] : Byte[] | HardcodedCredentials.cs:51:13:51:23 | access to local variable rawCertData | provenance | | nodes | HardcodedCredentials.cs:16:25:16:36 | "myPa55word" | semmle.label | "myPa55word" | | HardcodedCredentials.cs:32:19:32:28 | "username" | semmle.label | "username" | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected b/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected index 3f985cd5eff..86f4167bd75 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-807/ConditionalBypass.expected @@ -1,24 +1,24 @@ edges -| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:12:26:12:59 | access to indexer : String | -| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:16:13:16:30 | ... == ... | -| ConditionalBypass.cs:12:26:12:59 | access to indexer : String | ConditionalBypass.cs:16:13:16:30 | ... == ... | -| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:22:13:22:29 | access to property Value : String | -| ConditionalBypass.cs:22:13:22:29 | access to property Value : String | ConditionalBypass.cs:22:13:22:45 | call to method Equals | -| ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:27:13:27:29 | access to property Value : String | -| ConditionalBypass.cs:27:13:27:29 | access to property Value : String | ConditionalBypass.cs:27:13:27:40 | ... == ... | -| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | -| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | -| ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | -| ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | ConditionalBypass.cs:44:13:44:46 | ... == ... | -| ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:49:13:49:29 | access to property HostName | -| ConditionalBypass.cs:70:34:70:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:72:13:72:29 | access to property Value : String | -| ConditionalBypass.cs:72:13:72:29 | access to property Value : String | ConditionalBypass.cs:72:13:72:40 | ... == ... | -| ConditionalBypass.cs:83:34:83:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | -| ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:84:13:84:29 | access to property Value : String | -| ConditionalBypass.cs:84:13:84:29 | access to property Value : String | ConditionalBypass.cs:84:13:84:40 | ... == ... | +| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:12:26:12:59 | access to indexer : String | provenance | | +| ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | ConditionalBypass.cs:16:13:16:30 | ... == ... | provenance | | +| ConditionalBypass.cs:12:26:12:59 | access to indexer : String | ConditionalBypass.cs:16:13:16:30 | ... == ... | provenance | | +| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:19:34:19:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:22:13:22:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:22:13:22:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:22:13:22:29 | access to property Value : String | ConditionalBypass.cs:22:13:22:45 | call to method Equals | provenance | | +| ConditionalBypass.cs:27:13:27:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:27:13:27:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:27:13:27:29 | access to property Value : String | ConditionalBypass.cs:27:13:27:40 | ... == ... | provenance | | +| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | provenance | | +| ConditionalBypass.cs:42:32:42:66 | call to method GetHostByAddress : IPHostEntry | ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | provenance | | +| ConditionalBypass.cs:44:13:44:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | provenance | | +| ConditionalBypass.cs:44:13:44:29 | access to property HostName : String | ConditionalBypass.cs:44:13:44:46 | ... == ... | provenance | | +| ConditionalBypass.cs:49:13:49:20 | access to local variable hostInfo : IPHostEntry | ConditionalBypass.cs:49:13:49:29 | access to property HostName | provenance | | +| ConditionalBypass.cs:70:34:70:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:72:13:72:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:72:13:72:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:72:13:72:29 | access to property Value : String | ConditionalBypass.cs:72:13:72:40 | ... == ... | provenance | | +| ConditionalBypass.cs:83:34:83:52 | access to property Cookies : HttpCookieCollection | ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | provenance | | +| ConditionalBypass.cs:84:13:84:23 | access to local variable adminCookie : HttpCookie | ConditionalBypass.cs:84:13:84:29 | access to property Value : String | provenance | | +| ConditionalBypass.cs:84:13:84:29 | access to property Value : String | ConditionalBypass.cs:84:13:84:40 | ... == ... | provenance | | nodes | ConditionalBypass.cs:12:26:12:48 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | | ConditionalBypass.cs:12:26:12:59 | access to indexer : String | semmle.label | access to indexer : String | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected b/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected index 2f33a932e3d..4958966f788 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-838/InappropriateEncoding.expected @@ -1,14 +1,14 @@ edges -| HtmlEncode.cs:10:40:10:65 | call to method UrlEncode : String | HtmlEncode.cs:10:28:10:65 | ... + ... | -| InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | InappropriateEncoding.cs:18:46:18:51 | access to local variable query1 | -| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:35:32:35:43 | access to local variable encodedValue | -| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:36:22:36:59 | ... + ... | -| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | -| InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | InappropriateEncoding.cs:37:22:37:71 | call to method Format | -| InappropriateEncoding.cs:55:28:55:56 | call to method HtmlEncode : String | InappropriateEncoding.cs:56:31:56:42 | access to local variable encodedValue | -| InappropriateEncoding.cs:66:16:66:42 | call to method Replace : String | InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | -| SqlEncode.cs:14:62:14:87 | call to method Replace : String | SqlEncode.cs:15:46:15:50 | access to local variable query | -| UrlEncode.cs:10:43:10:69 | call to method HtmlEncode : String | UrlEncode.cs:10:31:10:69 | ... + ... | +| HtmlEncode.cs:10:40:10:65 | call to method UrlEncode : String | HtmlEncode.cs:10:28:10:65 | ... + ... | provenance | | +| InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | InappropriateEncoding.cs:18:46:18:51 | access to local variable query1 | provenance | | +| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:35:32:35:43 | access to local variable encodedValue | provenance | | +| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:36:22:36:59 | ... + ... | provenance | | +| InappropriateEncoding.cs:34:28:34:55 | call to method UrlEncode : String | InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | provenance | | +| InappropriateEncoding.cs:37:59:37:70 | access to local variable encodedValue : String | InappropriateEncoding.cs:37:22:37:71 | call to method Format | provenance | | +| InappropriateEncoding.cs:55:28:55:56 | call to method HtmlEncode : String | InappropriateEncoding.cs:56:31:56:42 | access to local variable encodedValue | provenance | | +| InappropriateEncoding.cs:66:16:66:42 | call to method Replace : String | InappropriateEncoding.cs:13:28:13:40 | call to method Encode : String | provenance | | +| SqlEncode.cs:14:62:14:87 | call to method Replace : String | SqlEncode.cs:15:46:15:50 | access to local variable query | provenance | | +| UrlEncode.cs:10:43:10:69 | call to method HtmlEncode : String | UrlEncode.cs:10:31:10:69 | ... + ... | provenance | | nodes | HtmlEncode.cs:10:28:10:65 | ... + ... | semmle.label | ... + ... | | HtmlEncode.cs:10:40:10:65 | call to method UrlEncode : String | semmle.label | call to method UrlEncode : String | diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst new file mode 100644 index 00000000000..8de04d882da --- /dev/null +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-ruby.rst @@ -0,0 +1,406 @@ +.. _customizing-library-models-for-ruby: + +:orphan: +:nosearch: + +Customizing Library Models for Ruby +=================================== + +.. include:: ../reusables/beta-note-customizing-library-models.rst + +Ruby analysis can be customized by adding library models in data extension files. + +A data extension for Ruby is a YAML file of the form: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: + data: + - + - + - ... + +The CodeQL library for Ruby exposes the following extensible predicates: + +- **sourceModel**\(type, path, kind) +- **sinkModel**\(type, path, kind) +- **typeModel**\(type1, type2, path) +- **summaryModel**\(type, path, input, output, kind) + +See the `CLI documentation for how to load and use data extensions in a CodeQL evaluation run `__ (internal access required). + +We'll explain how to use these using a few examples, and provide some reference material at the end of this article. + +Example: Taint sink in the 'tty-command' gem +-------------------------------------------- + +In this example, we'll show how to add the following argument, passed to **tty-command**, as a command-line injection sink: + +.. code-block:: ruby + + tty = TTY::Command.new + tty.run(cmd) # <-- add 'cmd' as a taint sink + +For this example, you can use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["TTY::Command", "Method[run].Argument[0]", "command-injection"] + + +- Since we're adding a new sink, we add a tuple to the **sinkModel** extensible predicate. +- The first column, **"TTY::Command"**, identifies a set of values from which to begin the search for the sink. + The string **"TTY::Command""** means we start at the places where the codebase constructs instances of the class **TTY::Command**. +- The second column is an access path that is evaluated from left to right, starting at the values that were identified by the first column. + + - **Method[run]** selects calls to the **run** method of the **TTY::Command** class. + - **Argument[0]** selects the first argument to calls to that member. + +- **command-injection** indicates that this is considered a sink for the command injection query. + +Example: Taint sources from 'sinatra' block parameters +------------------------------------------------------ + +In this example, we'll show how the 'x' parameter below could be marked as a remote flow source: + +.. code-block:: ruby + + class MyApp < Sinatra::Base + get '/' do |x| # <-- add 'x' as a taint source + # ... + end + end + +For this example you could use the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - [ + "Sinatra::Base!", + "Method[get].Argument[block].Parameter[0]", + "remote", + ] + +- Since we're adding a new taint source, we add a tuple to the **sourceModel** extensible predicate. +- The first column, **"Sinatra::Base!"**, begins the search at references to the **Sinatra::Base** class. + The **!** suffix indicates that we want to search for references to the class itself, rather than instances of the class. +- **Method[get]** selects calls to the **get** method of the **Sinatra::Base** class. +- **Argument[block]** selects the block argument to the **get** method call. +- **Parameter[0]** selects the first parameter of the block argument (the parameter named **x**). +- Finally, the kind **remote** indicates that this is considered a source of remote flow. + +Example: Using types to add MySQL injection sinks +------------------------------------------------- + +In this example, we'll show how to add the following SQL injection sink: + +.. code-block:: ruby + + def submit(q) + client = Mysql2::Client.new + client.query(q) # <-- add 'q' as a SQL injection sink + end + +We can recognize this using the following extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["Mysql2::Client", "Method[query].Argument[0]", "sql-injection"] + +- The first column, **"Mysql2::Client"**, begins the search at any instance of the **Mysql2::Client** class. +- **Method[query]** selects any call to the **query** method on that instance. +- **Argument[0]** selects the first argument to the method call. +- **sql-injection** indicates that this is considered a sink for the SQL injection query. + +Continued example: Using type models +------------------------------------ + +Consider this variation on the previous example, the mysql2 EventMachine API is used. +The client is obtained via a call to **Mysql2::EM::Client.new**. + +.. code-block:: ruby + + def submit(client, q) + client = Mysql2::EM::Client.new + client.query(q) + end + +So far we have only one model for **Mysql2::Client**, but in the real world we +may have many models for the various methods available. Because **Mysql2::EM::Client** is a subclass of **Mysql2::Client**, it inherits all of the same methods. +Instead of updating all our models to include both classes, we can add a type +model to indicate that **Mysql2::EM::Client** is a subclass of **Mysql2::Client**: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - ["Mysql2::Client", "Mysql2::EM::Client", ""] + +Example: Adding flow through 'URI.decode_uri_component' +------------------------------------------------------- + +In this example, we'll show how to add flow through calls to 'URI.decode_uri_component': + +.. code-block:: ruby + + y = URI.decode_uri_component(x); # add taint flow from 'x' to 'y' + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI!", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"URI!"**, begins the search for relevant calls at references to the **URI** class. +- The **!** suffix indicates that we are looking for the class itself, rather than instances of the class. +- The second column, **Method[decode_uri_component]**, is a path leading to the method calls we wish to model. + In this case, we select references to the **decode_uri_component** method from the **URI** class. +- The third column, **Argument[0]**, indicates the input of the flow. In this case, the first argument to the method call. +- The fourth column, **ReturnValue**, indicates the output of the flow. In this case, the return value of the method call. +- The last column, **taint**, indicates the kind of flow to add. The value **taint** means the output is not necessarily equal + to the input, but was derived from the input in a taint-preserving way. + +Example: Adding flow through 'File#each' +---------------------------------------- + +In this example, we'll show how to add flow through calls to **File#each** from the standard library, which iterates over the lines of a file: + +.. code-block:: ruby + + f = File.new("example.txt") + f.each { |line| ... } # add taint flow from `f` to `line` + +We can model this using the following data extension: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "File", + "Method[each]", + "Argument[self]", + "Argument[block].Parameter[0]", + "taint", + ] + + +- Since we're adding flow through a method call, we add a tuple to the **summaryModel** extensible predicate. +- The first column, **"File"**, begins the search for relevant calls at places where the **File** class is used. +- The second column, **Method[each]**, selects references to the **each** method on the **File** class. +- The third column specifies the input of the flow. **Argument[self]** selects the **self** argument of **each**, which is the **File** instance being iterated over. + +- The fourth column specifies the output of the flow: + + - **Argument[block]** selects the block argument of **each** (the block which is executed for each line in the file). + - **Parameter[0]** selects the first parameter of the block (the parameter named **line**). + +- The last column, **taint**, indicates the kind of flow to add. + +Reference material +------------------ + +The following sections provide reference material for extensible predicates, access paths, types, and kinds. + +Extensible predicates +--------------------- + +sourceModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint source. Most taint-tracking queries will use the new source. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the source. +- **kind**: Kind of source to add. Currently only **remote** is used. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sourceModel + data: + - ["User", "Method[name]", "remote"] + +sinkModel(type, path, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new taint sink. Sinks are query-specific and will typically affect one or two queries. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to the sink. +- **kind**: Kind of sink to add. See the section on sink kinds for a list of supported kinds. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: sinkModel + data: + - ["ExecuteShell", "Method[run].Argument[0]", "command-injection"] + +summaryModel(type, path, input, output, kind) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds flow through a method call. + +- **type**: Name of a type from which to evaluate **path**. +- **path**: Access path leading to a method call. +- **input**: Path relative to the method call that leads to input of the flow. +- **output**: Path relative to the method call leading to the output of the flow. +- **kind**: Kind of summary to add. Can be **taint** for taint-propagating flow, or **value** for value-preserving flow. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - [ + "URI", + "Method[decode_uri_component]", + "Argument[0]", + "ReturnValue", + "taint", + ] + +typeModel(type1, type2, path) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Adds a new definition of a type. + +- **type1**: Name of the type to define. +- **type2**: Name of the type from which to evaluate **path**. +- **path**: Access path leading from **type2** to **type1**. + +Example: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/ruby-all + extensible: typeModel + data: + - [ + "Mysql2::Client", + "MyDbWrapper", + "Method[getConnection].ReturnValue", + ] + +Types +----- + +A type is a string that identifies a set of values. +In each of the extensible predicates mentioned in previous section, the first column is always the name of a type. +A type can be defined by adding **typeModel** tuples for that type. + +Access paths +------------ + +The **path**, **input**, and **output** columns consist of a **.**-separated list of components, which is evaluated from left to right, +with each step selecting a new set of values derived from the previous set of values. + +The following components are supported: + +- **Argument[**\ `number`\ **]** selects the argument at the given index. +- **Argument[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Argument[self]** selects the receiver of a method call. +- **Argument[block]** selects the block argument. +- **Argument[any]** selects any argument, except self or block arguments. +- **Argument[any-named]** selects any keyword argument. +- **Argument[hash-splat]** selects a special argument representing all keyword arguments passed in the method call. +- **Parameter[**\ `number`\ **]** selects the argument at the given index. +- **Parameter[**\ `string`:\ **]** selects the keyword argument with the given name. +- **Parameter[self]** selects the **self** parameter of a method. +- **Parameter[block]** selects the block parameter. +- **Parameter[any]** selects any parameter, except self or block parameters. +- **Parameter[any-named]** selects any keyword parameter. +- **Parameter[hash-splat]** selects the hash splat parameter, often written as **\*\*kwargs**. +- **ReturnValue** selects the return value of a call. +- **Method[**\ `name`\ **]** selects a call to the method with the given name. +- **Element[any]** selects any element of an array or hash. +- **Element[**\ `number`\ **]** selects an array element at the given index. +- **Element[**\ `string`\ **]** selects a hash element at the given key. +- **Field[@**\ `string`\ **]** selects an instance variable with the given name. +- **Fuzzy** selects all values that are derived from the current value through a combination of the other operations described in this list. + For example, this can be used to find all values that appear to originate from a particular class. This can be useful for finding method calls + from a known class, but where the receiver type is not known or is difficult to model. + +Additional notes about the syntax of operands: + +- Multiple operands may be given to a single component, as a shorthand for the union of the operands. For example, **Method[foo,bar]** matches the union of **Method[foo]** and **Method[bar]**. +- Numeric operands to **Argument**, **Parameter**, and **Element** may be given as a lower bound. For example, **Argument[1..]** matches all arguments except 0. + +Kinds +----- + +Source kinds +~~~~~~~~~~~~ + +- **remote**: A generic source of remote flow. Most taint-tracking queries will use such a source. Currently this is the only supported source kind. + +Sink kinds +~~~~~~~~~~ + +Unlike sources, sinks tend to be highly query-specific, rarely affecting more than one or two queries. +Not every query supports customizable sinks. If the following sinks are not suitable for your use case, you should add a new query. + +- **code-injection**: A sink that can be used to inject code, such as in calls to **eval**. +- **command-injection**: A sink that can be used to inject shell commands, such as in calls to **Process.spawn**. +- **path-injection**: A sink that can be used for path injection in a file system access, such as in calls to **File.open**. +- **sql-injection**: A sink that can be used for SQL injection, such as in an ActiveRecord **where** call. +- **url-redirection**: A sink that can be used to redirect the user to a malicious URL. +- **log-injection**: A sink that can be used for log injection, such as in a **Rails.logger** call. + +Summary kinds +~~~~~~~~~~~~~ + +- **taint**: A summary that propagates taint. This means the output is not necessarily equal to the input, but it was derived from the input in an unrestrictive way. An attacker who controls the input will have significant control over the output as well. +- **value**: A summary that preserves the value of the input or creates a copy of the input such that all of its object properties are preserved. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.2.rst new file mode 100644 index 00000000000..bcbe451af35 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.2.rst @@ -0,0 +1,112 @@ +.. _codeql-cli-2.16.2: + +========================== +CodeQL 2.16.2 (2024-02-12) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.16.2 runs a total of 406 security queries when configured with the Default suite (covering 160 CWE). The Extended suite enables an additional 131 queries (covering 34 more CWE). 2 security queries have been added with this release. + +CodeQL CLI +---------- + +There are no user-facing CLI changes in this release. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Corrected 2 false positive with :code:`cpp/incorrect-string-type-conversion`\ : conversion of byte arrays to wchar and new array allocations converted to wchar. +* The "Incorrect return-value check for a 'scanf'-like function" query (:code:`cpp/incorrectly-checked-scanf`) no longer reports an alert when an explicit check for EOF is added. +* The "Incorrect return-value check for a 'scanf'-like function" query (:code:`cpp/incorrectly-checked-scanf`) now recognizes more EOF checks. +* The "Potentially uninitialized local variable" query (:code:`cpp/uninitialized-local`) no longer reports an alert when the local variable is used as a qualifier to a static member function call. +* The diagnostic query :code:`cpp/diagnostics/successfully-extracted-files` now considers any C/C++ file seen during extraction, even one with some errors, to be extracted / scanned. This affects the Code Scanning UI measure of scanned C/C++ files. + +C# +"" + +* Added string interpolation expressions and :code:`string.Format` as possible sanitizers for the :code:`cs/web/unvalidated-url-redirection` query. + +Ruby +"""" + +* Added new unsafe deserialization sinks for the ox gem. +* Added an additional unsafe deserialization sink for the oj gem. + +New Queries +~~~~~~~~~~~ + +Java +"""" + +* Added a new query :code:`java/android/sensitive-text` to detect instances of sensitive data being exposed through text fields without being properly masked. +* Added a new query :code:`java/android/sensitive-notification` to detect instances of sensitive data being exposed through Android notifications. + +Ruby +"""" + +* Added a new experimental query, :code:`rb/insecure-randomness`, to detect when application uses random values that are not cryptographically secure. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +Python +"""""" + +* Fixed the :code:`a` (ASCII) inline flag not being recognized by the regular expression library. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* Added a new database relation to store compiler arguments specified inside :code:`@[...].rsp` file arguments. The arguments are returned by :code:`Compilation::getExpandedArgument/1` and :code:`Compilation::getExpandedArguments/0`. +* C# 12: Added extractor, QL library and data flow support for collection expressions like :code:`[1, y, 4, .. x]`. +* The C# extractor now accepts an extractor option :code:`logging.verbosity` that specifies the verbosity of the logs. The option is added via :code:`codeql database create --language=csharp -Ologging.verbosity=debug ...` or by setting the corresponding environment variable :code:`CODEQL_EXTRACTOR_CSHARP_OPTION_LOGGING_VERBOSITY`. + +Java +"""" + +* Added models for the following packages: + + * com.fasterxml.jackson.databind + * javax.servlet + +* Added the :code:`java.util.Date` and :code:`java.util.UUID` classes to the list of types in the :code:`SimpleTypeSanitizer` class in :code:`semmle.code.java.security.Sanitizers`. + +Python +"""""" + +* Added :code:`html.escape` as a sanitizer for HTML. + +Ruby +"""" + +* Flow is now tracked through Rails :code:`render` calls, when the argument is a :code:`ViewComponent`. In this case, data flow is tracked into the accompanying :code:`.html.erb` file. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added the :code:`PreprocBlock.qll` library to this repository. This library offers a view of :code:`#if`, :code:`#elif`, :code:`#else` and similar directives as a tree with navigable parent-child relationships. +* Added a new :code:`ThrowingFunction` abstract class that can be used to model an external function that may throw an exception. diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index 09ca75aa4a1..2c1de5b5957 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -11,6 +11,7 @@ A list of queries for each suite and language `is available here >\n", cmdDebugStr(cmd), stderr) } - var response driverResponse + var response DriverResponse if err := json.Unmarshal(buf.Bytes(), &response); err != nil { return nil, err } diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go b/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go index cd375fbc3c2..22305d9c90a 100644 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go +++ b/go/extractor/vendor/golang.org/x/tools/go/packages/golist.go @@ -35,23 +35,23 @@ type goTooOldError struct { error } -// responseDeduper wraps a driverResponse, deduplicating its contents. +// responseDeduper wraps a DriverResponse, deduplicating its contents. type responseDeduper struct { seenRoots map[string]bool seenPackages map[string]*Package - dr *driverResponse + dr *DriverResponse } func newDeduper() *responseDeduper { return &responseDeduper{ - dr: &driverResponse{}, + dr: &DriverResponse{}, seenRoots: map[string]bool{}, seenPackages: map[string]*Package{}, } } -// addAll fills in r with a driverResponse. -func (r *responseDeduper) addAll(dr *driverResponse) { +// addAll fills in r with a DriverResponse. +func (r *responseDeduper) addAll(dr *DriverResponse) { for _, pkg := range dr.Packages { r.addPackage(pkg) } @@ -128,7 +128,7 @@ func (state *golistState) mustGetEnv() map[string]string { // goListDriver uses the go list command to interpret the patterns and produce // the build system package structure. // See driver for more details. -func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { +func goListDriver(cfg *Config, patterns ...string) (_ *DriverResponse, err error) { // Make sure that any asynchronous go commands are killed when we return. parentCtx := cfg.Context if parentCtx == nil { @@ -146,16 +146,18 @@ func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { } // Fill in response.Sizes asynchronously if necessary. - var sizeserr error - var sizeswg sync.WaitGroup if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { - sizeswg.Add(1) + errCh := make(chan error) go func() { compiler, arch, err := packagesdriver.GetSizesForArgsGolist(ctx, state.cfgInvocation(), cfg.gocmdRunner) - sizeserr = err response.dr.Compiler = compiler response.dr.Arch = arch - sizeswg.Done() + errCh <- err + }() + defer func() { + if sizesErr := <-errCh; sizesErr != nil { + err = sizesErr + } }() } @@ -208,10 +210,7 @@ extractQueries: } } - sizeswg.Wait() - if sizeserr != nil { - return nil, sizeserr - } + // (We may yet return an error due to defer.) return response.dr, nil } @@ -266,7 +265,7 @@ func (state *golistState) runContainsQueries(response *responseDeduper, queries // adhocPackage attempts to load or construct an ad-hoc package for a given // query, if the original call to the driver produced inadequate results. -func (state *golistState) adhocPackage(pattern, query string) (*driverResponse, error) { +func (state *golistState) adhocPackage(pattern, query string) (*DriverResponse, error) { response, err := state.createDriverResponse(query) if err != nil { return nil, err @@ -357,7 +356,7 @@ func otherFiles(p *jsonPackage) [][]string { // createDriverResponse uses the "go list" command to expand the pattern // words and return a response for the specified packages. -func (state *golistState) createDriverResponse(words ...string) (*driverResponse, error) { +func (state *golistState) createDriverResponse(words ...string) (*DriverResponse, error) { // go list uses the following identifiers in ImportPath and Imports: // // "p" -- importable package or main (command) @@ -384,7 +383,7 @@ func (state *golistState) createDriverResponse(words ...string) (*driverResponse pkgs := make(map[string]*Package) additionalErrors := make(map[string][]Error) // Decode the JSON and convert it to Package form. - response := &driverResponse{ + response := &DriverResponse{ GoVersion: goVersion, } for dec := json.NewDecoder(buf); dec.More(); { diff --git a/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go b/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go index 81e9e6a727d..f33b0afc22c 100644 --- a/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go +++ b/go/extractor/vendor/golang.org/x/tools/go/packages/packages.go @@ -206,43 +206,6 @@ type Config struct { Overlay map[string][]byte } -// driver is the type for functions that query the build system for the -// packages named by the patterns. -type driver func(cfg *Config, patterns ...string) (*driverResponse, error) - -// driverResponse contains the results for a driver query. -type driverResponse struct { - // NotHandled is returned if the request can't be handled by the current - // driver. If an external driver returns a response with NotHandled, the - // rest of the driverResponse is ignored, and go/packages will fallback - // to the next driver. If go/packages is extended in the future to support - // lists of multiple drivers, go/packages will fall back to the next driver. - NotHandled bool - - // Compiler and Arch are the arguments pass of types.SizesFor - // to get a types.Sizes to use when type checking. - Compiler string - Arch string - - // Roots is the set of package IDs that make up the root packages. - // We have to encode this separately because when we encode a single package - // we cannot know if it is one of the roots as that requires knowledge of the - // graph it is part of. - Roots []string `json:",omitempty"` - - // Packages is the full set of packages in the graph. - // The packages are not connected into a graph. - // The Imports if populated will be stubs that only have their ID set. - // Imports will be connected and then type and syntax information added in a - // later pass (see refine). - Packages []*Package - - // GoVersion is the minor version number used by the driver - // (e.g. the go command on the PATH) when selecting .go files. - // Zero means unknown. - GoVersion int -} - // Load loads and returns the Go packages named by the given patterns. // // Config specifies loading options; @@ -291,7 +254,7 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) { // no external driver, or the driver returns a response with NotHandled set, // defaultDriver will fall back to the go list driver. // The boolean result indicates that an external driver handled the request. -func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, bool, error) { +func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) { if driver := findExternalDriver(cfg); driver != nil { response, err := driver(cfg, patterns...) if err != nil { @@ -303,7 +266,10 @@ func defaultDriver(cfg *Config, patterns ...string) (*driverResponse, bool, erro } response, err := goListDriver(cfg, patterns...) - return response, false, err + if err != nil { + return nil, false, err + } + return response, false, nil } // A Package describes a loaded Go package. @@ -648,7 +614,7 @@ func newLoader(cfg *Config) *loader { // refine connects the supplied packages into a graph and then adds type // and syntax information as requested by the LoadMode. -func (ld *loader) refine(response *driverResponse) ([]*Package, error) { +func (ld *loader) refine(response *DriverResponse) ([]*Package, error) { roots := response.Roots rootMap := make(map[string]int, len(roots)) for i, root := range roots { diff --git a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go index 9bde15e3bc6..9fffa9ad05c 100644 --- a/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go +++ b/go/extractor/vendor/golang.org/x/tools/internal/gcimporter/iimport.go @@ -224,6 +224,7 @@ func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte // Gather the relevant packages from the manifest. items := make([]GetPackagesItem, r.uint64()) + uniquePkgPaths := make(map[string]bool) for i := range items { pkgPathOff := r.uint64() pkgPath := p.stringAt(pkgPathOff) @@ -248,6 +249,12 @@ func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte } items[i].nameIndex = nameIndex + + uniquePkgPaths[pkgPath] = true + } + // Debugging #63822; hypothesis: there are duplicate PkgPaths. + if len(uniquePkgPaths) != len(items) { + reportf("found duplicate PkgPaths while reading export data manifest: %v", items) } // Request packages all at once from the client, diff --git a/go/extractor/vendor/modules.txt b/go/extractor/vendor/modules.txt index c967e6f41d5..5687615f62c 100644 --- a/go/extractor/vendor/modules.txt +++ b/go/extractor/vendor/modules.txt @@ -1,10 +1,10 @@ -# golang.org/x/mod v0.14.0 +# golang.org/x/mod v0.15.0 ## explicit; go 1.18 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/tools v0.17.0 +# golang.org/x/tools v0.18.0 ## explicit; go 1.18 golang.org/x/tools/go/gcexportdata golang.org/x/tools/go/internal/packagesdriver diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 8f58f5145db..fba2a870356 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.8 + +No user-facing changes. + ## 0.0.7 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/0.0.8.md b/go/ql/consistency-queries/change-notes/released/0.0.8.md new file mode 100644 index 00000000000..6af2d954c09 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/0.0.8.md @@ -0,0 +1,3 @@ +## 0.0.8 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index a2a5484910b..58fdc6b45de 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.7 +lastReleaseVersion: 0.0.8 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index c7522dd8e35..b4cc9a2e037 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 0.0.7 +version: 0.0.8 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 475352f1df2..65a2376217b 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.9 + +No user-facing changes. + ## 0.7.8 No user-facing changes. diff --git a/go/ql/lib/change-notes/released/0.7.9.md b/go/ql/lib/change-notes/released/0.7.9.md new file mode 100644 index 00000000000..c1fe3898274 --- /dev/null +++ b/go/ql/lib/change-notes/released/0.7.9.md @@ -0,0 +1,3 @@ +## 0.7.9 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index b6b12196b26..576395f3405 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.8 +lastReleaseVersion: 0.7.9 diff --git a/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml b/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml new file mode 100644 index 00000000000..b4d2d3299a4 --- /dev/null +++ b/go/ql/lib/ext/github.com.cristalhq.jwt.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/cristalhq/jwt", "", True, "NewSignerHS", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml new file mode 100644 index 00000000000..04db1290669 --- /dev/null +++ b/go/ql/lib/ext/github.com.dgrijalva.jwt-go.model.yml @@ -0,0 +1,21 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/dgrijalva/jwt-go", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/dgrijalva/jwt-go", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/dgrijalva/jwt-go", "Parser", True, "ParseUnverified", "", "", "Argument[0]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/dgrijalva/jwt-go", "", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "Parser", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "Parser", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseECPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseECPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPrivateKeyFromPEMWithPassword", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/dgrijalva/jwt-go", "", True, "ParseRSAPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.form3tech-oss.jwt-go.model.yml b/go/ql/lib/ext/github.com.form3tech-oss.jwt-go.model.yml new file mode 100644 index 00000000000..92a82798d8a --- /dev/null +++ b/go/ql/lib/ext/github.com.form3tech-oss.jwt-go.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/form3tech-oss/jwt-go", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/form3tech-oss/jwt-go", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml b/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml new file mode 100644 index 00000000000..eb9e54f171c --- /dev/null +++ b/go/ql/lib/ext/github.com.go-chi.jwtauth.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/go-chi/jwtauth", "", True, "New", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml b/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml new file mode 100644 index 00000000000..bd13c79ea3a --- /dev/null +++ b/go/ql/lib/ext/github.com.go-jose.go-jose.model.yml @@ -0,0 +1,14 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[-1]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/go-jose/go-jose/$ANYVERSION/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.go-kit.kit.auth.jwt.model.yml b/go/ql/lib/ext/github.com.go-kit.kit.auth.jwt.model.yml new file mode 100644 index 00000000000..9ed0791dc54 --- /dev/null +++ b/go/ql/lib/ext/github.com.go-kit.kit.auth.jwt.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/go-kit/kit/auth/jwt", "", True, "NewSigner", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml new file mode 100644 index 00000000000..3f6eaac89b6 --- /dev/null +++ b/go/ql/lib/ext/github.com.golang-jwt.jwt.model.yml @@ -0,0 +1,23 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/golang-jwt/jwt", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/golang-jwt/jwt", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/golang-jwt/jwt", "Parser", True, "ParseUnverified", "", "", "Argument[0]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["github.com/golang-jwt/jwt", "", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "Parser", True, "Parse", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "Parser", True, "ParseWithClaims", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseECPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseECPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseEdPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseEdPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseRSAPrivateKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "ParseRSAPublicKeyFromPEM", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["github.com/golang-jwt/jwt", "", True, "RegisterSigningMethod", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/github.com.kataras.iris.middleware.jwt.model.yml b/go/ql/lib/ext/github.com.kataras.iris.middleware.jwt.model.yml new file mode 100644 index 00000000000..e21cd052574 --- /dev/null +++ b/go/ql/lib/ext/github.com.kataras.iris.middleware.jwt.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/kataras/iris/$ANYVERSION/middleware/jwt", "", True, "NewSigner", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.kataras.jwt.model.yml b/go/ql/lib/ext/github.com.kataras.jwt.model.yml new file mode 100644 index 00000000000..ab87a747175 --- /dev/null +++ b/go/ql/lib/ext/github.com.kataras.jwt.model.yml @@ -0,0 +1,10 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/kataras/jwt", "Keys", True, "Register", "", "", "Argument[3]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "SignEncrypted", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "SignEncryptedWithHeader", "", "", "Argument[1]", "credentials-key", "manual"] + - ["github.com/kataras/jwt", "", True, "SignWithHeader", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.lestrrat-go.jwx.jwk.model.yml b/go/ql/lib/ext/github.com.lestrrat-go.jwx.jwk.model.yml new file mode 100644 index 00000000000..675d5d8b540 --- /dev/null +++ b/go/ql/lib/ext/github.com.lestrrat-go.jwx.jwk.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/lestrrat-go/jwx/$ANYVERSION/jwk", "", True, "New", "", "", "Argument[0]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.lestrrat-go.jwx.model.yml b/go/ql/lib/ext/github.com.lestrrat-go.jwx.model.yml new file mode 100644 index 00000000000..14a5cdd7482 --- /dev/null +++ b/go/ql/lib/ext/github.com.lestrrat-go.jwx.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/lestrrat-go/jwx", "", True, "New", "", "", "Argument[0]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.lestrrat.go-jwx.jwk.model.yml b/go/ql/lib/ext/github.com.lestrrat.go-jwx.jwk.model.yml new file mode 100644 index 00000000000..f194e1ec93c --- /dev/null +++ b/go/ql/lib/ext/github.com.lestrrat.go-jwx.jwk.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/lestrrat/go-jwx/jwk", "", True, "New", "", "", "Argument[0]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/github.com.ory.fosite.token.jwt.model.yml b/go/ql/lib/ext/github.com.ory.fosite.token.jwt.model.yml new file mode 100644 index 00000000000..191fdea2fb2 --- /dev/null +++ b/go/ql/lib/ext/github.com.ory.fosite.token.jwt.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["github.com/ory/fosite/token/jwt", "Token", True, "SignedString", "", "", "Argument[0]", "credentials-key", "manual"] + - ["github.com/ory/fosite/token/jwt", "SigningMethod", True, "Sign", "", "", "Argument[1]", "credentials-key", "manual"] diff --git a/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml b/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml new file mode 100644 index 00000000000..fa0c3806166 --- /dev/null +++ b/go/ql/lib/ext/gopkg.in.square.go-jose.model.yml @@ -0,0 +1,14 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sinkModel + data: + - ["gopkg.in/square/go-jose.v2/jwt", "JSONWebToken", True, "UnsafeClaimsWithoutVerification", "", "", "Argument[-1]", "jwt", "manual"] + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["gopkg.in/square/go-jose.v2/jwt", "", True, "ParseEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "", True, "ParseSigned", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "NestedJSONWebToken", True, "ParseSignedAndEncrypted", "", "", "Argument[0]", "ReturnValue[0]", "taint", "manual"] + - ["gopkg.in/square/go-jose.v2/jwt", "NestedJSONWebToken", True, "Decrypt", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/ext/math.big.model.yml b/go/ql/lib/ext/math.big.model.yml new file mode 100644 index 00000000000..63e02e83709 --- /dev/null +++ b/go/ql/lib/ext/math.big.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: summaryModel + data: + - ["math/big", "Int", False, "Int64", "", "", "Argument[-1]", "ReturnValue[0]", "taint", "manual"] diff --git a/go/ql/lib/go.qll b/go/ql/lib/go.qll index afb4ffea8ad..9260c988eaa 100644 --- a/go/ql/lib/go.qll +++ b/go/ql/lib/go.qll @@ -45,11 +45,14 @@ import semmle.go.frameworks.Fiber import semmle.go.frameworks.Gin import semmle.go.frameworks.GinCors import semmle.go.frameworks.Glog +import semmle.go.frameworks.Gogf +import semmle.go.frameworks.GoJose import semmle.go.frameworks.GoKit import semmle.go.frameworks.GoMicro import semmle.go.frameworks.GoRestfulHttp import semmle.go.frameworks.Gqlgen import semmle.go.frameworks.Iris +import semmle.go.frameworks.Jwt import semmle.go.frameworks.K8sIoApimachineryPkgRuntime import semmle.go.frameworks.K8sIoApiCoreV1 import semmle.go.frameworks.K8sIoClientGo diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 5f317377d45..02333bd3cad 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 0.7.8 +version: 0.7.9 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/lib/semmle/go/Files.qll b/go/ql/lib/semmle/go/Files.qll index 64b5caf7f46..87e3fd3169d 100644 --- a/go/ql/lib/semmle/go/Files.qll +++ b/go/ql/lib/semmle/go/Files.qll @@ -124,6 +124,7 @@ class ExtractedOrExternalFile extends Container, Impl::File, Documentable, ExprP /** A file that has been extracted. */ class File extends ExtractedOrExternalFile { File() { + not this.getBaseName() = "-" and // getAChild is specifically for the Go AST and so does not apply to non-go files // we care about all non-go extracted files, as only go files can have `@file` entries due to requiring a file entry for diagnostic errors not this.getExtension() = "go" @@ -141,6 +142,13 @@ class GoFile extends File { override string getAPrimaryQlClass() { result = "GoFile" } } +/** A dummy file. */ +class DummyFile extends ExtractedOrExternalFile { + DummyFile() { this.getBaseName() = "-" } + + override string getAPrimaryQlClass() { result = "DummyFile" } +} + /** An HTML file. */ class HtmlFile extends File { HtmlFile() { this.getExtension().regexpMatch("x?html?") } diff --git a/go/ql/lib/semmle/go/frameworks/Gin.qll b/go/ql/lib/semmle/go/frameworks/Gin.qll index bdaf002e117..574b7e16246 100644 --- a/go/ql/lib/semmle/go/frameworks/Gin.qll +++ b/go/ql/lib/semmle/go/frameworks/Gin.qll @@ -1,8 +1,9 @@ /** - * Provides classes for working with untrusted flow sources from the `github.com/gin-gonic/gin` package. + * Provides classes for working with the `github.com/gin-gonic/gin` package. */ import go +private import semmle.go.security.HardcodedCredentials private module Gin { /** Gets the package name `github.com/gin-gonic/gin`. */ @@ -75,4 +76,13 @@ private module Gin { override DataFlow::Node getAPathArgument() { result = this.getArgument(pathArg) } } + + private class GinJwtSign extends HardcodedCredentials::Sink { + GinJwtSign() { + exists(Field f | + f.hasQualifiedName(package("github.com/appleboy/gin-jwt", ""), "GinJWTMiddleware", "Key") and + f.getAWrite().getRhs() = this + ) + } + } } diff --git a/go/ql/lib/semmle/go/frameworks/GoJose.qll b/go/ql/lib/semmle/go/frameworks/GoJose.qll new file mode 100644 index 00000000000..faae97b2d9f --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/GoJose.qll @@ -0,0 +1,48 @@ +/** + * Provides classes for working with the `github.com/square/go-jose`, `github.com/go-jose/go-jose`, + * and `gopkg.in/square-go-jose.v2` packages. + */ + +import go +private import semmle.go.security.HardcodedCredentials + +private module GoJose { + private class GoJoseKey extends HardcodedCredentials::Sink { + GoJoseKey() { + exists(Field f | + f.hasQualifiedName(goJosePackage(), ["Recipient", "SigningKey"], "Key") and + f.getAWrite().getRhs() = this + ) + } + } + + private string goJosePackage() { + result = + [ + package("github.com/square/go-jose", ""), package("github.com/go-jose/go-jose", ""), + "gopkg.in/square/go-jose.v2" + ] + } + + /** + * Provides classes and predicates for working with the `gopkg.in/square/go-jose/jwt` and + * `github.com/go-jose/go-jose/jwt` packages. + */ + private module Jwt { + private import semmle.go.security.MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck + + /** The method `JSONWebToken.Claims`. */ + private class GoJoseParseWithClaims extends JwtSafeParse { + GoJoseParseWithClaims() { + this.(Method).hasQualifiedName(goJoseJwtPackage(), "JSONWebToken", "Claims") + } + + override int getTokenArgNum() { result = -1 } + } + + /** Gets the package names `gopkg.in/square/go-jose/jwt` and `github.com/go-jose/go-jose/jwt`. */ + private string goJoseJwtPackage() { + result = package(["gopkg.in/square/go-jose", "github.com/go-jose/go-jose"], "jwt") + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Gogf.qll b/go/ql/lib/semmle/go/frameworks/Gogf.qll new file mode 100644 index 00000000000..1ef78b3bb69 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Gogf.qll @@ -0,0 +1,17 @@ +/** + * Provides classes for working the `github.com/gogf` package. + */ + +import go +private import semmle.go.security.HardcodedCredentials + +private module Gogf { + private class GogfJwtSign extends HardcodedCredentials::Sink { + GogfJwtSign() { + exists(Field f | + f.hasQualifiedName(package("github.com/gogf/gf-jwt", ""), "GfJWTMiddleware", "Key") and + f.getAWrite().getRhs() = this + ) + } + } +} diff --git a/go/ql/lib/semmle/go/frameworks/Iris.qll b/go/ql/lib/semmle/go/frameworks/Iris.qll index bb965769d5c..b241ce8e538 100644 --- a/go/ql/lib/semmle/go/frameworks/Iris.qll +++ b/go/ql/lib/semmle/go/frameworks/Iris.qll @@ -3,6 +3,7 @@ */ import go +private import semmle.go.security.HardcodedCredentials private module Iris { /** Gets the v1 module path `github.com/kataras/iris`. */ @@ -46,4 +47,13 @@ private module Iris { override DataFlow::Node getAPathArgument() { result = this.getArgument(pathArg) } } + + private class IrisJwt extends HardcodedCredentials::Sink { + IrisJwt() { + exists(Field f | + f.hasQualifiedName(package("github.com/kataras/iris", "middleware/jwt"), "Signer", "Key") and + f.getAWrite().getRhs() = this + ) + } + } } diff --git a/go/ql/lib/semmle/go/frameworks/Jwt.qll b/go/ql/lib/semmle/go/frameworks/Jwt.qll new file mode 100644 index 00000000000..681ead26834 --- /dev/null +++ b/go/ql/lib/semmle/go/frameworks/Jwt.qll @@ -0,0 +1,57 @@ +/** + * Provides classes and predicates for working with the `github.com/golang-jwt/jwt` and + * `github.com/dgrijalva/jwt-go` packages. + */ + +import go +private import semmle.go.security.MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck + +/** The function `jwt.Parse` or the method `Parser.Parse`. */ +private class GolangJwtParse extends JwtSafeParse { + GolangJwtParse() { + this.hasQualifiedName(golangJwtPackage(), "Parse") + or + this.(Method).hasQualifiedName(golangJwtPackage(), "Parser", "Parse") + } + + override int getTokenArgNum() { result = 0 } +} + +/** The function `jwt.ParseWithClaims` or the method `Parser.ParseWithClaims`. */ +private class GolangJwtParseWithClaims extends JwtSafeParse { + GolangJwtParseWithClaims() { + this.hasQualifiedName(golangJwtPackage(), "ParseWithClaims") + or + this.(Method).hasQualifiedName(golangJwtPackage(), "Parser", "ParseWithClaims") + } + + override int getTokenArgNum() { result = 0 } +} + +/** The function `jwt.ParseFromRequest`. */ +private class GolangJwtParseFromRequest extends JwtSafeParse { + GolangJwtParseFromRequest() { + this.hasQualifiedName(golangJwtRequestPackage(), "ParseFromRequest") + } + + override int getTokenArgNum() { result = 0 } +} + +/** The function `jwt.ParseFromRequestWithClaims`. */ +private class GolangJwtParseFromRequestWithClaims extends JwtSafeParse { + GolangJwtParseFromRequestWithClaims() { + this.hasQualifiedName(golangJwtRequestPackage(), "ParseFromRequestWithClaims") + } + + override int getTokenArgNum() { result = 0 } +} + +/** Gets the pakcage names `github.com/golang-jwt/jwt` and `github.com/dgrijalva/jwt-go`. */ +private string golangJwtPackage() { + result = package(["github.com/golang-jwt/jwt", "github.com/dgrijalva/jwt-go"], "") +} + +/** Gets the package names `github.com/golang-jwt/jwt/request` and `github.com/dgrijalva/jwt-go/request`. */ +private string golangJwtRequestPackage() { + result = package(["github.com/golang-jwt/jwt", "github.com/dgrijalva/jwt-go"], "request") +} diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll new file mode 100644 index 00000000000..84c426ac317 --- /dev/null +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -0,0 +1,137 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * hardcoded credentials, as well as extension points + * for adding your own. + */ + +import go +private import semmle.go.StringOps +private import semmle.go.dataflow.ExternalFlow +private import semmle.go.security.SensitiveActions + +/** + * Provides default sources, sinks and sanitizers for reasoning about + * hardcoded credentials, as well as extension points + * for adding your own. + */ +module HardcodedCredentials { + /** A data flow source for hardcoded credentials. */ + abstract class Source extends DataFlow::Node { } + + /** A data flow sink for hardcoded credentials. */ + abstract class Sink extends DataFlow::Node { } + + /** A sanitizer for hardcoded credentials. */ + abstract class Sanitizer extends DataFlow::Node { } + + private module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + } + + /** Tracks taint flow for reasoning about hardcoded credentials. */ + module Flow = TaintTracking::Global; + + /** A hardcoded string literal as a source for hardcoded credentials. */ + private class HardcodedStringSource extends Source { + HardcodedStringSource() { + exists(StringLit val | this.asExpr() = val | + not PasswordHeuristics::isDummyPassword(val.getStringValue()) + ) + } + } + + /** A use of a credential. */ + private class CredentialsSink extends Sink { + CredentialsSink() { exists(string s | s.matches("credentials-%") | sinkNode(this, s)) } + } + + /** + * Holds if the guard `g` in its branch `branch` validates the expression `e` + * by comparing it to a literal. + */ + private predicate constantValueCheck(DataFlow::Node g, Expr e, boolean branch) { + exists(Literal lit, DataFlow::EqualityTestNode eq | eq = g | + eq.getAnOperand().asExpr() = e and + eq.getAnOperand().asExpr() = lit and + e != lit and + branch = eq.getPolarity().booleanNot() + ) + } + + /** + * A value validated by comparing it to a constant value. + * For example, in the context `if key != "invalid_key" { ... }`, + * if `"invalid_key"` is indeed the only dangerous key then guarded uses of `key` are likely + * to be safe. + */ + private class CompareExprSanitizer extends Sanitizer { + CompareExprSanitizer() { + this = DataFlow::BarrierGuard::getABarrierNode() + } + } + + /** + * A value returned with an error. + * + * Typically this means contexts like `return "", errors.New("Oh no")`, + * where we can be reasonably confident downstream users will not mistake + * that empty string for a usable key. + */ + private class ReturnedWithErrorSanitizer extends Sanitizer { + ReturnedWithErrorSanitizer() { DataFlow::isReturnedWithError(this) } + } + + /** The result of a formatting string call. */ + private class FormattingSanitizer extends Sanitizer { + FormattingSanitizer() { any(StringOps::Formatting::StringFormatCall s).getAResult() = this } + } + + private string getRandIntFunctionName() { + result = + [ + "ExpFloat64", "Float32", "Float64", "Int", "Int31", "Int31n", "Int63", "Int63n", "Intn", + "NormFloat64", "Uint32", "Uint64" + ] + } + + private DataFlow::CallNode getARandIntCall() { + exists(Function f | f = result.getTarget() | + f.hasQualifiedName("math/rand", getRandIntFunctionName()) or + f.(Method).hasQualifiedName("math/rand", "Rand", getRandIntFunctionName()) or + f.hasQualifiedName("crypto/rand", "Int") + ) + } + + private DataFlow::CallNode getARandReadCall() { + result.getTarget().hasQualifiedName("crypto/rand", "Read") + } + + /** + * Holds if taint flows in one local step from `prev` to `succ`, or + * through a binary operation such as a modulo `%` operation or an addition `+` operation. + */ + private predicate localTaintStepIncludingBinaryExpr(DataFlow::Node prev, DataFlow::Node succ) { + TaintTracking::localTaintStep(prev, succ) + or + exists(BinaryExpr b | b.getAnOperand() = prev.asExpr() | succ.asExpr() = b) + } + + /** A read from a slice with a random index. */ + private class RandSliceSanitizer extends Sanitizer, DataFlow::ElementReadNode { + RandSliceSanitizer() { + exists(DataFlow::Node randomValue, DataFlow::Node index | + randomValue = getARandIntCall().getAResult() + or + randomValue.(DataFlow::PostUpdateNode).getPreUpdateNode() = + getARandReadCall().getArgument(0) + | + localTaintStepIncludingBinaryExpr*(randomValue, index) and + this.reads(_, index) + ) + } + } +} diff --git a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll new file mode 100644 index 00000000000..73605d65b02 --- /dev/null +++ b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheck.qll @@ -0,0 +1,42 @@ +/** + * Provides a taint tracking flow for reasoning about JWT vulnerabilities. + * + * Note: for performance reasons, only import this file if `MissingJwtSignatureCheck::Config` or `MissingJwtSignatureCheck::Flow` are needed, + * otherwise `MissingJwtSignatureCheckCustomizations` should be imported instead. + */ + +import go + +/** Provides a taint-tracking flow for reasoning about JWT vulnerabilities. */ +module MissingJwtSignatureCheck { + import MissingJwtSignatureCheckCustomizations::MissingJwtSignatureCheck + + /** Config for reasoning about JWT vulnerabilities. */ + module Config implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof Source and + not SafeParse::flow(source, _) + } + + predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + any(AdditionalFlowStep s).step(nodeFrom, nodeTo) + } + } + + /** Tracks taint flow for reasoning about JWT vulnerabilities. */ + module Flow = TaintTracking::Global; + + private module SafeParseConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof Source } + + predicate isSink(DataFlow::Node sink) { sink = any(JwtSafeParse jwtParse).getTokenArg() } + + predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + any(AdditionalFlowStep s).step(nodeFrom, nodeTo) + } + } + + private module SafeParse = TaintTracking::Global; +} diff --git a/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll new file mode 100644 index 00000000000..2b048441151 --- /dev/null +++ b/go/ql/lib/semmle/go/security/MissingJwtSignatureCheckCustomizations.qll @@ -0,0 +1,57 @@ +/** + * Provides default sources, sinks, and sanitizers for reasoning about + * JWT vulnerabilities, as well as extension points for adding your own. + */ + +import go +private import semmle.go.dataflow.ExternalFlow +private import codeql.util.Unit + +/** + * Provides extension points for customizing the data-flow tracking configuration for reasoning + * about JWT vulnerabilities. + */ +module MissingJwtSignatureCheck { + /** + * A data flow source for JWT vulnerabilities. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for JWT vulnerabilities. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for JWT vulnerabilities. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** An additional flow step for JWT vulnerabilities. */ + class AdditionalFlowStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a flow + * step for configurations related to JWT vulnerabilities. + */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); + } + + /** A function that parses and correctly validates a JWT token. */ + abstract class JwtSafeParse extends Function { + /** Gets the position of the JWT argument in a call to this function. */ + abstract int getTokenArgNum(); + + /** Gets the JWT argument of a call to this function. */ + DataFlow::Node getTokenArg() { + this.getTokenArgNum() != -1 and result = this.getACall().getArgument(this.getTokenArgNum()) + or + this.getTokenArgNum() = -1 and result = this.getACall().getReceiver() + } + } + + private class DefaultSource extends Source instanceof UntrustedFlowSource { } + + private class DefaultSink extends Sink { + DefaultSink() { sinkNode(this, "jwt") } + } +} diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index 66533a629f2..d95165a3a34 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 0.7.9 + +### New Queries + +* The query "Missing JWT signature check" (`go/missing-jwt-signature-check`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @am0o0](https://github.com/github/codeql/pull/14075). + +### Major Analysis Improvements + +* The query "Use of a hardcoded key for signing JWT" (`go/hardcoded-key`) has been promoted from experimental to the main query pack. Its results will now appear by default as part of `go/hardcoded-credentials`. This query was originally [submitted as an experimental query by @porcupineyhairs](https://github.com/github/codeql/pull/9378). + ## 0.7.8 No user-facing changes. diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp new file mode 100644 index 00000000000..e4ba5f6acd3 --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.qhelp @@ -0,0 +1,25 @@ + + + +

    Applications decoding a JSON Web Token (JWT) may be vulnerable when the + signature is not correctly verified.

    +
    + +

    Always verify the signature by using the appropriate methods provided by the JWT + library, or use a library that verifies it by default.

    +
    + +

    The following (bad) example shows a case where a JWT is parsed without verifying the + signature.

    + +

    The following (good) example uses the appropriate function for parsing a JWT + and verifying its signature.

    + +
    + +
  • JWT IO: Introduction to JSON Web Tokens.
  • +
  • jwt-go: Documentation.
  • +
  • Go JOSE: Documentation.
  • +
    + +
    \ No newline at end of file diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql new file mode 100644 index 00000000000..de3668f2d44 --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheck.ql @@ -0,0 +1,21 @@ +/** + * @name Missing JWT signature check + * @description Failing to check the JSON Web Token (JWT) signature may allow an attacker to forge their own tokens. + * @kind path-problem + * @problem.severity error + * @security-severity 7.8 + * @precision high + * @id go/missing-jwt-signature-check + * @tags security + * external/cwe/cwe-347 + */ + +import go +import semmle.go.security.MissingJwtSignatureCheck +import MissingJwtSignatureCheck::Flow::PathGraph + +from MissingJwtSignatureCheck::Flow::PathNode source, MissingJwtSignatureCheck::Flow::PathNode sink +where MissingJwtSignatureCheck::Flow::flowPath(source, sink) +select sink.getNode(), source, sink, + "This JWT is parsed without verification and received from $@.", source.getNode(), + "this user-controlled source" diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckBad.go b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckBad.go new file mode 100644 index 00000000000..4fad1c57ebe --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckBad.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" + "log" + + "github.com/golang-jwt/jwt/v5" +) + +type User struct{} + +func decodeJwt(token string) { + // BAD: JWT is only decoded without signature verification + fmt.Println("only decoding JWT") + DecodedToken, _, err := jwt.NewParser().ParseUnverified(token, &User{}) + if claims, ok := DecodedToken.Claims.(*User); ok { + fmt.Printf("DecodedToken:%v\n", claims) + } else { + log.Fatal("error", err) + } +} diff --git a/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckGood.go b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckGood.go new file mode 100644 index 00000000000..699a20c3278 --- /dev/null +++ b/go/ql/src/Security/CWE-347/MissingJwtSignatureCheckGood.go @@ -0,0 +1,22 @@ +package main + +import ( + "fmt" + "log" + + "github.com/golang-jwt/jwt/v5" +) + +type User struct{} + +func parseJwt(token string, jwtKey []byte) { + // GOOD: JWT is parsed with signature verification using jwtKey + DecodedToken, err := jwt.ParseWithClaims(token, &User{}, func(token *jwt.Token) (interface{}, error) { + return jwtKey, nil + }) + if claims, ok := DecodedToken.Claims.(*User); ok && DecodedToken.Valid && !err { + fmt.Printf("DecodedToken:%v\n", claims) + } else { + log.Fatal(err) + } +} diff --git a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql index 8ccb6521d38..c0c623b50b9 100644 --- a/go/ql/src/Security/CWE-798/HardcodedCredentials.ql +++ b/go/ql/src/Security/CWE-798/HardcodedCredentials.ql @@ -14,6 +14,7 @@ */ import go +import semmle.go.security.HardcodedCredentials import semmle.go.security.SensitiveActions /** @@ -31,22 +32,34 @@ predicate isSensitive(DataFlow::Node sink, SensitiveExpr::Classification type) { ) } -from DataFlow::Node source, string message, DataFlow::Node sink, SensitiveExpr::Classification type -where +predicate sensitiveAssignment( + DataFlow::Node source, DataFlow::Node sink, SensitiveExpr::Classification type +) { exists(string val | val = source.getStringValue() and val != "" | - isSensitive(sink, type) and DataFlow::localFlow(source, sink) and + isSensitive(sink, type) and // allow obvious dummy/test values not PasswordHeuristics::isDummyPassword(val) and not sink.asExpr().(Ident).getName().regexpMatch(HeuristicNames::notSensitive()) - ) and + ) +} + +predicate hardcodedPrivateKey(DataFlow::Node node, SensitiveExpr::Classification type) { + node.getStringValue() + .regexpMatch("(?s)-+BEGIN\\b.*\\bPRIVATE KEY-+.+-+END\\b.*\\bPRIVATE KEY-+\n?") and + type = SensitiveExpr::certificate() +} + +from DataFlow::Node source, string message, DataFlow::Node sink, SensitiveExpr::Classification type +where + sensitiveAssignment(source, sink, type) and message = "Hard-coded $@." or - source - .getStringValue() - .regexpMatch("(?s)-+BEGIN\\b.*\\bPRIVATE KEY-+.+-+END\\b.*\\bPRIVATE KEY-+\n?") and - (source.asExpr() instanceof StringLit or source.asExpr() instanceof AddExpr) and - sink = source and - type = SensitiveExpr::certificate() and + hardcodedPrivateKey(source, type) and + source = sink and message = "Hard-coded private key." + or + HardcodedCredentials::Flow::flow(source, sink) and + type = SensitiveExpr::password() and + message = "Hard-coded credential." select sink, message, source, type.toString() diff --git a/go/ql/src/change-notes/released/0.7.9.md b/go/ql/src/change-notes/released/0.7.9.md new file mode 100644 index 00000000000..de35187b0fb --- /dev/null +++ b/go/ql/src/change-notes/released/0.7.9.md @@ -0,0 +1,9 @@ +## 0.7.9 + +### New Queries + +* The query "Missing JWT signature check" (`go/missing-jwt-signature-check`) has been promoted from experimental to the main query pack. Its results will now appear by default. This query was originally [submitted as an experimental query by @am0o0](https://github.com/github/codeql/pull/14075). + +### Major Analysis Improvements + +* The query "Use of a hardcoded key for signing JWT" (`go/hardcoded-key`) has been promoted from experimental to the main query pack. Its results will now appear by default as part of `go/hardcoded-credentials`. This query was originally [submitted as an experimental query by @porcupineyhairs](https://github.com/github/codeql/pull/9378). diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index b6b12196b26..576395f3405 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.7.8 +lastReleaseVersion: 0.7.9 diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeys.qhelp b/go/ql/src/experimental/CWE-321/HardcodedKeys.qhelp deleted file mode 100644 index ddbb4572eae..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeys.qhelp +++ /dev/null @@ -1,50 +0,0 @@ - - - -

    - A JSON Web Token (JWT) is used for authenticating and managing users in an application. -

    -

    - Using a hard-coded secret key for signing JWT tokens in open source projects - can leave the application using the token vulnerable to authentication bypasses. -

    - -

    - A JWT token is safe for enforcing authentication and access control as long as it can't be forged by a malicious actor. However, when a project exposes this secret publicly, these seemingly unforgeable tokens can now be easily forged. - Since the authentication as well as access control is typically enforced through these JWT tokens, an attacker armed with the secret can create a valid authentication token for any user and may even gain access to other privileged parts of the application. -

    - -
    - - -

    - Generating a cryptographically secure secret key during application initialization and using this generated key for future JWT signing requests can prevent this vulnerability. -

    - -
    - - -

    - The following code uses a hard-coded string as a secret for signing the tokens. In this case, an attacker can very easily forge a token by using the hard-coded secret. -

    - - - -
    - - -

    - In the following case, the application uses a programatically generated string as a secret for signing the tokens. In this case, since the secret can't be predicted, the code is secure. A function like `GenerateCryptoString` can be run to generate a secure secret key at the time of application installation/initialization. This generated key can then be used for all future signing requests. -

    - - - -
    - -
  • - CVE-2022-0664: - Use of Hard-coded Cryptographic Key in Go github.com/gravitl/netmaker prior to 0.8.5,0.9.4,0.10.0,0.10.1. -
  • -
    - -
    \ No newline at end of file diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeys.ql b/go/ql/src/experimental/CWE-321/HardcodedKeys.ql deleted file mode 100644 index 9e51b1e2ae6..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeys.ql +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @name Use of a hardcoded key for signing JWT - * @description Using a fixed hardcoded key for signing JWT's can allow an attacker to compromise security. - * @kind path-problem - * @problem.severity error - * @id go/hardcoded-key - * @tags security - * experimental - * external/cwe/cwe-321 - */ - -import go -import HardcodedKeysLib -import HardcodedKeys::Flow::PathGraph - -from HardcodedKeys::Flow::PathNode source, HardcodedKeys::Flow::PathNode sink -where HardcodedKeys::Flow::flowPath(source, sink) -select sink.getNode(), source, sink, "$@ is used to sign a JWT token.", source.getNode(), - "Hardcoded String" diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeysBad.go b/go/ql/src/experimental/CWE-321/HardcodedKeysBad.go deleted file mode 100644 index 1bdc1a1c1a4..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeysBad.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import "time" - -func bad() { - mySigningKey := []byte("AllYourBase") - - claims := &jwt.RegisteredClaims{ - ExpiresAt: jwt.NewNumericDate(time.Unix(1516239022, 0)), - Issuer: "test", - } - - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - ss, err := token.SignedString(mySigningKey) -} diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeysGood.go b/go/ql/src/experimental/CWE-321/HardcodedKeysGood.go deleted file mode 100644 index 21328f9a7e8..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeysGood.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "math/big" - "time" -) - -func GenerateCryptoString(n int) (string, error) { - const chars = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-" - ret := make([]byte, n) - for i := range ret { - num, err := crand.Int(crand.Reader, big.NewInt(int64(len(chars)))) - if err != nil { - return "", err - } - ret[i] = chars[num.Int64()] - } - return string(ret), nil -} - -func good() { - mySigningKey := GenerateCryptoString(64) - - claims := &jwt.RegisteredClaims{ - ExpiresAt: jwt.NewNumericDate(time.Unix(1516239022, 0)), - Issuer: "test", - } - - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - ss, err := token.SignedString(mySigningKey) -} diff --git a/go/ql/src/experimental/CWE-321/HardcodedKeysLib.qll b/go/ql/src/experimental/CWE-321/HardcodedKeysLib.qll deleted file mode 100644 index 99aa37918a3..00000000000 --- a/go/ql/src/experimental/CWE-321/HardcodedKeysLib.qll +++ /dev/null @@ -1,389 +0,0 @@ -/** - * Provides default sources, sinks and sanitizers for reasoning about - * JWT token signing vulnerabilities as well as extension points - * for adding your own. - */ - -import go -import StringOps - -/** - * Provides default sources, sinks and sanitizers for reasoning about - * JWT token signing vulnerabilities as well as extension points - * for adding your own. - */ -module HardcodedKeys { - /** - * A data flow source for JWT token signing vulnerabilities. - */ - abstract class Source extends DataFlow::Node { } - - /** - * A data flow sink for JWT token signing vulnerabilities. - */ - abstract class Sink extends DataFlow::Node { } - - /** - * A sanitizer for JWT token signing vulnerabilities. - */ - abstract class Sanitizer extends DataFlow::Node { } - - private predicate isTestCode(Expr e) { - e.getFile().getAbsolutePath().toLowerCase().matches("%test%") and - not e.getFile().getAbsolutePath().toLowerCase().matches("%ql/test%") - } - - private predicate isDemoCode(Expr e) { - e.getFile().getAbsolutePath().toLowerCase().matches(["%mock%", "%demo%", "%example%"]) - } - - /** - * A hardcoded string literal as a source for JWT token signing vulnerabilities. - */ - private class HardcodedStringSource extends Source { - HardcodedStringSource() { - this.asExpr() instanceof StringLit and - not (isTestCode(this.asExpr()) or isDemoCode(this.asExpr())) - } - } - - /** - * An expression used to sign JWT tokens as a sink for JWT token signing vulnerabilities. - */ - private class GolangJwtSign extends Sink { - GolangJwtSign() { - exists(string pkg | - pkg = - [ - "github.com/golang-jwt/jwt/v4", "github.com/dgrijalva/jwt-go", - "github.com/form3tech-oss/jwt-go", "github.com/ory/fosite/token/jwt" - ] - | - exists(DataFlow::MethodCallNode m | - // Models the `SignedString` method - // `func (t *Token) SignedString(key interface{}) (string, error)` - m.getTarget().hasQualifiedName(pkg, "Token", "SignedString") and - this = m.getArgument(0) - or - // Model the `Sign` method of the `SigningMethod` interface - // type SigningMethod interface { - // Verify(signingString, signature string, key interface{}) error - // Sign(signingString string, key interface{}) (string, error) - // Alg() string - // } - m.getTarget().hasQualifiedName(pkg, "SigningMethod", "Sign") and - this = m.getArgument(1) - ) - ) - } - } - - private class KatarasJwt extends Sink { - KatarasJwt() { - exists(string pkg | - pkg = package("github.com/kataras/jwt", "") and - ( - exists(DataFlow::MethodCallNode m | - // Model the `Register` method of the type `Keys` - // func (keys Keys) Register(alg Alg, kid string, pubKey PublicKey, privKey PrivateKey) - m.getTarget().hasQualifiedName(pkg, "Keys", "Register") - | - this = m.getArgument(3) - ) - or - exists(DataFlow::CallNode m, string names | - // Model the `Sign` method of the `SigningMethod` interface - // func Sign(alg Alg, key PrivateKey, claims interface{}, opts ...SignOption) ([]byte, error) - // func SignEncrypted(alg Alg, key PrivateKey, encrypt InjectFunc, claims interface{}, ...) ([]byte, error) - // func SignEncryptedWithHeader(alg Alg, key PrivateKey, encrypt InjectFunc, claims interface{}, ...) ([]byte, error) - // func SignWithHeader(alg Alg, key PrivateKey, claims interface{}, customHeader interface{}, ...) ([]byte, error) - m.getTarget().hasQualifiedName(pkg, names) and - names = ["Sign", "SignEncrypted", "SignEncryptedWithHeader", "SignWithHeader"] - | - this = m.getArgument(1) - ) - ) - ) - } - } - - private class IrisJwt extends Sink { - IrisJwt() { - exists(string pkg | - pkg = "github.com/kataras/iris/v12/middleware/jwt" and - ( - exists(DataFlow::CallNode m | - //func NewSigner(signatureAlg Alg, signatureKey interface{}, maxAge time.Duration) *Signer - m.getTarget().hasQualifiedName(pkg, "NewSigner") - | - this = m.getArgument(1) - ) - or - exists(Field f | - // Models the `key` field of the `Signer` type - // https://github.com/kataras/iris/blob/dccd57263617f5ca95d7621acfadf9dd37752dd6/middleware/jwt/signer.go#L17 - f.hasQualifiedName(pkg, "Signer", "Key") and - f.getAWrite().getRhs() = this - ) - ) - ) - } - } - - private class GogfJwtSign extends Sink { - GogfJwtSign() { - exists(Field f, string pkg | - pkg = package("github.com/gogf/gf-jwt", "") and - // https://github.com/gogf/gf-jwt/blob/40503f05bc0a2bcd7aeba550163112afbb5c221f/auth_jwt.go#L27 - f.hasQualifiedName(pkg, "GfJWTMiddleware", "Key") and - f.getAWrite().getRhs() = this - ) - } - } - - private class GinJwtSign extends Sink { - GinJwtSign() { - exists(Field f | - // https://pkg.go.dev/github.com/appleboy/gin-jwt/v2#GinJWTMiddleware - f.hasQualifiedName("github.com/appleboy/gin-jwt/v2", "GinJWTMiddleware", "Key") and - f.getAWrite().getRhs() = this - ) - } - } - - private class SquareJoseKey extends Sink { - SquareJoseKey() { - exists(Field f, string pkg | - // type Recipient struct { - // Algorithm KeyAlgorithm - // Key interface{} - // KeyID string - // PBES2Count int - // PBES2Salt []byte - // } - // type SigningKey struct { - // Algorithm SignatureAlgorithm - // Key interface{} - // } - f.hasQualifiedName(pkg, ["Recipient", "SigningKey"], "Key") and - f.getAWrite().getRhs() = this - | - pkg = ["github.com/square/go-jose/v3", "gopkg.in/square/go-jose.v2"] - ) - } - } - - private class CrystalHqJwtSigner extends Sink { - CrystalHqJwtSigner() { - exists(DataFlow::CallNode m | - // `func NewSignerHS(alg Algorithm, key []byte) (Signer, error)` - m.getTarget().hasQualifiedName("github.com/cristalhq/jwt/v3", "NewSignerHS") - | - this = m.getArgument(1) - ) - } - } - - private class GoKitJwt extends Sink { - GoKitJwt() { - exists(DataFlow::CallNode m | - // `func NewSigner(kid string, key []byte, method jwt.SigningMethod, claims jwt.Claims) endpoint.Middleware` - m.getTarget().hasQualifiedName("github.com/go-kit/kit/auth/jwt", "NewSigner") - | - this = m.getArgument(1) - ) - } - } - - private class LestrratJwk extends Sink { - LestrratJwk() { - exists(DataFlow::CallNode m, string pkg | - pkg.matches([ - "github.com/lestrrat-go/jwx", "github.com/lestrrat/go-jwx/jwk", - "github.com/lestrrat-go/jwx%/jwk" - ]) and - // `func New(key interface{}) (Key, error)` - m.getTarget().hasQualifiedName(pkg, "New") - | - this = m.getArgument(0) - ) - } - } - - /** - * Sanitizes any other use of an operand to a comparison, on the assumption that this may filter - * out special constant values -- for example, in context `if key != "invalid_key" { ... }`, - * if `"invalid_key"` is indeed the only dangerous key then guarded uses of `key` are likely - * to be safe. - * - * TODO: Before promoting this query look at replacing this with something more principled. - */ - private class CompareExprSanitizer extends Sanitizer { - CompareExprSanitizer() { - exists(ComparisonExpr c | - c.getAnOperand().getGlobalValueNumber() = this.asExpr().getGlobalValueNumber() and - not this.asExpr() instanceof Literal - ) - } - } - - /** - * Marks anything returned with an error as a sanitized. - * - * Typically this means contexts like `return "", errors.New("Oh no")`, - * where we can be reasonably confident downstream users won't mistake - * that empty string for a usable key. - */ - private class ReturnedAlongsideErrorSanitizer extends Sanitizer { - ReturnedAlongsideErrorSanitizer() { - exists(ReturnStmt r, DataFlow::CallNode c | - c.getTarget().hasQualifiedName("errors", "New") and - r.getNumChild() > 1 and - r.getAChild() = c.getAResult().getASuccessor*().asExpr() and - r.getAChild() = this.asExpr() - ) - } - } - - /** - * Marks anything returned alongside an error-value that is known - * to be non-nil by virtue of a guarding check as harmless. - * - * For example, `if err != nil { return "", err }` is unlikely to be - * contributing a dangerous hardcoded key. - */ - private class ReturnedAlongsideErrorSanitizerGuard extends Sanitizer { - ReturnedAlongsideErrorSanitizerGuard() { - exists(ControlFlow::ConditionGuardNode guard, SsaWithFields errorVar, ReturnStmt r | - guard.ensuresNeq(errorVar.getAUse(), Builtin::nil().getARead()) and - guard.dominates(this.getBasicBlock()) and - r.getExpr(1) = errorVar.getAUse().asExpr() and - this.asExpr() = r.getExpr(0) - ) - } - } - - /** Mark any formatting string call as a sanitizer */ - private class FormattingSanitizer extends Sanitizer { - FormattingSanitizer() { exists(Formatting::StringFormatCall s | s.getAResult() = this) } - } - - private string getRandIntFunctionName() { - result = - [ - "ExpFloat64", "Float32", "Float64", "Int", "Int31", "Int31n", "Int63", "Int63n", "Intn", - "NormFloat64", "Uint32", "Uint64" - ] - } - - private DataFlow::CallNode getARandIntCall() { - result.getTarget().hasQualifiedName("math/rand", getRandIntFunctionName()) or - result.getTarget().(Method).hasQualifiedName("math/rand", "Rand", getRandIntFunctionName()) or - result.getTarget().hasQualifiedName("crypto/rand", "Int") - } - - private DataFlow::CallNode getARandReadCall() { - result.getTarget().hasQualifiedName("crypto/rand", "Read") - } - - /** - * Mark any taint arising from a read on a tainted slice with a random index as a - * sanitizer for all instances of the taint - */ - private class RandSliceSanitizer extends Sanitizer { - RandSliceSanitizer() { - exists(DataFlow::Node randomValue, DataFlow::Node index | - // Sanitize flows like this: - // func GenerateCryptoString(n int) (string, error) { - // const chars = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-" - // ret := make([]byte, n) - // for i := range ret { - // num, err := crand.Int(crand.Reader, big.NewInt(int64(len(chars)))) - // if err != nil { - // return "", err - // } - // ret[i] = chars[num.Int64()] - // } - // return string(ret), nil - // } - randomValue = getARandIntCall().getAResult() - or - // Sanitize flows like : - // func GenerateRandomString(size int) string { - // var bytes = make([]byte, size) - // rand.Read(bytes) - // for i, x := range bytes { - // bytes[i] = characters[x%byte(len(characters))] - // } - // return string(bytes) - // } - randomValue = - any(DataFlow::PostUpdateNode pun | - pun.getPreUpdateNode() = getARandReadCall().getArgument(0) - ) - | - TaintTracking::localTaint(randomValue, index) and - this.(DataFlow::ElementReadNode).reads(_, index) - ) - } - } - - /** - * Models flow from a call to `Int64` if the receiver is tainted - */ - private class BigIntFlow extends TaintTracking::FunctionModel { - BigIntFlow() { this.(Method).hasQualifiedName("math/big", "Int", "Int64") } - - override predicate hasTaintFlow(DataFlow::FunctionInput inp, DataFlow::FunctionOutput outp) { - inp.isReceiver() and - outp.isResult(0) - } - } - - /* - * Models taint flow through a binary operation such as a - * modulo `%` operation or an addition `+` operation - */ - - private class BinExpAdditionalTaintStep extends TaintTracking::AdditionalTaintStep { - // This is required to model the sanitizers for the `HardcodedKeys` query. - // This is required to correctly detect a sanitizer such as the one shown below. - // func GenerateRandomString(size int) string { - // var bytes = make([]byte, size) - // rand.Read(bytes) - // for i, x := range bytes { - // bytes[i] = characters[x%byte(len(characters))] - // } - // return string(bytes) - // } - override predicate step(DataFlow::Node prev, DataFlow::Node succ) { - exists(BinaryExpr b | b.getAnOperand() = prev.asExpr() | succ.asExpr() = b) - } - } - - /** - * DEPRECATED: Use `Flow` instead. - * - * A configuration depicting taint flow for studying JWT token signing vulnerabilities. - */ - deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "Hard-coded JWT Signing Key" } - - override predicate isSource(DataFlow::Node source) { source instanceof Source } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizer(DataFlow::Node sanitizer) { sanitizer instanceof Sanitizer } - } - - private module Config implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof Source } - - predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } - } - - /** Tracks taint flow for reasoning about JWT token signing vulnerabilities. */ - module Flow = TaintTracking::Global; -} diff --git a/go/ql/src/experimental/CWE-347/Example.go b/go/ql/src/experimental/CWE-347/Example.go deleted file mode 100644 index ee59d836439..00000000000 --- a/go/ql/src/experimental/CWE-347/Example.go +++ /dev/null @@ -1,39 +0,0 @@ -package main - -import ( - "fmt" - "log" - - "github.com/golang-jwt/jwt/v5" -) - -func main() { - // BAD: only decode jwt without verification - notVerifyJWT(token) - - // GOOD: decode with verification or verify plus decode - notVerifyJWT(token) - VerifyJWT(token) -} - -func notVerifyJWT(signedToken string) { - fmt.Println("only decoding JWT") - DecodedToken, _, err := jwt.NewParser().ParseUnverified(signedToken, &CustomerInfo{}) - if claims, ok := DecodedToken.Claims.(*CustomerInfo); ok { - fmt.Printf("DecodedToken:%v\n", claims) - } else { - log.Fatal("error", err) - } -} -func LoadJwtKey(token *jwt.Token) (interface{}, error) { - return ARandomJwtKey, nil -} -func verifyJWT(signedToken string) { - fmt.Println("verifying JWT") - DecodedToken, err := jwt.ParseWithClaims(signedToken, &CustomerInfo{}, LoadJwtKey) - if claims, ok := DecodedToken.Claims.(*CustomerInfo); ok && DecodedToken.Valid { - fmt.Printf("NAME:%v ,ID:%v\n", claims.Name, claims.ID) - } else { - log.Fatal(err) - } -} diff --git a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.qhelp b/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.qhelp deleted file mode 100644 index cb1edb2f659..00000000000 --- a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.qhelp +++ /dev/null @@ -1,34 +0,0 @@ - - - -

    - A JSON Web Token (JWT) is used for authenticating and managing users in an application. -

    -

    - Only Decoding JWTs without checking if they have a valid signature or not can lead to security vulnerabilities. -

    - -
    - - -

    - Don't use methods that only decode JWT, Instead use methods that verify the signature of JWT. -

    - -
    - - -

    - In the following code you can see an Example from a popular Library. -

    - - - -
    - -
  • - JWT audience claim is not verified -
  • -
    - -
    \ No newline at end of file diff --git a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.ql b/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.ql deleted file mode 100644 index fb457c2f449..00000000000 --- a/go/ql/src/experimental/CWE-347/ParseJWTWithoutVerification.ql +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @name Use of JWT Methods that only decode user provided Token - * @description Using JWT methods without verification can cause to authorization or authentication bypass - * @kind path-problem - * @problem.severity error - * @id go/parse-jwt-without-verification - * @tags security - * experimental - * external/cwe/cwe-347 - */ - -import go -import experimental.frameworks.JWT - -module WithValidationConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source instanceof UntrustedFlowSource } - - predicate isSink(DataFlow::Node sink) { - sink = any(JwtParse jwtParse).getTokenArg() or - sink = any(JwtParseWithKeyFunction jwtParseWithKeyFunction).getTokenArg() - } - - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - golangJwtIsAdditionalFlowStep(nodeFrom, nodeTo) - or - goJoseIsAdditionalFlowStep(nodeFrom, nodeTo) - } -} - -module NoValidationConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - source instanceof UntrustedFlowSource and - not WithValidation::flow(source, _) - } - - predicate isSink(DataFlow::Node sink) { - sink = any(JwtUnverifiedParse parseUnverified).getTokenArg() - } - - predicate isAdditionalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - golangJwtIsAdditionalFlowStep(nodeFrom, nodeTo) - or - goJoseIsAdditionalFlowStep(nodeFrom, nodeTo) - } -} - -module WithValidation = TaintTracking::Global; - -module NoValidation = TaintTracking::Global; - -import NoValidation::PathGraph - -from NoValidation::PathNode source, NoValidation::PathNode sink -where NoValidation::flowPath(source, sink) -select sink.getNode(), source, sink, - "This JWT is parsed without verification and received from $@.", source.getNode(), - "this user-controlled source" diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 81654540219..e601e8088ce 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 0.7.8 +version: 0.7.9 groups: - go - queries diff --git a/go/ql/test/experimental/CWE-090/LDAPInjection.expected b/go/ql/test/experimental/CWE-090/LDAPInjection.expected index 8e1165fab60..2815643c014 100644 --- a/go/ql/test/experimental/CWE-090/LDAPInjection.expected +++ b/go/ql/test/experimental/CWE-090/LDAPInjection.expected @@ -1,24 +1,24 @@ edges -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:59:3:59:11 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:61:3:61:51 | ...+... | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:3:62:33 | slice literal | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:24:62:32 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:66:3:66:11 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:68:3:68:51 | ...+... | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:3:69:33 | slice literal | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:24:69:32 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:73:3:73:11 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:75:3:75:51 | ...+... | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:3:76:33 | slice literal | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:24:76:32 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:80:22:80:30 | untrusted | -| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:81:25:81:33 | untrusted | -| LDAPInjection.go:62:3:62:33 | slice literal [array] | LDAPInjection.go:62:3:62:33 | slice literal | -| LDAPInjection.go:62:24:62:32 | untrusted | LDAPInjection.go:62:3:62:33 | slice literal [array] | -| LDAPInjection.go:69:3:69:33 | slice literal [array] | LDAPInjection.go:69:3:69:33 | slice literal | -| LDAPInjection.go:69:24:69:32 | untrusted | LDAPInjection.go:69:3:69:33 | slice literal [array] | -| LDAPInjection.go:76:3:76:33 | slice literal [array] | LDAPInjection.go:76:3:76:33 | slice literal | -| LDAPInjection.go:76:24:76:32 | untrusted | LDAPInjection.go:76:3:76:33 | slice literal [array] | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:59:3:59:11 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:61:3:61:51 | ...+... | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:3:62:33 | slice literal | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:62:24:62:32 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:66:3:66:11 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:68:3:68:51 | ...+... | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:3:69:33 | slice literal | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:69:24:69:32 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:73:3:73:11 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:75:3:75:51 | ...+... | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:3:76:33 | slice literal | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:76:24:76:32 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:80:22:80:30 | untrusted | provenance | | +| LDAPInjection.go:57:15:57:29 | call to UserAgent | LDAPInjection.go:81:25:81:33 | untrusted | provenance | | +| LDAPInjection.go:62:3:62:33 | slice literal [array] | LDAPInjection.go:62:3:62:33 | slice literal | provenance | | +| LDAPInjection.go:62:24:62:32 | untrusted | LDAPInjection.go:62:3:62:33 | slice literal [array] | provenance | | +| LDAPInjection.go:69:3:69:33 | slice literal [array] | LDAPInjection.go:69:3:69:33 | slice literal | provenance | | +| LDAPInjection.go:69:24:69:32 | untrusted | LDAPInjection.go:69:3:69:33 | slice literal [array] | provenance | | +| LDAPInjection.go:76:3:76:33 | slice literal [array] | LDAPInjection.go:76:3:76:33 | slice literal | provenance | | +| LDAPInjection.go:76:24:76:32 | untrusted | LDAPInjection.go:76:3:76:33 | slice literal [array] | provenance | | nodes | LDAPInjection.go:57:15:57:29 | call to UserAgent | semmle.label | call to UserAgent | | LDAPInjection.go:59:3:59:11 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected index c7618b3108f..e00daf0294f 100644 --- a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected +++ b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected @@ -1,412 +1,412 @@ edges -| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:21:15:21 | c | -| CookieWithoutHttpOnly.go:12:10:12:18 | "session" | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:21:15:21 | c | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:21:15:21 | c | -| CookieWithoutHttpOnly.go:15:21:15:21 | c | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:20:13:20:21 | "session" | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | -| CookieWithoutHttpOnly.go:22:13:22:17 | false | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | -| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:29:13:29:21 | "session" | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | -| CookieWithoutHttpOnly.go:31:13:31:16 | true | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | -| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:38:10:38:18 | "session" | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | -| CookieWithoutHttpOnly.go:41:15:41:18 | true | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | -| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:47:10:47:18 | "session" | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | -| CookieWithoutHttpOnly.go:50:15:50:19 | false | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | -| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:55:2:55:4 | definition of val | CookieWithoutHttpOnly.go:59:13:59:15 | val | -| CookieWithoutHttpOnly.go:55:9:55:13 | false | CookieWithoutHttpOnly.go:59:13:59:15 | val | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:57:13:57:21 | "session" | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | -| CookieWithoutHttpOnly.go:59:13:59:15 | val | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | -| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:65:2:65:4 | definition of val | CookieWithoutHttpOnly.go:69:13:69:15 | val | -| CookieWithoutHttpOnly.go:65:9:65:12 | true | CookieWithoutHttpOnly.go:69:13:69:15 | val | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:67:13:67:21 | "session" | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | -| CookieWithoutHttpOnly.go:69:13:69:15 | val | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | -| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:75:2:75:4 | definition of val | CookieWithoutHttpOnly.go:80:15:80:17 | val | -| CookieWithoutHttpOnly.go:75:9:75:12 | true | CookieWithoutHttpOnly.go:80:15:80:17 | val | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:77:10:77:18 | "session" | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | -| CookieWithoutHttpOnly.go:80:15:80:17 | val | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | -| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:85:2:85:4 | definition of val | CookieWithoutHttpOnly.go:90:15:90:17 | val | -| CookieWithoutHttpOnly.go:85:9:85:13 | false | CookieWithoutHttpOnly.go:90:15:90:17 | val | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:87:10:87:18 | "session" | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | -| CookieWithoutHttpOnly.go:90:15:90:17 | val | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | -| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:21:100:21 | c | -| CookieWithoutHttpOnly.go:99:15:99:19 | false | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:21:100:21 | c | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:21:100:21 | c | -| CookieWithoutHttpOnly.go:100:21:100:21 | c | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:104:10:104:18 | "session" | CookieWithoutHttpOnly.go:106:10:106:13 | name | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:106:10:106:13 | name | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | -| CookieWithoutHttpOnly.go:109:15:109:19 | false | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | -| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:114:13:114:24 | "login_name" | CookieWithoutHttpOnly.go:116:10:116:16 | session | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:116:10:116:16 | session | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | -| CookieWithoutHttpOnly.go:119:15:119:19 | false | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | -| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:126:16:126:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:134:16:134:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:146:16:146:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:158:16:158:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:170:16:170:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:183:16:183:20 | store | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:195:16:195:20 | store | -| CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | CookieWithoutHttpOnly.go:129:2:129:8 | session | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:133:2:133:9 | definition of httpOnly | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | -| CookieWithoutHttpOnly.go:133:14:133:18 | false | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:20:140:2 | &... | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | -| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | -| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | -| CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | -| CookieWithoutHttpOnly.go:149:2:149:8 | session | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | session | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:20:151:2 | &... | -| CookieWithoutHttpOnly.go:149:21:151:2 | struct literal | CookieWithoutHttpOnly.go:149:20:151:2 | &... | -| CookieWithoutHttpOnly.go:157:2:157:9 | definition of httpOnly | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | -| CookieWithoutHttpOnly.go:157:14:157:17 | true | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:20:164:2 | &... | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | -| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | -| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | -| CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | -| CookieWithoutHttpOnly.go:169:56:169:63 | argument corresponding to httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | -| CookieWithoutHttpOnly.go:169:56:169:63 | definition of httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:20:176:2 | &... | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | -| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | -| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | -| CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | -| CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | CookieWithoutHttpOnly.go:191:19:191:25 | session | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | -| CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | CookieWithoutHttpOnly.go:202:19:202:25 | session | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | +| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | +| CookieWithoutHttpOnly.go:12:10:12:18 | "session" | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | +| CookieWithoutHttpOnly.go:15:21:15:21 | c | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:20:13:20:21 | "session" | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:22:13:22:17 | false | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | +| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:29:13:29:21 | "session" | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:31:13:31:16 | true | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | +| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:38:10:38:18 | "session" | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:41:15:41:18 | true | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | +| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:47:10:47:18 | "session" | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:50:15:50:19 | false | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | +| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:55:2:55:4 | definition of val | CookieWithoutHttpOnly.go:59:13:59:15 | val | provenance | | +| CookieWithoutHttpOnly.go:55:9:55:13 | false | CookieWithoutHttpOnly.go:59:13:59:15 | val | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:57:13:57:21 | "session" | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:59:13:59:15 | val | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | +| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:65:2:65:4 | definition of val | CookieWithoutHttpOnly.go:69:13:69:15 | val | provenance | | +| CookieWithoutHttpOnly.go:65:9:65:12 | true | CookieWithoutHttpOnly.go:69:13:69:15 | val | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:67:13:67:21 | "session" | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:69:13:69:15 | val | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | +| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:75:2:75:4 | definition of val | CookieWithoutHttpOnly.go:80:15:80:17 | val | provenance | | +| CookieWithoutHttpOnly.go:75:9:75:12 | true | CookieWithoutHttpOnly.go:80:15:80:17 | val | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:77:10:77:18 | "session" | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:80:15:80:17 | val | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | +| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:85:2:85:4 | definition of val | CookieWithoutHttpOnly.go:90:15:90:17 | val | provenance | | +| CookieWithoutHttpOnly.go:85:9:85:13 | false | CookieWithoutHttpOnly.go:90:15:90:17 | val | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:87:10:87:18 | "session" | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:90:15:90:17 | val | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | +| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | +| CookieWithoutHttpOnly.go:99:15:99:19 | false | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | +| CookieWithoutHttpOnly.go:100:21:100:21 | c | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:104:10:104:18 | "session" | CookieWithoutHttpOnly.go:106:10:106:13 | name | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:106:10:106:13 | name | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:109:15:109:19 | false | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | +| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:114:13:114:24 | "login_name" | CookieWithoutHttpOnly.go:116:10:116:16 | session | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:116:10:116:16 | session | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:119:15:119:19 | false | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | +| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | +| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | +| CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | CookieWithoutHttpOnly.go:129:2:129:8 | session | provenance | | +| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:133:2:133:9 | definition of httpOnly | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:133:14:133:18 | false | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | session | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:20:151:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:149:21:151:2 | struct literal | CookieWithoutHttpOnly.go:149:20:151:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:157:2:157:9 | definition of httpOnly | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:157:14:157:17 | true | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:169:56:169:63 | argument corresponding to httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:169:56:169:63 | definition of httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | +| CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | CookieWithoutHttpOnly.go:191:19:191:25 | session | provenance | | +| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | provenance | | +| CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | CookieWithoutHttpOnly.go:202:19:202:25 | session | provenance | | +| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | provenance | | nodes | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | semmle.label | struct literal | | CookieWithoutHttpOnly.go:12:10:12:18 | "session" | semmle.label | "session" | diff --git a/go/ql/test/experimental/CWE-203/Timing.expected b/go/ql/test/experimental/CWE-203/Timing.expected index 05e19774dbc..b1aa5487aa9 100644 --- a/go/ql/test/experimental/CWE-203/Timing.expected +++ b/go/ql/test/experimental/CWE-203/Timing.expected @@ -1,10 +1,10 @@ edges -| timing.go:15:18:15:27 | selection of Header | timing.go:15:18:15:45 | call to Get | -| timing.go:15:18:15:45 | call to Get | timing.go:17:31:17:42 | headerSecret | -| timing.go:28:18:28:27 | selection of Header | timing.go:28:18:28:45 | call to Get | -| timing.go:28:18:28:45 | call to Get | timing.go:30:47:30:58 | headerSecret | -| timing.go:41:18:41:27 | selection of Header | timing.go:41:18:41:45 | call to Get | -| timing.go:41:18:41:45 | call to Get | timing.go:42:25:42:36 | headerSecret | +| timing.go:15:18:15:27 | selection of Header | timing.go:15:18:15:45 | call to Get | provenance | | +| timing.go:15:18:15:45 | call to Get | timing.go:17:31:17:42 | headerSecret | provenance | | +| timing.go:28:18:28:27 | selection of Header | timing.go:28:18:28:45 | call to Get | provenance | | +| timing.go:28:18:28:45 | call to Get | timing.go:30:47:30:58 | headerSecret | provenance | | +| timing.go:41:18:41:27 | selection of Header | timing.go:41:18:41:45 | call to Get | provenance | | +| timing.go:41:18:41:45 | call to Get | timing.go:42:25:42:36 | headerSecret | provenance | | nodes | timing.go:15:18:15:27 | selection of Header | semmle.label | selection of Header | | timing.go:15:18:15:45 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected b/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected index 16d32e48937..14629dfec2e 100644 --- a/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected +++ b/go/ql/test/experimental/CWE-287/ImproperLdapAuth.expected @@ -1,7 +1,7 @@ edges -| ImproperLdapAuth.go:18:18:18:24 | selection of URL | ImproperLdapAuth.go:18:18:18:32 | call to Query | -| ImproperLdapAuth.go:18:18:18:32 | call to Query | ImproperLdapAuth.go:28:23:28:34 | bindPassword | -| ImproperLdapAuth.go:87:18:87:19 | "" | ImproperLdapAuth.go:97:23:97:34 | bindPassword | +| ImproperLdapAuth.go:18:18:18:24 | selection of URL | ImproperLdapAuth.go:18:18:18:32 | call to Query | provenance | | +| ImproperLdapAuth.go:18:18:18:32 | call to Query | ImproperLdapAuth.go:28:23:28:34 | bindPassword | provenance | | +| ImproperLdapAuth.go:87:18:87:19 | "" | ImproperLdapAuth.go:97:23:97:34 | bindPassword | provenance | | nodes | ImproperLdapAuth.go:18:18:18:24 | selection of URL | semmle.label | selection of URL | | ImproperLdapAuth.go:18:18:18:32 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected b/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected index 6d1d1693ab7..5b26a2a9b36 100644 --- a/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected +++ b/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected @@ -1,8 +1,8 @@ edges -| go-jose.v3.go:13:14:13:34 | type conversion | go-jose.v3.go:24:32:24:37 | JwtKey | -| go-jose.v3.go:13:21:13:33 | "AllYourBase" | go-jose.v3.go:13:14:13:34 | type conversion | -| golang-jwt-v5.go:19:15:19:35 | type conversion | golang-jwt-v5.go:27:9:27:15 | JwtKey1 | -| golang-jwt-v5.go:19:22:19:34 | "AllYourBase" | golang-jwt-v5.go:19:15:19:35 | type conversion | +| go-jose.v3.go:13:14:13:34 | type conversion | go-jose.v3.go:24:32:24:37 | JwtKey | provenance | | +| go-jose.v3.go:13:21:13:33 | "AllYourBase" | go-jose.v3.go:13:14:13:34 | type conversion | provenance | | +| golang-jwt-v5.go:19:15:19:35 | type conversion | golang-jwt-v5.go:27:9:27:15 | JwtKey1 | provenance | | +| golang-jwt-v5.go:19:22:19:34 | "AllYourBase" | golang-jwt-v5.go:19:15:19:35 | type conversion | provenance | | nodes | go-jose.v3.go:13:14:13:34 | type conversion | semmle.label | type conversion | | go-jose.v3.go:13:21:13:33 | "AllYourBase" | semmle.label | "AllYourBase" | diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeys.expected b/go/ql/test/experimental/CWE-321/HardcodedKeys.expected deleted file mode 100644 index 873bb55b7c2..00000000000 --- a/go/ql/test/experimental/CWE-321/HardcodedKeys.expected +++ /dev/null @@ -1,126 +0,0 @@ -edges -| HardcodedKeysBad.go:11:18:11:38 | type conversion | HardcodedKeysBad.go:19:28:19:39 | mySigningKey | -| HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | HardcodedKeysBad.go:11:18:11:38 | type conversion | -| main.go:33:18:33:31 | type conversion | main.go:42:28:42:39 | mySigningKey | -| main.go:33:25:33:30 | "key1" | main.go:33:18:33:31 | type conversion | -| main.go:50:23:50:28 | "key2" | main.go:50:16:50:29 | type conversion | -| main.go:68:9:68:22 | type conversion | main.go:69:44:69:46 | key | -| main.go:68:16:68:21 | `key3` | main.go:68:9:68:22 | type conversion | -| main.go:73:9:73:22 | type conversion | main.go:74:66:74:68 | key | -| main.go:73:16:73:21 | "key4" | main.go:73:9:73:22 | type conversion | -| main.go:77:10:77:23 | type conversion | main.go:82:15:82:18 | key2 | -| main.go:77:17:77:22 | "key5" | main.go:77:10:77:23 | type conversion | -| main.go:88:9:88:22 | type conversion | main.go:92:41:92:43 | key | -| main.go:88:16:88:21 | "key6" | main.go:88:9:88:22 | type conversion | -| main.go:97:10:97:23 | type conversion | main.go:99:66:99:69 | key2 | -| main.go:97:17:97:22 | "key7" | main.go:97:10:97:23 | type conversion | -| main.go:105:9:105:22 | type conversion | main.go:110:30:110:32 | key | -| main.go:105:16:105:21 | "key8" | main.go:105:9:105:22 | type conversion | -| main.go:114:15:114:28 | type conversion | main.go:115:16:115:24 | sharedKey | -| main.go:114:22:114:27 | "key9" | main.go:114:15:114:28 | type conversion | -| main.go:118:23:118:37 | type conversion | main.go:121:16:121:30 | sharedKeyglobal | -| main.go:118:30:118:36 | "key10" | main.go:118:23:118:37 | type conversion | -| main.go:127:27:127:33 | "key11" | main.go:127:20:127:34 | type conversion | -| main.go:142:14:142:28 | type conversion | main.go:144:39:144:46 | mySecret | -| main.go:142:21:142:27 | "key12" | main.go:142:14:142:28 | type conversion | -| main.go:149:14:149:28 | type conversion | main.go:153:11:153:18 | mySecret | -| main.go:149:21:149:27 | "key13" | main.go:149:14:149:28 | type conversion | -| main.go:160:12:160:26 | type conversion | main.go:161:34:161:39 | secret | -| main.go:160:19:160:25 | "key14" | main.go:160:12:160:26 | type conversion | -| main.go:166:12:166:26 | type conversion | main.go:167:32:167:37 | secret | -| main.go:166:19:166:25 | "key15" | main.go:166:12:166:26 | type conversion | -| main.go:172:12:172:26 | type conversion | main.go:173:41:173:46 | secret | -| main.go:172:19:172:25 | "key16" | main.go:172:12:172:26 | type conversion | -| main.go:178:12:178:26 | type conversion | main.go:179:51:179:56 | secret | -| main.go:178:19:178:25 | "key17" | main.go:178:12:178:26 | type conversion | -| main.go:184:12:184:26 | type conversion | main.go:185:42:185:47 | secret | -| main.go:184:19:184:25 | "key18" | main.go:184:12:184:26 | type conversion | -| main.go:190:12:190:26 | type conversion | main.go:193:33:193:38 | secret | -| main.go:190:19:190:25 | "key19" | main.go:190:12:190:26 | type conversion | -| sanitizer.go:17:9:17:21 | type conversion | sanitizer.go:18:44:18:46 | key | -| sanitizer.go:17:16:17:20 | `key` | sanitizer.go:17:9:17:21 | type conversion | -nodes -| HardcodedKeysBad.go:11:18:11:38 | type conversion | semmle.label | type conversion | -| HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | semmle.label | "AllYourBase" | -| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | semmle.label | mySigningKey | -| main.go:33:18:33:31 | type conversion | semmle.label | type conversion | -| main.go:33:25:33:30 | "key1" | semmle.label | "key1" | -| main.go:42:28:42:39 | mySigningKey | semmle.label | mySigningKey | -| main.go:50:16:50:29 | type conversion | semmle.label | type conversion | -| main.go:50:23:50:28 | "key2" | semmle.label | "key2" | -| main.go:68:9:68:22 | type conversion | semmle.label | type conversion | -| main.go:68:16:68:21 | `key3` | semmle.label | `key3` | -| main.go:69:44:69:46 | key | semmle.label | key | -| main.go:73:9:73:22 | type conversion | semmle.label | type conversion | -| main.go:73:16:73:21 | "key4" | semmle.label | "key4" | -| main.go:74:66:74:68 | key | semmle.label | key | -| main.go:77:10:77:23 | type conversion | semmle.label | type conversion | -| main.go:77:17:77:22 | "key5" | semmle.label | "key5" | -| main.go:82:15:82:18 | key2 | semmle.label | key2 | -| main.go:88:9:88:22 | type conversion | semmle.label | type conversion | -| main.go:88:16:88:21 | "key6" | semmle.label | "key6" | -| main.go:92:41:92:43 | key | semmle.label | key | -| main.go:97:10:97:23 | type conversion | semmle.label | type conversion | -| main.go:97:17:97:22 | "key7" | semmle.label | "key7" | -| main.go:99:66:99:69 | key2 | semmle.label | key2 | -| main.go:105:9:105:22 | type conversion | semmle.label | type conversion | -| main.go:105:16:105:21 | "key8" | semmle.label | "key8" | -| main.go:110:30:110:32 | key | semmle.label | key | -| main.go:114:15:114:28 | type conversion | semmle.label | type conversion | -| main.go:114:22:114:27 | "key9" | semmle.label | "key9" | -| main.go:115:16:115:24 | sharedKey | semmle.label | sharedKey | -| main.go:118:23:118:37 | type conversion | semmle.label | type conversion | -| main.go:118:30:118:36 | "key10" | semmle.label | "key10" | -| main.go:121:16:121:30 | sharedKeyglobal | semmle.label | sharedKeyglobal | -| main.go:127:20:127:34 | type conversion | semmle.label | type conversion | -| main.go:127:27:127:33 | "key11" | semmle.label | "key11" | -| main.go:142:14:142:28 | type conversion | semmle.label | type conversion | -| main.go:142:21:142:27 | "key12" | semmle.label | "key12" | -| main.go:144:39:144:46 | mySecret | semmle.label | mySecret | -| main.go:149:14:149:28 | type conversion | semmle.label | type conversion | -| main.go:149:21:149:27 | "key13" | semmle.label | "key13" | -| main.go:153:11:153:18 | mySecret | semmle.label | mySecret | -| main.go:160:12:160:26 | type conversion | semmle.label | type conversion | -| main.go:160:19:160:25 | "key14" | semmle.label | "key14" | -| main.go:161:34:161:39 | secret | semmle.label | secret | -| main.go:166:12:166:26 | type conversion | semmle.label | type conversion | -| main.go:166:19:166:25 | "key15" | semmle.label | "key15" | -| main.go:167:32:167:37 | secret | semmle.label | secret | -| main.go:172:12:172:26 | type conversion | semmle.label | type conversion | -| main.go:172:19:172:25 | "key16" | semmle.label | "key16" | -| main.go:173:41:173:46 | secret | semmle.label | secret | -| main.go:178:12:178:26 | type conversion | semmle.label | type conversion | -| main.go:178:19:178:25 | "key17" | semmle.label | "key17" | -| main.go:179:51:179:56 | secret | semmle.label | secret | -| main.go:184:12:184:26 | type conversion | semmle.label | type conversion | -| main.go:184:19:184:25 | "key18" | semmle.label | "key18" | -| main.go:185:42:185:47 | secret | semmle.label | secret | -| main.go:190:12:190:26 | type conversion | semmle.label | type conversion | -| main.go:190:19:190:25 | "key19" | semmle.label | "key19" | -| main.go:193:33:193:38 | secret | semmle.label | secret | -| sanitizer.go:17:9:17:21 | type conversion | semmle.label | type conversion | -| sanitizer.go:17:16:17:20 | `key` | semmle.label | `key` | -| sanitizer.go:18:44:18:46 | key | semmle.label | key | -subpaths -#select -| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | HardcodedKeysBad.go:19:28:19:39 | mySigningKey | $@ is used to sign a JWT token. | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | Hardcoded String | -| main.go:42:28:42:39 | mySigningKey | main.go:33:25:33:30 | "key1" | main.go:42:28:42:39 | mySigningKey | $@ is used to sign a JWT token. | main.go:33:25:33:30 | "key1" | Hardcoded String | -| main.go:50:16:50:29 | type conversion | main.go:50:23:50:28 | "key2" | main.go:50:16:50:29 | type conversion | $@ is used to sign a JWT token. | main.go:50:23:50:28 | "key2" | Hardcoded String | -| main.go:69:44:69:46 | key | main.go:68:16:68:21 | `key3` | main.go:69:44:69:46 | key | $@ is used to sign a JWT token. | main.go:68:16:68:21 | `key3` | Hardcoded String | -| main.go:74:66:74:68 | key | main.go:73:16:73:21 | "key4" | main.go:74:66:74:68 | key | $@ is used to sign a JWT token. | main.go:73:16:73:21 | "key4" | Hardcoded String | -| main.go:82:15:82:18 | key2 | main.go:77:17:77:22 | "key5" | main.go:82:15:82:18 | key2 | $@ is used to sign a JWT token. | main.go:77:17:77:22 | "key5" | Hardcoded String | -| main.go:92:41:92:43 | key | main.go:88:16:88:21 | "key6" | main.go:92:41:92:43 | key | $@ is used to sign a JWT token. | main.go:88:16:88:21 | "key6" | Hardcoded String | -| main.go:99:66:99:69 | key2 | main.go:97:17:97:22 | "key7" | main.go:99:66:99:69 | key2 | $@ is used to sign a JWT token. | main.go:97:17:97:22 | "key7" | Hardcoded String | -| main.go:110:30:110:32 | key | main.go:105:16:105:21 | "key8" | main.go:110:30:110:32 | key | $@ is used to sign a JWT token. | main.go:105:16:105:21 | "key8" | Hardcoded String | -| main.go:115:16:115:24 | sharedKey | main.go:114:22:114:27 | "key9" | main.go:115:16:115:24 | sharedKey | $@ is used to sign a JWT token. | main.go:114:22:114:27 | "key9" | Hardcoded String | -| main.go:121:16:121:30 | sharedKeyglobal | main.go:118:30:118:36 | "key10" | main.go:121:16:121:30 | sharedKeyglobal | $@ is used to sign a JWT token. | main.go:118:30:118:36 | "key10" | Hardcoded String | -| main.go:127:20:127:34 | type conversion | main.go:127:27:127:33 | "key11" | main.go:127:20:127:34 | type conversion | $@ is used to sign a JWT token. | main.go:127:27:127:33 | "key11" | Hardcoded String | -| main.go:144:39:144:46 | mySecret | main.go:142:21:142:27 | "key12" | main.go:144:39:144:46 | mySecret | $@ is used to sign a JWT token. | main.go:142:21:142:27 | "key12" | Hardcoded String | -| main.go:153:11:153:18 | mySecret | main.go:149:21:149:27 | "key13" | main.go:153:11:153:18 | mySecret | $@ is used to sign a JWT token. | main.go:149:21:149:27 | "key13" | Hardcoded String | -| main.go:161:34:161:39 | secret | main.go:160:19:160:25 | "key14" | main.go:161:34:161:39 | secret | $@ is used to sign a JWT token. | main.go:160:19:160:25 | "key14" | Hardcoded String | -| main.go:167:32:167:37 | secret | main.go:166:19:166:25 | "key15" | main.go:167:32:167:37 | secret | $@ is used to sign a JWT token. | main.go:166:19:166:25 | "key15" | Hardcoded String | -| main.go:173:41:173:46 | secret | main.go:172:19:172:25 | "key16" | main.go:173:41:173:46 | secret | $@ is used to sign a JWT token. | main.go:172:19:172:25 | "key16" | Hardcoded String | -| main.go:179:51:179:56 | secret | main.go:178:19:178:25 | "key17" | main.go:179:51:179:56 | secret | $@ is used to sign a JWT token. | main.go:178:19:178:25 | "key17" | Hardcoded String | -| main.go:185:42:185:47 | secret | main.go:184:19:184:25 | "key18" | main.go:185:42:185:47 | secret | $@ is used to sign a JWT token. | main.go:184:19:184:25 | "key18" | Hardcoded String | -| main.go:193:33:193:38 | secret | main.go:190:19:190:25 | "key19" | main.go:193:33:193:38 | secret | $@ is used to sign a JWT token. | main.go:190:19:190:25 | "key19" | Hardcoded String | -| sanitizer.go:18:44:18:46 | key | sanitizer.go:17:16:17:20 | `key` | sanitizer.go:18:44:18:46 | key | $@ is used to sign a JWT token. | sanitizer.go:17:16:17:20 | `key` | Hardcoded String | diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeys.qlref b/go/ql/test/experimental/CWE-321/HardcodedKeys.qlref deleted file mode 100644 index 83c71d75ae9..00000000000 --- a/go/ql/test/experimental/CWE-321/HardcodedKeys.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/CWE-321/HardcodedKeys.ql \ No newline at end of file diff --git a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.qlref b/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.qlref deleted file mode 100644 index a4326ff97e6..00000000000 --- a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/CWE-347/ParseJWTWithoutVerification.ql \ No newline at end of file diff --git a/go/ql/test/experimental/CWE-369/DivideByZero.expected b/go/ql/test/experimental/CWE-369/DivideByZero.expected index 0d979a79790..0b6eeb93317 100644 --- a/go/ql/test/experimental/CWE-369/DivideByZero.expected +++ b/go/ql/test/experimental/CWE-369/DivideByZero.expected @@ -1,26 +1,26 @@ edges -| DivideByZero.go:10:12:10:16 | selection of URL | DivideByZero.go:10:12:10:24 | call to Query | -| DivideByZero.go:10:12:10:24 | call to Query | DivideByZero.go:11:27:11:32 | param1 | -| DivideByZero.go:11:2:11:33 | ... := ...[0] | DivideByZero.go:12:16:12:20 | value | -| DivideByZero.go:11:27:11:32 | param1 | DivideByZero.go:11:2:11:33 | ... := ...[0] | -| DivideByZero.go:17:12:17:16 | selection of URL | DivideByZero.go:17:12:17:24 | call to Query | -| DivideByZero.go:17:12:17:24 | call to Query | DivideByZero.go:18:11:18:24 | type conversion | -| DivideByZero.go:18:11:18:24 | type conversion | DivideByZero.go:19:16:19:20 | value | -| DivideByZero.go:24:12:24:16 | selection of URL | DivideByZero.go:24:12:24:24 | call to Query | -| DivideByZero.go:24:12:24:24 | call to Query | DivideByZero.go:25:31:25:36 | param1 | -| DivideByZero.go:25:2:25:45 | ... := ...[0] | DivideByZero.go:26:16:26:20 | value | -| DivideByZero.go:25:31:25:36 | param1 | DivideByZero.go:25:2:25:45 | ... := ...[0] | -| DivideByZero.go:31:12:31:16 | selection of URL | DivideByZero.go:31:12:31:24 | call to Query | -| DivideByZero.go:31:12:31:24 | call to Query | DivideByZero.go:32:33:32:38 | param1 | -| DivideByZero.go:32:2:32:43 | ... := ...[0] | DivideByZero.go:33:16:33:20 | value | -| DivideByZero.go:32:33:32:38 | param1 | DivideByZero.go:32:2:32:43 | ... := ...[0] | -| DivideByZero.go:38:12:38:16 | selection of URL | DivideByZero.go:38:12:38:24 | call to Query | -| DivideByZero.go:38:12:38:24 | call to Query | DivideByZero.go:39:32:39:37 | param1 | -| DivideByZero.go:39:2:39:46 | ... := ...[0] | DivideByZero.go:40:16:40:20 | value | -| DivideByZero.go:39:32:39:37 | param1 | DivideByZero.go:39:2:39:46 | ... := ...[0] | -| DivideByZero.go:54:12:54:16 | selection of URL | DivideByZero.go:54:12:54:24 | call to Query | -| DivideByZero.go:54:12:54:24 | call to Query | DivideByZero.go:55:11:55:24 | type conversion | -| DivideByZero.go:55:11:55:24 | type conversion | DivideByZero.go:57:17:57:21 | value | +| DivideByZero.go:10:12:10:16 | selection of URL | DivideByZero.go:10:12:10:24 | call to Query | provenance | | +| DivideByZero.go:10:12:10:24 | call to Query | DivideByZero.go:11:27:11:32 | param1 | provenance | | +| DivideByZero.go:11:2:11:33 | ... := ...[0] | DivideByZero.go:12:16:12:20 | value | provenance | | +| DivideByZero.go:11:27:11:32 | param1 | DivideByZero.go:11:2:11:33 | ... := ...[0] | provenance | | +| DivideByZero.go:17:12:17:16 | selection of URL | DivideByZero.go:17:12:17:24 | call to Query | provenance | | +| DivideByZero.go:17:12:17:24 | call to Query | DivideByZero.go:18:11:18:24 | type conversion | provenance | | +| DivideByZero.go:18:11:18:24 | type conversion | DivideByZero.go:19:16:19:20 | value | provenance | | +| DivideByZero.go:24:12:24:16 | selection of URL | DivideByZero.go:24:12:24:24 | call to Query | provenance | | +| DivideByZero.go:24:12:24:24 | call to Query | DivideByZero.go:25:31:25:36 | param1 | provenance | | +| DivideByZero.go:25:2:25:45 | ... := ...[0] | DivideByZero.go:26:16:26:20 | value | provenance | | +| DivideByZero.go:25:31:25:36 | param1 | DivideByZero.go:25:2:25:45 | ... := ...[0] | provenance | | +| DivideByZero.go:31:12:31:16 | selection of URL | DivideByZero.go:31:12:31:24 | call to Query | provenance | | +| DivideByZero.go:31:12:31:24 | call to Query | DivideByZero.go:32:33:32:38 | param1 | provenance | | +| DivideByZero.go:32:2:32:43 | ... := ...[0] | DivideByZero.go:33:16:33:20 | value | provenance | | +| DivideByZero.go:32:33:32:38 | param1 | DivideByZero.go:32:2:32:43 | ... := ...[0] | provenance | | +| DivideByZero.go:38:12:38:16 | selection of URL | DivideByZero.go:38:12:38:24 | call to Query | provenance | | +| DivideByZero.go:38:12:38:24 | call to Query | DivideByZero.go:39:32:39:37 | param1 | provenance | | +| DivideByZero.go:39:2:39:46 | ... := ...[0] | DivideByZero.go:40:16:40:20 | value | provenance | | +| DivideByZero.go:39:32:39:37 | param1 | DivideByZero.go:39:2:39:46 | ... := ...[0] | provenance | | +| DivideByZero.go:54:12:54:16 | selection of URL | DivideByZero.go:54:12:54:24 | call to Query | provenance | | +| DivideByZero.go:54:12:54:24 | call to Query | DivideByZero.go:55:11:55:24 | type conversion | provenance | | +| DivideByZero.go:55:11:55:24 | type conversion | DivideByZero.go:57:17:57:21 | value | provenance | | nodes | DivideByZero.go:10:12:10:16 | selection of URL | semmle.label | selection of URL | | DivideByZero.go:10:12:10:24 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/experimental/CWE-74/DsnInjection.expected b/go/ql/test/experimental/CWE-74/DsnInjection.expected index 9859f05b50c..2788c186d00 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjection.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjection.expected @@ -1,9 +1,9 @@ edges -| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:49:102:49:105 | name | -| Dsn.go:49:11:49:106 | []type{args} [array] | Dsn.go:49:11:49:106 | call to Sprintf | -| Dsn.go:49:11:49:106 | call to Sprintf | Dsn.go:50:29:50:33 | dbDSN | -| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | []type{args} [array] | -| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | call to Sprintf | +| Dsn.go:47:10:47:30 | call to FormValue | Dsn.go:49:102:49:105 | name | provenance | | +| Dsn.go:49:11:49:106 | []type{args} [array] | Dsn.go:49:11:49:106 | call to Sprintf | provenance | | +| Dsn.go:49:11:49:106 | call to Sprintf | Dsn.go:50:29:50:33 | dbDSN | provenance | | +| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | []type{args} [array] | provenance | | +| Dsn.go:49:102:49:105 | name | Dsn.go:49:11:49:106 | call to Sprintf | provenance | | nodes | Dsn.go:47:10:47:30 | call to FormValue | semmle.label | call to FormValue | | Dsn.go:49:11:49:106 | []type{args} [array] | semmle.label | []type{args} [array] | diff --git a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected index 09143c4cab9..ffe20d053f7 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected @@ -1,24 +1,24 @@ edges -| Dsn.go:26:11:26:17 | selection of Args | Dsn.go:28:102:28:109 | index expression | -| Dsn.go:28:11:28:110 | []type{args} [array] | Dsn.go:28:11:28:110 | call to Sprintf | -| Dsn.go:28:11:28:110 | call to Sprintf | Dsn.go:29:29:29:33 | dbDSN | -| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | []type{args} [array] | -| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | call to Sprintf | -| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:63:9:63:11 | cfg [pointer] | -| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | -| Dsn.go:63:9:63:11 | cfg [pointer] | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:62:2:62:4 | definition of cfg [pointer] | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | -| Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | -| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:67:11:67:109 | []type{args} [array] | Dsn.go:67:11:67:109 | call to Sprintf | -| Dsn.go:67:11:67:109 | call to Sprintf | Dsn.go:68:29:68:33 | dbDSN | -| Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit dereference | -| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | -| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | -| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | []type{args} [array] | -| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | call to Sprintf | +| Dsn.go:26:11:26:17 | selection of Args | Dsn.go:28:102:28:109 | index expression | provenance | | +| Dsn.go:28:11:28:110 | []type{args} [array] | Dsn.go:28:11:28:110 | call to Sprintf | provenance | | +| Dsn.go:28:11:28:110 | call to Sprintf | Dsn.go:29:29:29:33 | dbDSN | provenance | | +| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | []type{args} [array] | provenance | | +| Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | call to Sprintf | provenance | | +| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:63:9:63:11 | cfg [pointer] | provenance | | +| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | provenance | | +| Dsn.go:63:9:63:11 | cfg [pointer] | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:62:2:62:4 | definition of cfg [pointer] | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | +| Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | provenance | | +| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:67:11:67:109 | []type{args} [array] | Dsn.go:67:11:67:109 | call to Sprintf | provenance | | +| Dsn.go:67:11:67:109 | call to Sprintf | Dsn.go:68:29:68:33 | dbDSN | provenance | | +| Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit dereference | provenance | | +| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | provenance | | +| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | +| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | []type{args} [array] | provenance | | +| Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | call to Sprintf | provenance | | nodes | Dsn.go:26:11:26:17 | selection of Args | semmle.label | selection of Args | | Dsn.go:28:11:28:110 | []type{args} [array] | semmle.label | []type{args} [array] | diff --git a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected b/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected index 2b543ccde1d..1d0f5facd03 100644 --- a/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected +++ b/go/ql/test/experimental/CWE-79/HTMLTemplateEscapingPassthrough.expected @@ -1,28 +1,28 @@ edges -| HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | -| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | -| HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | -| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | -| HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | -| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | -| HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | -| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | -| HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | -| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | -| HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | -| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | -| HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | -| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | -| HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | -| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | -| HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | -| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | -| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | -| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | -| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | -| HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | -| HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | -| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | +| HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | HTMLTemplateEscapingPassthrough.go:30:39:30:39 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | HTMLTemplateEscapingPassthrough.go:36:40:36:40 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:35:23:35:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:35:9:35:38 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | HTMLTemplateEscapingPassthrough.go:41:40:41:40 | a | provenance | | +| HTMLTemplateEscapingPassthrough.go:40:19:40:33 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:40:9:40:34 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | HTMLTemplateEscapingPassthrough.go:47:41:47:41 | c | provenance | | +| HTMLTemplateEscapingPassthrough.go:46:29:46:43 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:46:11:46:44 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | HTMLTemplateEscapingPassthrough.go:51:44:51:44 | d | provenance | | +| HTMLTemplateEscapingPassthrough.go:50:23:50:37 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:50:11:50:38 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | HTMLTemplateEscapingPassthrough.go:55:44:55:44 | e | provenance | | +| HTMLTemplateEscapingPassthrough.go:54:26:54:40 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:54:11:54:41 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | HTMLTemplateEscapingPassthrough.go:59:38:59:38 | b | provenance | | +| HTMLTemplateEscapingPassthrough.go:58:24:58:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:58:11:58:39 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | HTMLTemplateEscapingPassthrough.go:63:44:63:44 | f | provenance | | +| HTMLTemplateEscapingPassthrough.go:62:27:62:41 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:62:11:62:42 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | HTMLTemplateEscapingPassthrough.go:67:38:67:38 | g | provenance | | +| HTMLTemplateEscapingPassthrough.go:66:24:66:38 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:66:11:66:39 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:75:17:75:31 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:76:38:76:44 | escaped | provenance | | +| HTMLTemplateEscapingPassthrough.go:81:10:81:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:84:38:84:40 | src | provenance | | +| HTMLTemplateEscapingPassthrough.go:89:10:89:24 | call to UserAgent | HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | provenance | | +| HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | HTMLTemplateEscapingPassthrough.go:92:38:92:46 | converted | provenance | | +| HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | HTMLTemplateEscapingPassthrough.go:91:16:91:77 | type conversion | provenance | | +| HTMLTemplateEscapingPassthrough.go:91:64:91:66 | src | HTMLTemplateEscapingPassthrough.go:91:38:91:67 | call to HTMLEscapeString | provenance | | nodes | HTMLTemplateEscapingPassthrough.go:29:12:29:41 | type conversion | semmle.label | type conversion | | HTMLTemplateEscapingPassthrough.go:29:26:29:40 | call to UserAgent | semmle.label | call to UserAgent | diff --git a/go/ql/test/experimental/CWE-918/SSRF.expected b/go/ql/test/experimental/CWE-918/SSRF.expected index e7b78beb153..0e5bdee9671 100644 --- a/go/ql/test/experimental/CWE-918/SSRF.expected +++ b/go/ql/test/experimental/CWE-918/SSRF.expected @@ -1,46 +1,46 @@ edges -| builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | -| builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | -| builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | -| builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | -| builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | -| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | -| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | -| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | -| new-tests.go:31:11:31:57 | []type{args} [array] | new-tests.go:31:11:31:57 | call to Sprintf | -| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | []type{args} [array] | -| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | call to Sprintf | -| new-tests.go:32:11:32:57 | []type{args} [array] | new-tests.go:32:11:32:57 | call to Sprintf | -| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | []type{args} [array] | -| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | call to Sprintf | -| new-tests.go:35:12:35:58 | []type{args} [array] | new-tests.go:35:12:35:58 | call to Sprintf | -| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | []type{args} [array] | -| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | call to Sprintf | -| new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | -| new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | -| new-tests.go:62:2:62:39 | ... := ...[0] | new-tests.go:63:17:63:23 | reqBody | -| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | -| new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... | -| new-tests.go:63:26:63:30 | &... | new-tests.go:68:48:68:56 | selection of word | -| new-tests.go:63:26:63:30 | &... | new-tests.go:69:48:69:56 | selection of safe | -| new-tests.go:63:26:63:30 | &... | new-tests.go:74:49:74:57 | selection of word | -| new-tests.go:68:11:68:57 | []type{args} [array] | new-tests.go:68:11:68:57 | call to Sprintf | -| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | []type{args} [array] | -| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | call to Sprintf | -| new-tests.go:69:11:69:57 | []type{args} [array] | new-tests.go:69:11:69:57 | call to Sprintf | -| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | []type{args} [array] | -| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | call to Sprintf | -| new-tests.go:74:12:74:58 | []type{args} [array] | new-tests.go:74:12:74:58 | call to Sprintf | -| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | []type{args} [array] | -| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | call to Sprintf | -| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | -| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | -| new-tests.go:78:18:78:46 | call to Get | new-tests.go:79:11:79:46 | ...+... | -| new-tests.go:81:18:81:67 | call to TrimPrefix | new-tests.go:82:11:82:46 | ...+... | -| new-tests.go:81:37:81:43 | selection of URL | new-tests.go:81:37:81:48 | selection of Path | -| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | -| new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | -| new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | +| builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | provenance | | +| builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | provenance | | +| builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | provenance | | +| builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | provenance | | +| builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | provenance | | +| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | provenance | | +| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | provenance | | +| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | provenance | | +| new-tests.go:31:11:31:57 | []type{args} [array] | new-tests.go:31:11:31:57 | call to Sprintf | provenance | | +| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | []type{args} [array] | provenance | | +| new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | call to Sprintf | provenance | | +| new-tests.go:32:11:32:57 | []type{args} [array] | new-tests.go:32:11:32:57 | call to Sprintf | provenance | | +| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | []type{args} [array] | provenance | | +| new-tests.go:32:48:32:56 | selection of safe | new-tests.go:32:11:32:57 | call to Sprintf | provenance | | +| new-tests.go:35:12:35:58 | []type{args} [array] | new-tests.go:35:12:35:58 | call to Sprintf | provenance | | +| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | []type{args} [array] | provenance | | +| new-tests.go:35:49:35:57 | selection of word | new-tests.go:35:12:35:58 | call to Sprintf | provenance | | +| new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | provenance | | +| new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | provenance | | +| new-tests.go:62:2:62:39 | ... := ...[0] | new-tests.go:63:17:63:23 | reqBody | provenance | | +| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | provenance | | +| new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... | provenance | | +| new-tests.go:63:26:63:30 | &... | new-tests.go:68:48:68:56 | selection of word | provenance | | +| new-tests.go:63:26:63:30 | &... | new-tests.go:69:48:69:56 | selection of safe | provenance | | +| new-tests.go:63:26:63:30 | &... | new-tests.go:74:49:74:57 | selection of word | provenance | | +| new-tests.go:68:11:68:57 | []type{args} [array] | new-tests.go:68:11:68:57 | call to Sprintf | provenance | | +| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | []type{args} [array] | provenance | | +| new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | call to Sprintf | provenance | | +| new-tests.go:69:11:69:57 | []type{args} [array] | new-tests.go:69:11:69:57 | call to Sprintf | provenance | | +| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | []type{args} [array] | provenance | | +| new-tests.go:69:48:69:56 | selection of safe | new-tests.go:69:11:69:57 | call to Sprintf | provenance | | +| new-tests.go:74:12:74:58 | []type{args} [array] | new-tests.go:74:12:74:58 | call to Sprintf | provenance | | +| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | []type{args} [array] | provenance | | +| new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | call to Sprintf | provenance | | +| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | provenance | | +| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | provenance | | +| new-tests.go:78:18:78:46 | call to Get | new-tests.go:79:11:79:46 | ...+... | provenance | | +| new-tests.go:81:18:81:67 | call to TrimPrefix | new-tests.go:82:11:82:46 | ...+... | provenance | | +| new-tests.go:81:37:81:43 | selection of URL | new-tests.go:81:37:81:48 | selection of Path | provenance | | +| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | provenance | | +| new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | provenance | | +| new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | provenance | | nodes | builtin.go:19:12:19:34 | call to FormValue | semmle.label | call to FormValue | | builtin.go:22:21:22:62 | ...+... | semmle.label | ...+... | diff --git a/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected b/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected index 612c6ef1e51..3c7e02eea26 100644 --- a/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected +++ b/go/ql/test/experimental/Unsafe/WrongUsageOfUnsafe.expected @@ -1,20 +1,20 @@ edges -| WrongUsageOfUnsafe.go:17:24:17:48 | type conversion | WrongUsageOfUnsafe.go:17:13:17:49 | type conversion | -| WrongUsageOfUnsafe.go:34:24:34:51 | type conversion | WrongUsageOfUnsafe.go:34:13:34:52 | type conversion | -| WrongUsageOfUnsafe.go:55:24:55:51 | type conversion | WrongUsageOfUnsafe.go:55:13:55:52 | type conversion | -| WrongUsageOfUnsafe.go:77:27:77:54 | type conversion | WrongUsageOfUnsafe.go:77:16:77:55 | type conversion | -| WrongUsageOfUnsafe.go:93:20:93:44 | type conversion | WrongUsageOfUnsafe.go:93:13:93:45 | type conversion | -| WrongUsageOfUnsafe.go:111:31:111:58 | type conversion | WrongUsageOfUnsafe.go:111:16:111:59 | type conversion | -| WrongUsageOfUnsafe.go:129:31:129:55 | type conversion | WrongUsageOfUnsafe.go:129:16:129:56 | type conversion | -| WrongUsageOfUnsafe.go:149:31:149:55 | type conversion | WrongUsageOfUnsafe.go:149:16:149:56 | type conversion | -| WrongUsageOfUnsafe.go:166:33:166:57 | type conversion | WrongUsageOfUnsafe.go:166:16:166:58 | type conversion | -| WrongUsageOfUnsafe.go:189:31:189:55 | type conversion | WrongUsageOfUnsafe.go:189:16:189:56 | type conversion | -| WrongUsageOfUnsafe.go:211:31:211:60 | type conversion | WrongUsageOfUnsafe.go:211:16:211:61 | type conversion | -| WrongUsageOfUnsafe.go:227:31:227:55 | type conversion | WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | -| WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | WrongUsageOfUnsafe.go:243:9:243:27 | type conversion | -| WrongUsageOfUnsafe.go:256:28:256:52 | type conversion | WrongUsageOfUnsafe.go:256:16:256:53 | type conversion | -| WrongUsageOfUnsafe.go:274:25:274:49 | type conversion | WrongUsageOfUnsafe.go:274:16:274:50 | type conversion | -| WrongUsageOfUnsafe.go:292:23:292:47 | type conversion | WrongUsageOfUnsafe.go:292:16:292:48 | type conversion | +| WrongUsageOfUnsafe.go:17:24:17:48 | type conversion | WrongUsageOfUnsafe.go:17:13:17:49 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:34:24:34:51 | type conversion | WrongUsageOfUnsafe.go:34:13:34:52 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:55:24:55:51 | type conversion | WrongUsageOfUnsafe.go:55:13:55:52 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:77:27:77:54 | type conversion | WrongUsageOfUnsafe.go:77:16:77:55 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:93:20:93:44 | type conversion | WrongUsageOfUnsafe.go:93:13:93:45 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:111:31:111:58 | type conversion | WrongUsageOfUnsafe.go:111:16:111:59 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:129:31:129:55 | type conversion | WrongUsageOfUnsafe.go:129:16:129:56 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:149:31:149:55 | type conversion | WrongUsageOfUnsafe.go:149:16:149:56 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:166:33:166:57 | type conversion | WrongUsageOfUnsafe.go:166:16:166:58 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:189:31:189:55 | type conversion | WrongUsageOfUnsafe.go:189:16:189:56 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:211:31:211:60 | type conversion | WrongUsageOfUnsafe.go:211:16:211:61 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:227:31:227:55 | type conversion | WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | provenance | | +| WrongUsageOfUnsafe.go:236:21:236:23 | definition of req | WrongUsageOfUnsafe.go:243:9:243:27 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:256:28:256:52 | type conversion | WrongUsageOfUnsafe.go:256:16:256:53 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:274:25:274:49 | type conversion | WrongUsageOfUnsafe.go:274:16:274:50 | type conversion | provenance | | +| WrongUsageOfUnsafe.go:292:23:292:47 | type conversion | WrongUsageOfUnsafe.go:292:16:292:48 | type conversion | provenance | | nodes | WrongUsageOfUnsafe.go:17:13:17:49 | type conversion | semmle.label | type conversion | | WrongUsageOfUnsafe.go:17:24:17:48 | type conversion | semmle.label | type conversion | diff --git a/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected b/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected index 9d4860bc288..bb614a4b41c 100644 --- a/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected +++ b/go/ql/test/library-tests/semmle/go/Function/TypeParamType.expected @@ -1,3 +1,8 @@ +| E | Ordered | +| E | comparable | +| E | interface { } | +| E1 | interface { } | +| E2 | interface { } | | Edge | EdgeConstraint | | Edge | interface { } | | F | floaty | @@ -5,8 +10,14 @@ | Node | NodeConstraint | | Node | interface { } | | S | interface { } | +| S | interface { ~[]E } | +| S1 | interface { ~[]E1 } | +| S2 | interface { ~[]E2 } | | SF2 | interface { } | | SG2 | interface { } | +| T | Ordered | +| T | comparable | +| T | interface { string \| []uint8 } | | T | interface { } | | T1 | interface { } | | T2 | interface { } | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected index 523d27be250..315e8f2ceab 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected @@ -1,13 +1,13 @@ edges -| test.go:9:9:9:11 | selection of c [collection] | test.go:9:7:9:11 | <-... | -| test.go:13:16:13:16 | definition of s [pointer, c, collection] | test.go:16:2:16:2 | s [pointer, c, collection] | -| test.go:15:10:15:17 | call to source | test.go:16:9:16:12 | data | -| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:13:16:13:16 | definition of s [pointer, c, collection] | -| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:16:2:16:4 | selection of c [collection] | -| test.go:16:2:16:2 | s [pointer, c, collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | -| test.go:16:2:16:4 | selection of c [collection] | test.go:9:9:9:11 | selection of c [collection] | -| test.go:16:2:16:4 | selection of c [collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | -| test.go:16:9:16:12 | data | test.go:16:2:16:4 | selection of c [collection] | +| test.go:9:9:9:11 | selection of c [collection] | test.go:9:7:9:11 | <-... | provenance | | +| test.go:13:16:13:16 | definition of s [pointer, c, collection] | test.go:16:2:16:2 | s [pointer, c, collection] | provenance | | +| test.go:15:10:15:17 | call to source | test.go:16:9:16:12 | data | provenance | | +| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:13:16:13:16 | definition of s [pointer, c, collection] | provenance | | +| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:16:2:16:4 | selection of c [collection] | provenance | | +| test.go:16:2:16:2 | s [pointer, c, collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | provenance | | +| test.go:16:2:16:4 | selection of c [collection] | test.go:9:9:9:11 | selection of c [collection] | provenance | | +| test.go:16:2:16:4 | selection of c [collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | provenance | | +| test.go:16:9:16:12 | data | test.go:16:2:16:4 | selection of c [collection] | provenance | | nodes | test.go:9:7:9:11 | <-... | semmle.label | <-... | | test.go:9:9:9:11 | selection of c [collection] | semmle.label | selection of c [collection] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected index a7ab7fc63a4..c126e70195b 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected @@ -1,6 +1,6 @@ edges -| Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | +| Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | provenance | | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | | nodes | Builtin.go:6:2:6:2 | definition of b | semmle.label | definition of b | | Builtin.go:7:2:7:15 | selection of Body | semmle.label | selection of Body | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected index 2c7583cacb4..1bd17817463 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/HiddenNodes/test.expected @@ -1,7 +1,7 @@ edges -| test.go:14:8:14:15 | call to source | test.go:15:34:15:35 | fi | -| test.go:15:2:15:44 | ... := ...[0] | test.go:16:7:16:12 | header | -| test.go:15:34:15:35 | fi | test.go:15:2:15:44 | ... := ...[0] | +| test.go:14:8:14:15 | call to source | test.go:15:34:15:35 | fi | provenance | | +| test.go:15:2:15:44 | ... := ...[0] | test.go:16:7:16:12 | header | provenance | | +| test.go:15:34:15:35 | fi | test.go:15:2:15:44 | ... := ...[0] | provenance | | nodes | test.go:14:8:14:15 | call to source | semmle.label | call to source | | test.go:15:2:15:44 | ... := ...[0] | semmle.label | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected index 3c14fdfadeb..5825fcdfcd6 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected @@ -1,105 +1,105 @@ edges -| test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | -| test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | -| test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | -| test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | -| test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | -| test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | -| test.go:57:20:57:42 | call to Header | test.go:57:13:57:43 | type conversion | -| test.go:62:20:62:41 | call to Param | test.go:62:13:62:42 | type conversion | -| test.go:67:20:67:33 | call to Params | test.go:67:13:67:45 | type conversion | -| test.go:72:20:72:41 | call to Query | test.go:72:13:72:42 | type conversion | -| test.go:77:20:77:32 | call to Refer | test.go:77:13:77:33 | type conversion | -| test.go:82:20:82:34 | call to Referer | test.go:82:13:82:35 | type conversion | -| test.go:87:20:87:30 | call to URI | test.go:87:13:87:31 | type conversion | -| test.go:92:20:92:30 | call to URL | test.go:92:13:92:31 | type conversion | -| test.go:97:20:97:36 | call to UserAgent | test.go:97:13:97:37 | type conversion | -| test.go:102:14:102:25 | call to Data | test.go:102:14:102:45 | type assertion | -| test.go:114:14:114:25 | call to Data | test.go:114:14:114:45 | type assertion | -| test.go:126:14:126:25 | call to Data | test.go:126:14:126:45 | type assertion | -| test.go:143:23:143:42 | call to Data | test.go:143:23:143:62 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:200:36:200:53 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:201:39:201:56 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:202:28:202:56 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:204:36:204:53 | type assertion | -| test.go:199:15:199:26 | call to Data | test.go:205:34:205:51 | type assertion | -| test.go:200:21:200:54 | call to HTML2str | test.go:200:14:200:55 | type conversion | -| test.go:200:36:200:53 | type assertion | test.go:200:21:200:54 | call to HTML2str | -| test.go:201:21:201:57 | call to Htmlunquote | test.go:201:14:201:58 | type conversion | -| test.go:201:39:201:56 | type assertion | test.go:201:21:201:57 | call to Htmlunquote | -| test.go:202:2:202:68 | ... := ...[0] | test.go:203:14:203:28 | type assertion | -| test.go:202:28:202:56 | type assertion | test.go:202:2:202:68 | ... := ...[0] | -| test.go:204:21:204:54 | call to Str2html | test.go:204:14:204:55 | type conversion | -| test.go:204:36:204:53 | type assertion | test.go:204:21:204:54 | call to Str2html | -| test.go:205:21:205:58 | call to Substr | test.go:205:14:205:59 | type conversion | -| test.go:205:34:205:51 | type assertion | test.go:205:21:205:58 | call to Substr | -| test.go:207:6:207:6 | definition of s | test.go:209:14:209:28 | type conversion | -| test.go:208:18:208:33 | selection of Form | test.go:207:6:207:6 | definition of s | -| test.go:223:2:223:34 | ... := ...[0] | test.go:225:31:225:31 | f | -| test.go:223:2:223:34 | ... := ...[1] | test.go:224:14:224:32 | type conversion | -| test.go:225:2:225:32 | ... := ...[0] | test.go:226:14:226:20 | content | -| test.go:225:31:225:31 | f | test.go:225:2:225:32 | ... := ...[0] | -| test.go:228:2:228:40 | ... := ...[0] | test.go:229:14:229:38 | type conversion | -| test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | -| test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | -| test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | -| test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | -| test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | -| test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | -| test.go:270:62:270:83 | call to GetCookie | test.go:270:55:270:84 | type conversion | -| test.go:275:2:275:40 | ... := ...[0] | test.go:278:21:278:28 | index expression | -| test.go:275:2:275:40 | ... := ...[0] | test.go:283:44:283:60 | selection of Filename | -| test.go:275:2:275:40 | ... := ...[0] | test.go:284:38:284:49 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:285:37:285:48 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:291:4:291:15 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:293:42:293:53 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:294:53:294:64 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:295:38:295:49 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:296:49:296:60 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:297:51:297:65 | index expression | -| test.go:275:2:275:40 | ... := ...[0] | test.go:298:36:298:47 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:299:37:299:48 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:301:39:301:50 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:302:40:302:51 | genericFiles | -| test.go:275:2:275:40 | ... := ...[0] | test.go:303:39:303:50 | genericFiles | -| test.go:276:2:276:13 | definition of genericFiles [array] | test.go:297:51:297:62 | genericFiles [array] | -| test.go:278:21:278:28 | index expression | test.go:276:2:276:13 | definition of genericFiles [array] | -| test.go:283:44:283:60 | selection of Filename | test.go:283:21:283:61 | call to GetDisplayString | -| test.go:284:21:284:53 | call to SliceChunk | test.go:284:21:284:92 | selection of Filename | -| test.go:284:38:284:49 | genericFiles | test.go:284:21:284:53 | call to SliceChunk | -| test.go:285:21:285:60 | call to SliceDiff | test.go:285:21:285:96 | selection of Filename | -| test.go:285:37:285:48 | genericFiles | test.go:285:21:285:60 | call to SliceDiff | -| test.go:290:3:292:44 | call to SliceFilter | test.go:290:3:292:80 | selection of Filename | -| test.go:291:4:291:15 | genericFiles | test.go:290:3:292:44 | call to SliceFilter | -| test.go:293:21:293:65 | call to SliceIntersect | test.go:293:21:293:101 | selection of Filename | -| test.go:293:42:293:53 | genericFiles | test.go:293:21:293:65 | call to SliceIntersect | -| test.go:294:21:294:65 | call to SliceIntersect | test.go:294:21:294:101 | selection of Filename | -| test.go:294:53:294:64 | genericFiles | test.go:294:21:294:65 | call to SliceIntersect | -| test.go:295:21:295:61 | call to SliceMerge | test.go:295:21:295:97 | selection of Filename | -| test.go:295:38:295:49 | genericFiles | test.go:295:21:295:61 | call to SliceMerge | -| test.go:296:21:296:61 | call to SliceMerge | test.go:296:21:296:97 | selection of Filename | -| test.go:296:49:296:60 | genericFiles | test.go:296:21:296:61 | call to SliceMerge | -| test.go:297:21:297:66 | call to SlicePad | test.go:297:21:297:102 | selection of Filename | -| test.go:297:51:297:62 | genericFiles [array] | test.go:297:51:297:65 | index expression | -| test.go:297:51:297:65 | index expression | test.go:297:21:297:66 | call to SlicePad | -| test.go:298:21:298:66 | call to SlicePad | test.go:298:21:298:102 | selection of Filename | -| test.go:298:36:298:47 | genericFiles | test.go:298:21:298:66 | call to SlicePad | -| test.go:299:21:299:49 | call to SliceRand | test.go:299:21:299:82 | selection of Filename | -| test.go:299:37:299:48 | genericFiles | test.go:299:21:299:49 | call to SliceRand | -| test.go:301:21:301:97 | call to SliceReduce | test.go:301:21:301:133 | selection of Filename | -| test.go:301:39:301:50 | genericFiles | test.go:301:21:301:97 | call to SliceReduce | -| test.go:302:21:302:52 | call to SliceShuffle | test.go:302:21:302:88 | selection of Filename | -| test.go:302:40:302:51 | genericFiles | test.go:302:21:302:52 | call to SliceShuffle | -| test.go:303:21:303:51 | call to SliceUnique | test.go:303:21:303:87 | selection of Filename | -| test.go:303:39:303:50 | genericFiles | test.go:303:21:303:51 | call to SliceUnique | -| test.go:308:2:308:5 | definition of bMap | test.go:311:21:311:24 | bMap | -| test.go:308:2:308:5 | definition of bMap | test.go:312:21:312:24 | bMap | -| test.go:309:15:309:36 | call to GetString | test.go:310:22:310:30 | untrusted | -| test.go:310:22:310:30 | untrusted | test.go:308:2:308:5 | definition of bMap | -| test.go:311:21:311:24 | bMap | test.go:311:21:311:39 | call to Get | -| test.go:311:21:311:39 | call to Get | test.go:311:21:311:48 | type assertion | -| test.go:312:21:312:24 | bMap | test.go:312:21:312:32 | call to Items | -| test.go:312:21:312:32 | call to Items | test.go:312:21:312:52 | type assertion | +| test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | provenance | | +| test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | provenance | | +| test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | provenance | | +| test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | provenance | | +| test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | provenance | | +| test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | provenance | | +| test.go:57:20:57:42 | call to Header | test.go:57:13:57:43 | type conversion | provenance | | +| test.go:62:20:62:41 | call to Param | test.go:62:13:62:42 | type conversion | provenance | | +| test.go:67:20:67:33 | call to Params | test.go:67:13:67:45 | type conversion | provenance | | +| test.go:72:20:72:41 | call to Query | test.go:72:13:72:42 | type conversion | provenance | | +| test.go:77:20:77:32 | call to Refer | test.go:77:13:77:33 | type conversion | provenance | | +| test.go:82:20:82:34 | call to Referer | test.go:82:13:82:35 | type conversion | provenance | | +| test.go:87:20:87:30 | call to URI | test.go:87:13:87:31 | type conversion | provenance | | +| test.go:92:20:92:30 | call to URL | test.go:92:13:92:31 | type conversion | provenance | | +| test.go:97:20:97:36 | call to UserAgent | test.go:97:13:97:37 | type conversion | provenance | | +| test.go:102:14:102:25 | call to Data | test.go:102:14:102:45 | type assertion | provenance | | +| test.go:114:14:114:25 | call to Data | test.go:114:14:114:45 | type assertion | provenance | | +| test.go:126:14:126:25 | call to Data | test.go:126:14:126:45 | type assertion | provenance | | +| test.go:143:23:143:42 | call to Data | test.go:143:23:143:62 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:200:36:200:53 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:201:39:201:56 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:202:28:202:56 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:204:36:204:53 | type assertion | provenance | | +| test.go:199:15:199:26 | call to Data | test.go:205:34:205:51 | type assertion | provenance | | +| test.go:200:21:200:54 | call to HTML2str | test.go:200:14:200:55 | type conversion | provenance | | +| test.go:200:36:200:53 | type assertion | test.go:200:21:200:54 | call to HTML2str | provenance | | +| test.go:201:21:201:57 | call to Htmlunquote | test.go:201:14:201:58 | type conversion | provenance | | +| test.go:201:39:201:56 | type assertion | test.go:201:21:201:57 | call to Htmlunquote | provenance | | +| test.go:202:2:202:68 | ... := ...[0] | test.go:203:14:203:28 | type assertion | provenance | | +| test.go:202:28:202:56 | type assertion | test.go:202:2:202:68 | ... := ...[0] | provenance | | +| test.go:204:21:204:54 | call to Str2html | test.go:204:14:204:55 | type conversion | provenance | | +| test.go:204:36:204:53 | type assertion | test.go:204:21:204:54 | call to Str2html | provenance | | +| test.go:205:21:205:58 | call to Substr | test.go:205:14:205:59 | type conversion | provenance | | +| test.go:205:34:205:51 | type assertion | test.go:205:21:205:58 | call to Substr | provenance | | +| test.go:207:6:207:6 | definition of s | test.go:209:14:209:28 | type conversion | provenance | | +| test.go:208:18:208:33 | selection of Form | test.go:207:6:207:6 | definition of s | provenance | | +| test.go:223:2:223:34 | ... := ...[0] | test.go:225:31:225:31 | f | provenance | | +| test.go:223:2:223:34 | ... := ...[1] | test.go:224:14:224:32 | type conversion | provenance | | +| test.go:225:2:225:32 | ... := ...[0] | test.go:226:14:226:20 | content | provenance | | +| test.go:225:31:225:31 | f | test.go:225:2:225:32 | ... := ...[0] | provenance | | +| test.go:228:2:228:40 | ... := ...[0] | test.go:229:14:229:38 | type conversion | provenance | | +| test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | provenance | | +| test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | provenance | | +| test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | provenance | | +| test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | provenance | | +| test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | provenance | | +| test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | provenance | | +| test.go:270:62:270:83 | call to GetCookie | test.go:270:55:270:84 | type conversion | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:278:21:278:28 | index expression | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:283:44:283:60 | selection of Filename | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:284:38:284:49 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:285:37:285:48 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:291:4:291:15 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:293:42:293:53 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:294:53:294:64 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:295:38:295:49 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:296:49:296:60 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:297:51:297:65 | index expression | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:298:36:298:47 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:299:37:299:48 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:301:39:301:50 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:302:40:302:51 | genericFiles | provenance | | +| test.go:275:2:275:40 | ... := ...[0] | test.go:303:39:303:50 | genericFiles | provenance | | +| test.go:276:2:276:13 | definition of genericFiles [array] | test.go:297:51:297:62 | genericFiles [array] | provenance | | +| test.go:278:21:278:28 | index expression | test.go:276:2:276:13 | definition of genericFiles [array] | provenance | | +| test.go:283:44:283:60 | selection of Filename | test.go:283:21:283:61 | call to GetDisplayString | provenance | | +| test.go:284:21:284:53 | call to SliceChunk | test.go:284:21:284:92 | selection of Filename | provenance | | +| test.go:284:38:284:49 | genericFiles | test.go:284:21:284:53 | call to SliceChunk | provenance | | +| test.go:285:21:285:60 | call to SliceDiff | test.go:285:21:285:96 | selection of Filename | provenance | | +| test.go:285:37:285:48 | genericFiles | test.go:285:21:285:60 | call to SliceDiff | provenance | | +| test.go:290:3:292:44 | call to SliceFilter | test.go:290:3:292:80 | selection of Filename | provenance | | +| test.go:291:4:291:15 | genericFiles | test.go:290:3:292:44 | call to SliceFilter | provenance | | +| test.go:293:21:293:65 | call to SliceIntersect | test.go:293:21:293:101 | selection of Filename | provenance | | +| test.go:293:42:293:53 | genericFiles | test.go:293:21:293:65 | call to SliceIntersect | provenance | | +| test.go:294:21:294:65 | call to SliceIntersect | test.go:294:21:294:101 | selection of Filename | provenance | | +| test.go:294:53:294:64 | genericFiles | test.go:294:21:294:65 | call to SliceIntersect | provenance | | +| test.go:295:21:295:61 | call to SliceMerge | test.go:295:21:295:97 | selection of Filename | provenance | | +| test.go:295:38:295:49 | genericFiles | test.go:295:21:295:61 | call to SliceMerge | provenance | | +| test.go:296:21:296:61 | call to SliceMerge | test.go:296:21:296:97 | selection of Filename | provenance | | +| test.go:296:49:296:60 | genericFiles | test.go:296:21:296:61 | call to SliceMerge | provenance | | +| test.go:297:21:297:66 | call to SlicePad | test.go:297:21:297:102 | selection of Filename | provenance | | +| test.go:297:51:297:62 | genericFiles [array] | test.go:297:51:297:65 | index expression | provenance | | +| test.go:297:51:297:65 | index expression | test.go:297:21:297:66 | call to SlicePad | provenance | | +| test.go:298:21:298:66 | call to SlicePad | test.go:298:21:298:102 | selection of Filename | provenance | | +| test.go:298:36:298:47 | genericFiles | test.go:298:21:298:66 | call to SlicePad | provenance | | +| test.go:299:21:299:49 | call to SliceRand | test.go:299:21:299:82 | selection of Filename | provenance | | +| test.go:299:37:299:48 | genericFiles | test.go:299:21:299:49 | call to SliceRand | provenance | | +| test.go:301:21:301:97 | call to SliceReduce | test.go:301:21:301:133 | selection of Filename | provenance | | +| test.go:301:39:301:50 | genericFiles | test.go:301:21:301:97 | call to SliceReduce | provenance | | +| test.go:302:21:302:52 | call to SliceShuffle | test.go:302:21:302:88 | selection of Filename | provenance | | +| test.go:302:40:302:51 | genericFiles | test.go:302:21:302:52 | call to SliceShuffle | provenance | | +| test.go:303:21:303:51 | call to SliceUnique | test.go:303:21:303:87 | selection of Filename | provenance | | +| test.go:303:39:303:50 | genericFiles | test.go:303:21:303:51 | call to SliceUnique | provenance | | +| test.go:308:2:308:5 | definition of bMap | test.go:311:21:311:24 | bMap | provenance | | +| test.go:308:2:308:5 | definition of bMap | test.go:312:21:312:24 | bMap | provenance | | +| test.go:309:15:309:36 | call to GetString | test.go:310:22:310:30 | untrusted | provenance | | +| test.go:310:22:310:30 | untrusted | test.go:308:2:308:5 | definition of bMap | provenance | | +| test.go:311:21:311:24 | bMap | test.go:311:21:311:39 | call to Get | provenance | | +| test.go:311:21:311:39 | call to Get | test.go:311:21:311:48 | type assertion | provenance | | +| test.go:312:21:312:24 | bMap | test.go:312:21:312:32 | call to Items | provenance | | +| test.go:312:21:312:32 | call to Items | test.go:312:21:312:52 | type assertion | provenance | | nodes | test.go:33:6:33:10 | definition of bound | semmle.label | definition of bound | | test.go:35:13:35:30 | type conversion | semmle.label | type conversion | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected index 714f03bdcec..c0deba242e0 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected @@ -1,12 +1,12 @@ edges -| test.go:215:15:215:26 | call to Data | test.go:216:18:216:26 | untrusted | -| test.go:215:15:215:26 | call to Data | test.go:217:10:217:18 | untrusted | -| test.go:215:15:215:26 | call to Data | test.go:218:35:218:43 | untrusted | -| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... | -| test.go:324:40:324:43 | &... | test.go:326:35:326:43 | untrusted | -| test.go:332:15:332:26 | call to Data | test.go:334:23:334:31 | untrusted | -| test.go:340:15:340:26 | call to Data | test.go:342:53:342:61 | untrusted | -| test.go:340:15:340:26 | call to Data | test.go:344:23:344:31 | untrusted | +| test.go:215:15:215:26 | call to Data | test.go:216:18:216:26 | untrusted | provenance | | +| test.go:215:15:215:26 | call to Data | test.go:217:10:217:18 | untrusted | provenance | | +| test.go:215:15:215:26 | call to Data | test.go:218:35:218:43 | untrusted | provenance | | +| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... | provenance | | +| test.go:324:40:324:43 | &... | test.go:326:35:326:43 | untrusted | provenance | | +| test.go:332:15:332:26 | call to Data | test.go:334:23:334:31 | untrusted | provenance | | +| test.go:340:15:340:26 | call to Data | test.go:342:53:342:61 | untrusted | provenance | | +| test.go:340:15:340:26 | call to Data | test.go:344:23:344:31 | untrusted | provenance | | nodes | test.go:215:15:215:26 | call to Data | semmle.label | call to Data | | test.go:216:18:216:26 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected index f9668a6f723..ccaac4425ff 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/SqlInjection.expected @@ -1,36 +1,36 @@ edges -| test.go:10:15:10:41 | call to UserAgent | test.go:12:11:12:19 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:13:23:13:31 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:14:14:14:22 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:15:26:15:34 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:16:12:16:20 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:17:24:17:32 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:18:15:18:23 | untrusted | -| test.go:10:15:10:41 | call to UserAgent | test.go:19:27:19:35 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:26:12:26:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:27:10:27:18 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:28:15:28:23 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:29:14:29:22 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:31:8:31:16 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:32:11:32:19 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:33:9:33:17 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:34:8:34:16 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:35:8:35:16 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:36:13:36:21 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:37:13:37:21 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:38:12:38:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:39:12:39:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:40:9:40:17 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:42:16:42:24 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:42:27:42:35 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:44:14:44:22 | untrusted | -| test.go:24:15:24:41 | call to UserAgent | test.go:44:25:44:33 | untrusted | -| test.go:48:15:48:41 | call to UserAgent | test.go:49:12:49:20 | untrusted | -| test.go:54:15:54:41 | call to UserAgent | test.go:56:31:56:39 | untrusted | -| test.go:60:15:60:41 | call to UserAgent | test.go:62:19:62:27 | untrusted | +| test.go:10:15:10:41 | call to UserAgent | test.go:12:11:12:19 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:13:23:13:31 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:14:14:14:22 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:15:26:15:34 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:16:12:16:20 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:17:24:17:32 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:18:15:18:23 | untrusted | provenance | | +| test.go:10:15:10:41 | call to UserAgent | test.go:19:27:19:35 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:26:12:26:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:27:10:27:18 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:28:15:28:23 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:29:14:29:22 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:30:15:30:23 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:31:8:31:16 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:32:11:32:19 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:33:9:33:17 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:34:8:34:16 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:35:8:35:16 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:36:13:36:21 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:37:13:37:21 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:38:12:38:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:39:12:39:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:40:9:40:17 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:41:12:41:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:42:16:42:24 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:42:27:42:35 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:43:12:43:20 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:44:14:44:22 | untrusted | provenance | | +| test.go:24:15:24:41 | call to UserAgent | test.go:44:25:44:33 | untrusted | provenance | | +| test.go:48:15:48:41 | call to UserAgent | test.go:49:12:49:20 | untrusted | provenance | | +| test.go:54:15:54:41 | call to UserAgent | test.go:56:31:56:39 | untrusted | provenance | | +| test.go:60:15:60:41 | call to UserAgent | test.go:62:19:62:27 | untrusted | provenance | | nodes | test.go:10:15:10:41 | call to UserAgent | semmle.label | call to UserAgent | | test.go:12:11:12:19 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected index 09a41c42fb2..363a42b91d7 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected @@ -1,31 +1,31 @@ edges -| test.go:77:13:77:16 | &... | test.go:78:13:78:29 | type conversion | -| test.go:77:13:77:16 | &... | test.go:79:13:79:43 | type conversion | -| test.go:82:22:82:26 | &... | test.go:83:13:83:30 | type conversion | -| test.go:86:21:86:25 | &... | test.go:87:13:87:30 | type conversion | -| test.go:92:20:92:36 | call to Value | test.go:92:13:92:37 | type conversion | -| test.go:93:20:93:39 | call to RawValue | test.go:93:13:93:49 | type conversion | -| test.go:94:20:94:37 | call to String | test.go:94:13:94:38 | type conversion | -| test.go:95:20:95:36 | call to Value | test.go:95:13:95:37 | type conversion | -| test.go:96:20:96:39 | call to RawValue | test.go:96:13:96:49 | type conversion | -| test.go:97:20:97:37 | call to String | test.go:97:13:97:38 | type conversion | -| test.go:98:20:98:37 | call to Value | test.go:98:13:98:38 | type conversion | -| test.go:99:20:99:40 | call to RawValue | test.go:99:13:99:50 | type conversion | -| test.go:100:20:100:38 | call to String | test.go:100:13:100:39 | type conversion | -| test.go:106:9:106:13 | &... | test.go:107:13:107:33 | type conversion | -| test.go:110:9:110:12 | &... | test.go:111:13:111:29 | type conversion | -| test.go:114:12:114:19 | &... | test.go:115:13:115:48 | type conversion | -| test.go:118:16:118:24 | &... | test.go:119:13:119:43 | type conversion | -| test.go:122:16:122:23 | &... | test.go:123:13:123:39 | type conversion | -| test.go:126:15:126:24 | &... | test.go:127:13:127:47 | type conversion | -| test.go:130:18:130:30 | &... | test.go:131:13:131:38 | type conversion | -| test.go:137:12:137:19 | &... | test.go:138:13:138:48 | type conversion | -| test.go:141:16:141:24 | &... | test.go:142:13:142:43 | type conversion | -| test.go:145:16:145:23 | &... | test.go:146:13:146:39 | type conversion | -| test.go:149:15:149:24 | &... | test.go:150:13:150:47 | type conversion | -| test.go:153:18:153:30 | &... | test.go:154:13:154:38 | type conversion | -| test.go:157:14:157:22 | &... | test.go:158:13:158:28 | type conversion | -| test.go:161:15:161:24 | &... | test.go:162:13:162:32 | type conversion | +| test.go:77:13:77:16 | &... | test.go:78:13:78:29 | type conversion | provenance | | +| test.go:77:13:77:16 | &... | test.go:79:13:79:43 | type conversion | provenance | | +| test.go:82:22:82:26 | &... | test.go:83:13:83:30 | type conversion | provenance | | +| test.go:86:21:86:25 | &... | test.go:87:13:87:30 | type conversion | provenance | | +| test.go:92:20:92:36 | call to Value | test.go:92:13:92:37 | type conversion | provenance | | +| test.go:93:20:93:39 | call to RawValue | test.go:93:13:93:49 | type conversion | provenance | | +| test.go:94:20:94:37 | call to String | test.go:94:13:94:38 | type conversion | provenance | | +| test.go:95:20:95:36 | call to Value | test.go:95:13:95:37 | type conversion | provenance | | +| test.go:96:20:96:39 | call to RawValue | test.go:96:13:96:49 | type conversion | provenance | | +| test.go:97:20:97:37 | call to String | test.go:97:13:97:38 | type conversion | provenance | | +| test.go:98:20:98:37 | call to Value | test.go:98:13:98:38 | type conversion | provenance | | +| test.go:99:20:99:40 | call to RawValue | test.go:99:13:99:50 | type conversion | provenance | | +| test.go:100:20:100:38 | call to String | test.go:100:13:100:39 | type conversion | provenance | | +| test.go:106:9:106:13 | &... | test.go:107:13:107:33 | type conversion | provenance | | +| test.go:110:9:110:12 | &... | test.go:111:13:111:29 | type conversion | provenance | | +| test.go:114:12:114:19 | &... | test.go:115:13:115:48 | type conversion | provenance | | +| test.go:118:16:118:24 | &... | test.go:119:13:119:43 | type conversion | provenance | | +| test.go:122:16:122:23 | &... | test.go:123:13:123:39 | type conversion | provenance | | +| test.go:126:15:126:24 | &... | test.go:127:13:127:47 | type conversion | provenance | | +| test.go:130:18:130:30 | &... | test.go:131:13:131:38 | type conversion | provenance | | +| test.go:137:12:137:19 | &... | test.go:138:13:138:48 | type conversion | provenance | | +| test.go:141:16:141:24 | &... | test.go:142:13:142:43 | type conversion | provenance | | +| test.go:145:16:145:23 | &... | test.go:146:13:146:39 | type conversion | provenance | | +| test.go:149:15:149:24 | &... | test.go:150:13:150:47 | type conversion | provenance | | +| test.go:153:18:153:30 | &... | test.go:154:13:154:38 | type conversion | provenance | | +| test.go:157:14:157:22 | &... | test.go:158:13:158:28 | type conversion | provenance | | +| test.go:161:15:161:24 | &... | test.go:162:13:162:32 | type conversion | provenance | | nodes | test.go:77:13:77:16 | &... | semmle.label | &... | | test.go:78:13:78:29 | type conversion | semmle.label | type conversion | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected index cc6d95f8717..d422436065c 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Chi/ReflectedXss.expected @@ -1,10 +1,10 @@ edges -| test.go:13:12:13:16 | selection of URL | test.go:13:12:13:21 | selection of Path | -| test.go:13:12:13:21 | selection of Path | test.go:21:18:21:23 | hidden | -| test.go:21:18:21:23 | hidden | test.go:21:11:21:24 | type conversion | -| test.go:22:18:22:45 | call to URLParam | test.go:22:11:22:46 | type conversion | -| test.go:23:18:23:60 | call to URLParamFromCtx | test.go:23:11:23:61 | type conversion | -| test.go:24:18:24:71 | call to URLParam | test.go:24:11:24:72 | type conversion | +| test.go:13:12:13:16 | selection of URL | test.go:13:12:13:21 | selection of Path | provenance | | +| test.go:13:12:13:21 | selection of Path | test.go:21:18:21:23 | hidden | provenance | | +| test.go:21:18:21:23 | hidden | test.go:21:11:21:24 | type conversion | provenance | | +| test.go:22:18:22:45 | call to URLParam | test.go:22:11:22:46 | type conversion | provenance | | +| test.go:23:18:23:60 | call to URLParamFromCtx | test.go:23:11:23:61 | type conversion | provenance | | +| test.go:24:18:24:71 | call to URLParam | test.go:24:11:24:72 | type conversion | provenance | | nodes | test.go:13:12:13:16 | selection of URL | semmle.label | selection of URL | | test.go:13:12:13:21 | selection of Path | semmle.label | selection of Path | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected index 12bab8f680e..77425f059c8 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected @@ -1,14 +1,14 @@ edges -| test.go:172:2:172:6 | definition of param | test.go:173:20:173:24 | param | -| test.go:172:11:172:32 | call to Param | test.go:172:2:172:6 | definition of param | -| test.go:178:2:178:6 | definition of param | test.go:182:24:182:28 | param | -| test.go:178:11:178:32 | call to Param | test.go:178:2:178:6 | definition of param | -| test.go:182:24:182:28 | param | test.go:182:20:182:28 | ...+... | -| test.go:190:2:190:4 | definition of url | test.go:193:21:193:23 | url | -| test.go:190:9:190:26 | star expression | test.go:190:2:190:4 | definition of url | -| test.go:190:9:190:26 | star expression | test.go:190:10:190:26 | selection of URL | -| test.go:190:10:190:26 | selection of URL | test.go:190:9:190:26 | star expression | -| test.go:193:21:193:23 | url | test.go:193:21:193:32 | call to String | +| test.go:172:2:172:6 | definition of param | test.go:173:20:173:24 | param | provenance | | +| test.go:172:11:172:32 | call to Param | test.go:172:2:172:6 | definition of param | provenance | | +| test.go:178:2:178:6 | definition of param | test.go:182:24:182:28 | param | provenance | | +| test.go:178:11:178:32 | call to Param | test.go:178:2:178:6 | definition of param | provenance | | +| test.go:182:24:182:28 | param | test.go:182:20:182:28 | ...+... | provenance | | +| test.go:190:2:190:4 | definition of url | test.go:193:21:193:23 | url | provenance | | +| test.go:190:9:190:26 | star expression | test.go:190:2:190:4 | definition of url | provenance | | +| test.go:190:9:190:26 | star expression | test.go:190:10:190:26 | selection of URL | provenance | | +| test.go:190:10:190:26 | selection of URL | test.go:190:9:190:26 | star expression | provenance | | +| test.go:193:21:193:23 | url | test.go:193:21:193:32 | call to String | provenance | | nodes | test.go:172:2:172:6 | definition of param | semmle.label | definition of param | | test.go:172:11:172:32 | call to Param | semmle.label | call to Param | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected index 05a6ac2869b..f76e5fb42cd 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected @@ -1,36 +1,36 @@ edges -| test.go:15:11:15:32 | call to Param | test.go:16:16:16:20 | param | -| test.go:21:11:21:27 | call to ParamValues | test.go:22:16:22:20 | param | -| test.go:27:11:27:37 | call to QueryParam | test.go:28:16:28:20 | param | -| test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | -| test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | -| test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | -| test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | -| test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | -| test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | -| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | -| test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | -| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | -| test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | -| test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | -| test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | -| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | -| test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | -| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | -| test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | -| test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | -| test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | -| test.go:112:17:112:19 | definition of ctx | test.go:114:16:114:18 | ctx | -| test.go:113:21:113:42 | call to Param | test.go:112:17:112:19 | definition of ctx | -| test.go:114:16:114:18 | ctx | test.go:114:16:114:33 | call to Get | -| test.go:114:16:114:33 | call to Get | test.go:114:16:114:42 | type assertion | -| test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | -| test.go:130:11:130:32 | call to Param | test.go:131:20:131:32 | type conversion | -| test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | -| test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | -| test.go:149:12:149:35 | call to NewReader | test.go:150:31:150:36 | reader | -| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | -| test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | +| test.go:15:11:15:32 | call to Param | test.go:16:16:16:20 | param | provenance | | +| test.go:21:11:21:27 | call to ParamValues | test.go:22:16:22:20 | param | provenance | | +| test.go:27:11:27:37 | call to QueryParam | test.go:28:16:28:20 | param | provenance | | +| test.go:33:11:33:27 | call to QueryParams | test.go:34:16:34:20 | param | provenance | | +| test.go:39:10:39:26 | call to QueryString | test.go:40:16:40:19 | qstr | provenance | | +| test.go:45:9:45:34 | call to FormValue | test.go:46:16:46:18 | val | provenance | | +| test.go:51:2:51:30 | ... := ...[0] | test.go:52:16:52:37 | index expression | provenance | | +| test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | provenance | | +| test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | provenance | | +| test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | | +| test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | provenance | | +| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | | +| test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | | +| test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | | +| test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | provenance | | +| test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | | +| test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | provenance | | +| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | | +| test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | | +| test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | | +| test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | provenance | | +| test.go:112:17:112:19 | definition of ctx | test.go:114:16:114:18 | ctx | provenance | | +| test.go:113:21:113:42 | call to Param | test.go:112:17:112:19 | definition of ctx | provenance | | +| test.go:114:16:114:18 | ctx | test.go:114:16:114:33 | call to Get | provenance | | +| test.go:114:16:114:33 | call to Get | test.go:114:16:114:42 | type assertion | provenance | | +| test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | provenance | | +| test.go:130:11:130:32 | call to Param | test.go:131:20:131:32 | type conversion | provenance | | +| test.go:136:11:136:32 | call to Param | test.go:137:29:137:41 | type conversion | provenance | | +| test.go:148:11:148:32 | call to Param | test.go:149:30:149:34 | param | provenance | | +| test.go:149:12:149:35 | call to NewReader | test.go:150:31:150:36 | reader | provenance | | +| test.go:149:30:149:34 | param | test.go:149:12:149:35 | call to NewReader | provenance | | +| test.go:164:11:164:32 | call to Param | test.go:165:23:165:35 | type conversion | provenance | | nodes | test.go:15:11:15:32 | call to Param | semmle.label | call to Param | | test.go:16:16:16:20 | param | semmle.label | param | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected index 5c43259a2b6..04bcfdedcb0 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected @@ -1,6 +1,6 @@ edges -| test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | -| test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | +| test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | provenance | | +| test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | provenance | | nodes | test.go:221:15:221:38 | call to QueryParam | semmle.label | call to QueryParam | | test.go:222:17:222:24 | filepath | semmle.label | filepath | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected index 5161978daeb..ffbde6355cb 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected @@ -1,16 +1,16 @@ edges -| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:27:17:27:30 | untrustedInput | -| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:31:21:31:34 | untrustedInput | -| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:35:27:35:41 | untrustedString | -| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:39:31:39:45 | untrustedString | -| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... | -| jsoniter.go:27:33:27:37 | &... | jsoniter.go:28:15:28:24 | selection of field | -| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... | -| jsoniter.go:31:37:31:42 | &... | jsoniter.go:32:15:32:25 | selection of field | -| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... | -| jsoniter.go:35:44:35:49 | &... | jsoniter.go:36:15:36:25 | selection of field | -| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... | -| jsoniter.go:39:48:39:53 | &... | jsoniter.go:40:15:40:25 | selection of field | +| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:27:17:27:30 | untrustedInput | provenance | | +| jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:31:21:31:34 | untrustedInput | provenance | | +| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:35:27:35:41 | untrustedString | provenance | | +| jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:39:31:39:45 | untrustedString | provenance | | +| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... | provenance | | +| jsoniter.go:27:33:27:37 | &... | jsoniter.go:28:15:28:24 | selection of field | provenance | | +| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... | provenance | | +| jsoniter.go:31:37:31:42 | &... | jsoniter.go:32:15:32:25 | selection of field | provenance | | +| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... | provenance | | +| jsoniter.go:35:44:35:49 | &... | jsoniter.go:36:15:36:25 | selection of field | provenance | | +| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... | provenance | | +| jsoniter.go:39:48:39:53 | &... | jsoniter.go:40:15:40:25 | selection of field | provenance | | nodes | jsoniter.go:23:20:23:38 | call to getUntrustedBytes | semmle.label | call to getUntrustedBytes | | jsoniter.go:24:21:24:40 | call to getUntrustedString | semmle.label | call to getUntrustedString | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected index b53ceb0281e..45d417ca812 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gin/TaintedPath.expected @@ -1,8 +1,8 @@ edges -| Gin.go:24:15:24:33 | call to Query | Gin.go:25:10:25:17 | filepath | -| Gin.go:24:15:24:33 | call to Query | Gin.go:26:39:26:46 | filepath | -| Gin.go:24:15:24:33 | call to Query | Gin.go:27:20:27:27 | filepath | -| Gin.go:24:15:24:33 | call to Query | Gin.go:29:32:29:39 | filepath | +| Gin.go:24:15:24:33 | call to Query | Gin.go:25:10:25:17 | filepath | provenance | | +| Gin.go:24:15:24:33 | call to Query | Gin.go:26:39:26:46 | filepath | provenance | | +| Gin.go:24:15:24:33 | call to Query | Gin.go:27:20:27:27 | filepath | provenance | | +| Gin.go:24:15:24:33 | call to Query | Gin.go:29:32:29:39 | filepath | provenance | | nodes | Gin.go:24:15:24:33 | call to Query | semmle.label | call to Query | | Gin.go:25:10:25:17 | filepath | semmle.label | filepath | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected index d23496fe4c5..7e8cdc288f1 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected @@ -1,16 +1,16 @@ edges -| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | -| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | -| main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | -| main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | -| main.go:18:46:18:48 | definition of req | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | -| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | -| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | -| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | -| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | +| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | provenance | | +| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req | provenance | | +| main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | +| main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | +| main.go:18:46:18:48 | definition of req | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | +| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | provenance | | +| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | provenance | | +| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | +| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | nodes | main.go:18:46:18:48 | definition of req | semmle.label | definition of req | | main.go:18:46:18:48 | definition of req | semmle.label | definition of req | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected index b299a773b06..e64858732ed 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected @@ -1,12 +1,12 @@ edges -| gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | -| gorestful.go:17:12:17:39 | call to BodyParameter | gorestful.go:18:15:18:17 | val | -| gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | -| gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | -| gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | -| gorestful_v2.go:17:12:17:39 | call to BodyParameter | gorestful_v2.go:18:15:18:17 | val | -| gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | -| gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | +| gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | provenance | | +| gorestful.go:17:12:17:39 | call to BodyParameter | gorestful.go:18:15:18:17 | val | provenance | | +| gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | provenance | | +| gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | provenance | | +| gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | provenance | | +| gorestful_v2.go:17:12:17:39 | call to BodyParameter | gorestful_v2.go:18:15:18:17 | val | provenance | | +| gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | provenance | | +| gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | provenance | | nodes | gorestful.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful.go:15:15:15:47 | index expression | semmle.label | index expression | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected index d3215df275d..e0eb8c6cc08 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected @@ -1,9 +1,9 @@ edges -| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params | -| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:32 | selection of Form | -| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | -| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | -| EndToEnd.go:94:20:94:32 | selection of Form | EndToEnd.go:94:20:94:49 | call to Get | +| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params | provenance | | +| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:32 | selection of Form | provenance | | +| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | | +| EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | provenance | | +| EndToEnd.go:94:20:94:32 | selection of Form | EndToEnd.go:94:20:94:49 | call to Get | provenance | | nodes | EndToEnd.go:94:20:94:27 | implicit dereference | semmle.label | implicit dereference | | EndToEnd.go:94:20:94:27 | selection of Params | semmle.label | selection of Params | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected index 5352f0569bd..b9725fae820 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected @@ -1,13 +1,13 @@ edges -| EndToEnd.go:35:2:35:4 | definition of buf | EndToEnd.go:37:24:37:26 | buf | -| EndToEnd.go:36:18:36:25 | selection of Params | EndToEnd.go:36:18:36:30 | selection of Form | -| EndToEnd.go:36:18:36:30 | selection of Form | EndToEnd.go:36:18:36:47 | call to Get | -| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:35:2:35:4 | definition of buf | -| EndToEnd.go:69:22:69:29 | selection of Params | EndToEnd.go:69:22:69:34 | selection of Form | -| EndToEnd.go:69:22:69:34 | selection of Form | EndToEnd.go:69:22:69:51 | call to Get | -| Revel.go:70:22:70:29 | selection of Params | Revel.go:70:22:70:35 | selection of Query | -| examples/booking/app/init.go:36:44:36:48 | selection of URL | examples/booking/app/init.go:36:44:36:53 | selection of Path | -| examples/booking/app/init.go:40:49:40:53 | selection of URL | examples/booking/app/init.go:40:49:40:58 | selection of Path | +| EndToEnd.go:35:2:35:4 | definition of buf | EndToEnd.go:37:24:37:26 | buf | provenance | | +| EndToEnd.go:36:18:36:25 | selection of Params | EndToEnd.go:36:18:36:30 | selection of Form | provenance | | +| EndToEnd.go:36:18:36:30 | selection of Form | EndToEnd.go:36:18:36:47 | call to Get | provenance | | +| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:35:2:35:4 | definition of buf | provenance | | +| EndToEnd.go:69:22:69:29 | selection of Params | EndToEnd.go:69:22:69:34 | selection of Form | provenance | | +| EndToEnd.go:69:22:69:34 | selection of Form | EndToEnd.go:69:22:69:51 | call to Get | provenance | | +| Revel.go:70:22:70:29 | selection of Params | Revel.go:70:22:70:35 | selection of Query | provenance | | +| examples/booking/app/init.go:36:44:36:48 | selection of URL | examples/booking/app/init.go:36:44:36:53 | selection of Path | provenance | | +| examples/booking/app/init.go:40:49:40:53 | selection of URL | examples/booking/app/init.go:40:49:40:58 | selection of Path | provenance | | nodes | EndToEnd.go:35:2:35:4 | definition of buf | semmle.label | definition of buf | | EndToEnd.go:36:18:36:25 | selection of Params | semmle.label | selection of Params | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected index c9b3a4bbe58..ad3ca2e44dc 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/TaintedPath.expected @@ -1,8 +1,8 @@ edges -| EndToEnd.go:58:18:58:25 | selection of Params | EndToEnd.go:58:18:58:30 | selection of Form | -| EndToEnd.go:58:18:58:30 | selection of Form | EndToEnd.go:58:18:58:47 | call to Get | -| EndToEnd.go:64:26:64:33 | selection of Params | EndToEnd.go:64:26:64:38 | selection of Form | -| EndToEnd.go:64:26:64:38 | selection of Form | EndToEnd.go:64:26:64:55 | call to Get | +| EndToEnd.go:58:18:58:25 | selection of Params | EndToEnd.go:58:18:58:30 | selection of Form | provenance | | +| EndToEnd.go:58:18:58:30 | selection of Form | EndToEnd.go:58:18:58:47 | call to Get | provenance | | +| EndToEnd.go:64:26:64:33 | selection of Params | EndToEnd.go:64:26:64:38 | selection of Form | provenance | | +| EndToEnd.go:64:26:64:38 | selection of Form | EndToEnd.go:64:26:64:55 | call to Get | provenance | | nodes | EndToEnd.go:58:18:58:25 | selection of Params | semmle.label | selection of Params | | EndToEnd.go:58:18:58:30 | selection of Form | semmle.label | selection of Form | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected index 14e97ebe357..90e6b42ec51 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected @@ -1,27 +1,27 @@ edges -| client/main.go:16:35:16:78 | &... | client/main.go:16:35:16:78 | &... | -| client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | -| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | -| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | -| rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | -| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | -| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | -| rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | -| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | -| rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | -| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | -| server/main.go:19:56:19:61 | definition of params | client/main.go:16:35:16:78 | &... | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | -| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | -| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params | -| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params | -| server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | -| server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | +| client/main.go:16:35:16:78 | &... | client/main.go:16:35:16:78 | &... | provenance | | +| client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | provenance | | +| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | provenance | | +| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | provenance | | +| rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | provenance | | +| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | +| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | provenance | | +| rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | provenance | | +| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | +| rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | +| server/main.go:19:56:19:61 | definition of params | client/main.go:16:35:16:78 | &... | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | provenance | | +| server/main.go:19:56:19:61 | definition of params | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params | provenance | | +| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params | provenance | | +| server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | +| server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | nodes | client/main.go:16:35:16:78 | &... | semmle.label | &... | | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | semmle.label | definition of typedReq | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected index 1124ca22b05..341e2cf46ab 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected @@ -1,60 +1,60 @@ edges -| test.go:12:12:12:22 | selection of URL | test.go:12:12:12:30 | call to Query | -| test.go:12:12:12:30 | call to Query | test.go:12:12:12:44 | call to Get | -| test.go:12:12:12:44 | call to Get | test.go:15:42:15:47 | param1 | -| test.go:15:22:15:48 | call to UnescapeString | test.go:15:15:15:49 | type conversion | -| test.go:15:42:15:47 | param1 | test.go:15:22:15:48 | call to UnescapeString | -| test.go:17:2:17:36 | ... := ...[0] | test.go:18:15:18:31 | type conversion | -| test.go:17:2:17:36 | ... := ...[0] | test.go:29:22:29:25 | node | -| test.go:17:24:17:35 | selection of Body | test.go:17:2:17:36 | ... := ...[0] | -| test.go:20:2:20:48 | ... := ...[0] | test.go:21:15:21:32 | type conversion | -| test.go:20:36:20:47 | selection of Body | test.go:20:2:20:48 | ... := ...[0] | -| test.go:23:2:23:50 | ... := ...[0] | test.go:24:15:24:35 | type conversion | -| test.go:23:33:23:44 | selection of Body | test.go:23:2:23:50 | ... := ...[0] | -| test.go:26:2:26:62 | ... := ...[0] | test.go:27:15:27:36 | type conversion | -| test.go:26:45:26:56 | selection of Body | test.go:26:2:26:62 | ... := ...[0] | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:32:15:32:23 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:33:15:33:23 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:34:17:34:25 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:36:15:36:23 | tokenizer | -| test.go:31:15:31:45 | call to NewTokenizer | test.go:37:22:37:30 | tokenizer | -| test.go:31:33:31:44 | selection of Body | test.go:31:15:31:45 | call to NewTokenizer | -| test.go:32:15:32:23 | tokenizer | test.go:32:15:32:34 | call to Buffered | -| test.go:33:15:33:23 | tokenizer | test.go:33:15:33:29 | call to Raw | -| test.go:34:2:34:35 | ... := ...[1] | test.go:35:15:35:19 | value | -| test.go:34:17:34:25 | tokenizer | test.go:34:2:34:35 | ... := ...[1] | -| test.go:36:15:36:23 | tokenizer | test.go:36:15:36:30 | call to Text | -| test.go:37:22:37:30 | tokenizer | test.go:37:22:37:38 | call to Token | -| test.go:37:22:37:38 | call to Token | test.go:37:15:37:44 | type conversion | -| test.go:39:23:39:77 | call to NewTokenizerFragment | test.go:40:15:40:31 | tokenizerFragment | -| test.go:39:49:39:60 | selection of Body | test.go:39:23:39:77 | call to NewTokenizerFragment | -| test.go:40:15:40:31 | tokenizerFragment | test.go:40:15:40:42 | call to Buffered | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:23:45:31 | cleanNode | -| test.go:43:2:43:43 | ... := ...[0] | test.go:44:24:44:34 | taintedNode | -| test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | -| test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | -| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... | test.go:45:23:45:31 | cleanNode | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:23:45:31 | cleanNode | -| test.go:45:23:45:31 | cleanNode | test.go:45:22:45:31 | &... [pointer] | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:23:50:32 | cleanNode2 | -| test.go:48:2:48:44 | ... := ...[0] | test.go:49:26:49:37 | taintedNode2 | -| test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | -| test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | -| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... | test.go:50:23:50:32 | cleanNode2 | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:23:50:32 | cleanNode2 | -| test.go:50:23:50:32 | cleanNode2 | test.go:50:22:50:32 | &... [pointer] | +| test.go:12:12:12:22 | selection of URL | test.go:12:12:12:30 | call to Query | provenance | | +| test.go:12:12:12:30 | call to Query | test.go:12:12:12:44 | call to Get | provenance | | +| test.go:12:12:12:44 | call to Get | test.go:15:42:15:47 | param1 | provenance | | +| test.go:15:22:15:48 | call to UnescapeString | test.go:15:15:15:49 | type conversion | provenance | | +| test.go:15:42:15:47 | param1 | test.go:15:22:15:48 | call to UnescapeString | provenance | | +| test.go:17:2:17:36 | ... := ...[0] | test.go:18:15:18:31 | type conversion | provenance | | +| test.go:17:2:17:36 | ... := ...[0] | test.go:29:22:29:25 | node | provenance | | +| test.go:17:24:17:35 | selection of Body | test.go:17:2:17:36 | ... := ...[0] | provenance | | +| test.go:20:2:20:48 | ... := ...[0] | test.go:21:15:21:32 | type conversion | provenance | | +| test.go:20:36:20:47 | selection of Body | test.go:20:2:20:48 | ... := ...[0] | provenance | | +| test.go:23:2:23:50 | ... := ...[0] | test.go:24:15:24:35 | type conversion | provenance | | +| test.go:23:33:23:44 | selection of Body | test.go:23:2:23:50 | ... := ...[0] | provenance | | +| test.go:26:2:26:62 | ... := ...[0] | test.go:27:15:27:36 | type conversion | provenance | | +| test.go:26:45:26:56 | selection of Body | test.go:26:2:26:62 | ... := ...[0] | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:32:15:32:23 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:33:15:33:23 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:34:17:34:25 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:36:15:36:23 | tokenizer | provenance | | +| test.go:31:15:31:45 | call to NewTokenizer | test.go:37:22:37:30 | tokenizer | provenance | | +| test.go:31:33:31:44 | selection of Body | test.go:31:15:31:45 | call to NewTokenizer | provenance | | +| test.go:32:15:32:23 | tokenizer | test.go:32:15:32:34 | call to Buffered | provenance | | +| test.go:33:15:33:23 | tokenizer | test.go:33:15:33:29 | call to Raw | provenance | | +| test.go:34:2:34:35 | ... := ...[1] | test.go:35:15:35:19 | value | provenance | | +| test.go:34:17:34:25 | tokenizer | test.go:34:2:34:35 | ... := ...[1] | provenance | | +| test.go:36:15:36:23 | tokenizer | test.go:36:15:36:30 | call to Text | provenance | | +| test.go:37:22:37:30 | tokenizer | test.go:37:22:37:38 | call to Token | provenance | | +| test.go:37:22:37:38 | call to Token | test.go:37:15:37:44 | type conversion | provenance | | +| test.go:39:23:39:77 | call to NewTokenizerFragment | test.go:40:15:40:31 | tokenizerFragment | provenance | | +| test.go:39:49:39:60 | selection of Body | test.go:39:23:39:77 | call to NewTokenizerFragment | provenance | | +| test.go:40:15:40:31 | tokenizerFragment | test.go:40:15:40:42 | call to Buffered | provenance | | +| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | +| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | +| test.go:42:6:42:14 | definition of cleanNode | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:43:2:43:43 | ... := ...[0] | test.go:44:24:44:34 | taintedNode | provenance | | +| test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | provenance | | +| test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | provenance | | +| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | +| test.go:45:22:45:31 | &... [pointer] | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:45:23:45:31 | cleanNode | test.go:45:22:45:31 | &... [pointer] | provenance | | +| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | provenance | | +| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | provenance | | +| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:48:2:48:44 | ... := ...[0] | test.go:49:26:49:37 | taintedNode2 | provenance | | +| test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | provenance | | +| test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | provenance | | +| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | +| test.go:50:22:50:32 | &... [pointer] | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:50:23:50:32 | cleanNode2 | test.go:50:22:50:32 | &... [pointer] | provenance | | nodes | test.go:12:12:12:22 | selection of URL | semmle.label | selection of URL | | test.go:12:12:12:30 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected index a36880faf24..9171f32e84d 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/SqlInjection.expected @@ -1,6 +1,6 @@ edges -| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | -| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | +| test.go:56:2:56:42 | ... := ...[0] | test.go:57:29:57:40 | selection of Value | provenance | | +| test.go:57:29:57:40 | selection of Value | test.go:57:11:57:41 | call to EscapeString | provenance | | nodes | test.go:56:2:56:42 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:57:11:57:41 | call to EscapeString | semmle.label | call to EscapeString | diff --git a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected index 3a0c58c7ee9..e5ad074d25d 100644 --- a/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected +++ b/go/ql/test/query-tests/InconsistentCode/UnhandledCloseWritableHandle/UnhandledCloseWritableHandle.expected @@ -1,19 +1,19 @@ edges -| tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | -| tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | -| tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | -| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | -| tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | -| tests.go:33:29:33:29 | f | tests.go:12:32:12:32 | definition of f | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | -| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | -| tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | -| tests.go:47:29:47:29 | f | tests.go:12:32:12:32 | definition of f | -| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | -| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | -| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | -| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | +| tests.go:8:24:8:24 | definition of f | tests.go:9:8:9:8 | f | provenance | | +| tests.go:12:32:12:32 | definition of f | tests.go:13:13:13:13 | capture variable f | provenance | | +| tests.go:13:13:13:13 | capture variable f | tests.go:14:3:14:3 | f | provenance | | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:32:21:32:21 | f | provenance | | +| tests.go:31:5:31:78 | ... := ...[0] | tests.go:33:29:33:29 | f | provenance | | +| tests.go:32:21:32:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | +| tests.go:33:29:33:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:46:21:46:21 | f | provenance | | +| tests.go:45:5:45:76 | ... := ...[0] | tests.go:47:29:47:29 | f | provenance | | +| tests.go:46:21:46:21 | f | tests.go:8:24:8:24 | definition of f | provenance | | +| tests.go:47:29:47:29 | f | tests.go:12:32:12:32 | definition of f | provenance | | +| tests.go:54:5:54:78 | ... := ...[0] | tests.go:56:3:56:3 | f | provenance | | +| tests.go:66:5:66:76 | ... := ...[0] | tests.go:68:3:68:3 | f | provenance | | +| tests.go:108:5:108:78 | ... := ...[0] | tests.go:110:9:110:9 | f | provenance | | +| tests.go:125:5:125:78 | ... := ...[0] | tests.go:129:3:129:3 | f | provenance | | nodes | tests.go:8:24:8:24 | definition of f | semmle.label | definition of f | | tests.go:9:8:9:8 | f | semmle.label | f | diff --git a/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected b/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected index 029366069d2..4486b4e0962 100644 --- a/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected +++ b/go/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegexp/IncompleteHostnameRegexp.expected @@ -1,5 +1,5 @@ edges -| IncompleteHostnameRegexp.go:11:8:11:36 | "^((www\|beta).)?example.com/" | IncompleteHostnameRegexp.go:12:38:12:39 | re | +| IncompleteHostnameRegexp.go:11:8:11:36 | "^((www\|beta).)?example.com/" | IncompleteHostnameRegexp.go:12:38:12:39 | re | provenance | | nodes | IncompleteHostnameRegexp.go:11:8:11:36 | "^((www\|beta).)?example.com/" | semmle.label | "^((www\|beta).)?example.com/" | | IncompleteHostnameRegexp.go:12:38:12:39 | re | semmle.label | re | diff --git a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected index 307906f7e9b..34d4180a849 100644 --- a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected +++ b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected @@ -1,9 +1,9 @@ edges -| TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:13:18:13:30 | call to Query | -| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:16:29:16:40 | tainted_path | -| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:20:57:20:68 | tainted_path | -| TaintedPath.go:20:57:20:68 | tainted_path | TaintedPath.go:20:28:20:69 | call to Join | -| tst.go:14:2:14:39 | ... := ...[1] | tst.go:17:41:17:56 | selection of Filename | +| TaintedPath.go:13:18:13:22 | selection of URL | TaintedPath.go:13:18:13:30 | call to Query | provenance | | +| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:16:29:16:40 | tainted_path | provenance | | +| TaintedPath.go:13:18:13:30 | call to Query | TaintedPath.go:20:57:20:68 | tainted_path | provenance | | +| TaintedPath.go:20:57:20:68 | tainted_path | TaintedPath.go:20:28:20:69 | call to Join | provenance | | +| tst.go:14:2:14:39 | ... := ...[1] | tst.go:17:41:17:56 | selection of Filename | provenance | | nodes | TaintedPath.go:13:18:13:22 | selection of URL | semmle.label | selection of URL | | TaintedPath.go:13:18:13:30 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected b/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected index da8dc7ed50e..bddeaf06e62 100644 --- a/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected +++ b/go/ql/test/query-tests/Security/CWE-022/UnsafeUnzipSymlink.expected @@ -1,8 +1,8 @@ edges -| UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | UnsafeUnzipSymlink.go:112:13:112:20 | linkName | -| UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | UnsafeUnzipSymlink.go:112:23:112:30 | fileName | -| UnsafeUnzipSymlink.go:126:17:126:31 | selection of Linkname | UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | -| UnsafeUnzipSymlink.go:126:34:126:44 | selection of Name | UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | +| UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | UnsafeUnzipSymlink.go:112:13:112:20 | linkName | provenance | | +| UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | UnsafeUnzipSymlink.go:112:23:112:30 | fileName | provenance | | +| UnsafeUnzipSymlink.go:126:17:126:31 | selection of Linkname | UnsafeUnzipSymlink.go:111:19:111:26 | definition of linkName | provenance | | +| UnsafeUnzipSymlink.go:126:34:126:44 | selection of Name | UnsafeUnzipSymlink.go:111:29:111:36 | definition of fileName | provenance | | nodes | UnsafeUnzipSymlink.go:31:15:31:29 | selection of Linkname | semmle.label | selection of Linkname | | UnsafeUnzipSymlink.go:31:32:31:42 | selection of Name | semmle.label | selection of Name | diff --git a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected index f10f103c963..5ff0ca886c2 100644 --- a/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected +++ b/go/ql/test/query-tests/Security/CWE-022/ZipSlip.expected @@ -1,16 +1,16 @@ edges -| UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | -| UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | -| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | -| UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | -| UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | -| ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:12:24:12:29 | selection of Name | -| ZipSlip.go:12:3:12:30 | ... := ...[0] | ZipSlip.go:14:20:14:20 | p | -| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | ... := ...[0] | -| tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:16:23:16:33 | selection of Name | -| tarslip.go:16:23:16:33 | selection of Name | tarslip.go:16:14:16:34 | call to Dir | -| tst.go:23:2:43:2 | range statement[1] | tst.go:29:20:29:23 | path | +| UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | provenance | | +| UnsafeUnzipSymlinkGood.go:61:53:61:61 | candidate | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | provenance | | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | provenance | | +| UnsafeUnzipSymlinkGood.go:72:3:72:25 | ... := ...[0] | UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | provenance | | +| UnsafeUnzipSymlinkGood.go:76:24:76:38 | selection of Linkname | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | provenance | | +| UnsafeUnzipSymlinkGood.go:76:70:76:80 | selection of Name | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | provenance | | +| ZipSlip.go:11:2:15:2 | range statement[1] | ZipSlip.go:12:24:12:29 | selection of Name | provenance | | +| ZipSlip.go:12:3:12:30 | ... := ...[0] | ZipSlip.go:14:20:14:20 | p | provenance | | +| ZipSlip.go:12:24:12:29 | selection of Name | ZipSlip.go:12:3:12:30 | ... := ...[0] | provenance | | +| tarslip.go:15:2:15:30 | ... := ...[0] | tarslip.go:16:23:16:33 | selection of Name | provenance | | +| tarslip.go:16:23:16:33 | selection of Name | tarslip.go:16:14:16:34 | call to Dir | provenance | | +| tst.go:23:2:43:2 | range statement[1] | tst.go:29:20:29:23 | path | provenance | | nodes | UnsafeUnzipSymlinkGood.go:52:24:52:32 | definition of candidate | semmle.label | definition of candidate | | UnsafeUnzipSymlinkGood.go:61:31:61:62 | call to Join | semmle.label | call to Join | diff --git a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected index 01f6d0a17f6..06df5262ca2 100644 --- a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected @@ -1,75 +1,75 @@ edges -| ArgumentInjection.go:9:10:9:16 | selection of URL | ArgumentInjection.go:9:10:9:24 | call to Query | -| ArgumentInjection.go:9:10:9:24 | call to Query | ArgumentInjection.go:10:31:10:34 | path | -| CommandInjection.go:9:13:9:19 | selection of URL | CommandInjection.go:9:13:9:27 | call to Query | -| CommandInjection.go:9:13:9:27 | call to Query | CommandInjection.go:10:22:10:28 | cmdName | -| GitSubcommands.go:10:13:10:19 | selection of URL | GitSubcommands.go:10:13:10:27 | call to Query | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:12:31:12:37 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:13:31:13:37 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:14:30:14:36 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:15:35:15:41 | tainted | -| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:16:36:16:42 | tainted | -| SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:13:25:13:31 | tainted | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:14:23:14:33 | slice expression | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:39:31:39:37 | tainted | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:68:31:68:37 | tainted | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:80:23:80:29 | tainted | -| SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | -| SanitizingDoubleDash.go:13:25:13:31 | tainted | SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | -| SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | SanitizingDoubleDash.go:14:23:14:33 | slice element node | -| SanitizingDoubleDash.go:14:23:14:33 | slice element node | SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | -| SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | SanitizingDoubleDash.go:14:23:14:33 | slice expression | -| SanitizingDoubleDash.go:39:14:39:44 | call to append | SanitizingDoubleDash.go:40:23:40:30 | arrayLit | -| SanitizingDoubleDash.go:39:31:39:37 | tainted | SanitizingDoubleDash.go:39:14:39:44 | call to append | -| SanitizingDoubleDash.go:53:14:53:35 | call to append | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | -| SanitizingDoubleDash.go:53:21:53:28 | arrayLit | SanitizingDoubleDash.go:53:14:53:35 | call to append | -| SanitizingDoubleDash.go:68:14:68:38 | call to append | SanitizingDoubleDash.go:69:21:69:28 | arrayLit | -| SanitizingDoubleDash.go:68:31:68:37 | tainted | SanitizingDoubleDash.go:68:14:68:38 | call to append | -| SanitizingDoubleDash.go:69:14:69:35 | call to append | SanitizingDoubleDash.go:70:23:70:30 | arrayLit | -| SanitizingDoubleDash.go:69:21:69:28 | arrayLit | SanitizingDoubleDash.go:69:14:69:35 | call to append | -| SanitizingDoubleDash.go:92:13:92:19 | selection of URL | SanitizingDoubleDash.go:92:13:92:27 | call to Query | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:95:25:95:31 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:96:24:96:34 | slice expression | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:100:31:100:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:101:24:101:34 | slice expression | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:105:30:105:36 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:111:37:111:43 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:117:31:117:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:123:31:123:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:129:21:129:28 | arrayLit | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:136:31:136:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:142:31:142:37 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:148:30:148:36 | tainted | -| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:152:24:152:30 | tainted | -| SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | -| SanitizingDoubleDash.go:95:25:95:31 | tainted | SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | -| SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | SanitizingDoubleDash.go:96:24:96:34 | slice element node | -| SanitizingDoubleDash.go:96:24:96:34 | slice element node | SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | -| SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | SanitizingDoubleDash.go:96:24:96:34 | slice expression | -| SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | -| SanitizingDoubleDash.go:100:31:100:37 | tainted | SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | -| SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | SanitizingDoubleDash.go:101:24:101:34 | slice element node | -| SanitizingDoubleDash.go:101:24:101:34 | slice element node | SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | -| SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | SanitizingDoubleDash.go:101:24:101:34 | slice expression | -| SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | -| SanitizingDoubleDash.go:105:30:105:36 | tainted | SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | -| SanitizingDoubleDash.go:111:14:111:44 | call to append | SanitizingDoubleDash.go:112:24:112:31 | arrayLit | -| SanitizingDoubleDash.go:111:37:111:43 | tainted | SanitizingDoubleDash.go:111:14:111:44 | call to append | -| SanitizingDoubleDash.go:117:14:117:44 | call to append | SanitizingDoubleDash.go:118:24:118:31 | arrayLit | -| SanitizingDoubleDash.go:117:31:117:37 | tainted | SanitizingDoubleDash.go:117:14:117:44 | call to append | -| SanitizingDoubleDash.go:123:14:123:38 | call to append | SanitizingDoubleDash.go:124:24:124:31 | arrayLit | -| SanitizingDoubleDash.go:123:31:123:37 | tainted | SanitizingDoubleDash.go:123:14:123:38 | call to append | -| SanitizingDoubleDash.go:129:14:129:35 | call to append | SanitizingDoubleDash.go:130:24:130:31 | arrayLit | -| SanitizingDoubleDash.go:129:21:129:28 | arrayLit | SanitizingDoubleDash.go:129:14:129:35 | call to append | -| SanitizingDoubleDash.go:136:14:136:38 | call to append | SanitizingDoubleDash.go:137:24:137:31 | arrayLit | -| SanitizingDoubleDash.go:136:31:136:37 | tainted | SanitizingDoubleDash.go:136:14:136:38 | call to append | -| SanitizingDoubleDash.go:142:14:142:38 | call to append | SanitizingDoubleDash.go:143:21:143:28 | arrayLit | -| SanitizingDoubleDash.go:142:31:142:37 | tainted | SanitizingDoubleDash.go:142:14:142:38 | call to append | -| SanitizingDoubleDash.go:143:14:143:35 | call to append | SanitizingDoubleDash.go:144:24:144:31 | arrayLit | -| SanitizingDoubleDash.go:143:21:143:28 | arrayLit | SanitizingDoubleDash.go:143:14:143:35 | call to append | +| ArgumentInjection.go:9:10:9:16 | selection of URL | ArgumentInjection.go:9:10:9:24 | call to Query | provenance | | +| ArgumentInjection.go:9:10:9:24 | call to Query | ArgumentInjection.go:10:31:10:34 | path | provenance | | +| CommandInjection.go:9:13:9:19 | selection of URL | CommandInjection.go:9:13:9:27 | call to Query | provenance | | +| CommandInjection.go:9:13:9:27 | call to Query | CommandInjection.go:10:22:10:28 | cmdName | provenance | | +| GitSubcommands.go:10:13:10:19 | selection of URL | GitSubcommands.go:10:13:10:27 | call to Query | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:12:31:12:37 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:13:31:13:37 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:14:30:14:36 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:15:35:15:41 | tainted | provenance | | +| GitSubcommands.go:10:13:10:27 | call to Query | GitSubcommands.go:16:36:16:42 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:13:25:13:31 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:14:23:14:33 | slice expression | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:39:31:39:37 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:68:31:68:37 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:80:23:80:29 | tainted | provenance | | +| SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | provenance | | +| SanitizingDoubleDash.go:13:25:13:31 | tainted | SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | provenance | | +| SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | SanitizingDoubleDash.go:14:23:14:33 | slice element node | provenance | | +| SanitizingDoubleDash.go:14:23:14:33 | slice element node | SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | provenance | | +| SanitizingDoubleDash.go:14:23:14:33 | slice expression [array] | SanitizingDoubleDash.go:14:23:14:33 | slice expression | provenance | | +| SanitizingDoubleDash.go:39:14:39:44 | call to append | SanitizingDoubleDash.go:40:23:40:30 | arrayLit | provenance | | +| SanitizingDoubleDash.go:39:31:39:37 | tainted | SanitizingDoubleDash.go:39:14:39:44 | call to append | provenance | | +| SanitizingDoubleDash.go:53:14:53:35 | call to append | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | provenance | | +| SanitizingDoubleDash.go:53:21:53:28 | arrayLit | SanitizingDoubleDash.go:53:14:53:35 | call to append | provenance | | +| SanitizingDoubleDash.go:68:14:68:38 | call to append | SanitizingDoubleDash.go:69:21:69:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:68:31:68:37 | tainted | SanitizingDoubleDash.go:68:14:68:38 | call to append | provenance | | +| SanitizingDoubleDash.go:69:14:69:35 | call to append | SanitizingDoubleDash.go:70:23:70:30 | arrayLit | provenance | | +| SanitizingDoubleDash.go:69:21:69:28 | arrayLit | SanitizingDoubleDash.go:69:14:69:35 | call to append | provenance | | +| SanitizingDoubleDash.go:92:13:92:19 | selection of URL | SanitizingDoubleDash.go:92:13:92:27 | call to Query | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:95:25:95:31 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:96:24:96:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:100:31:100:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:101:24:101:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:105:30:105:36 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:111:37:111:43 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:117:31:117:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:123:31:123:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:129:21:129:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:136:31:136:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:142:31:142:37 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:148:30:148:36 | tainted | provenance | | +| SanitizingDoubleDash.go:92:13:92:27 | call to Query | SanitizingDoubleDash.go:152:24:152:30 | tainted | provenance | | +| SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | provenance | | +| SanitizingDoubleDash.go:95:25:95:31 | tainted | SanitizingDoubleDash.go:95:15:95:32 | array literal [array] | provenance | | +| SanitizingDoubleDash.go:96:24:96:31 | arrayLit [array] | SanitizingDoubleDash.go:96:24:96:34 | slice element node | provenance | | +| SanitizingDoubleDash.go:96:24:96:34 | slice element node | SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | provenance | | +| SanitizingDoubleDash.go:96:24:96:34 | slice expression [array] | SanitizingDoubleDash.go:96:24:96:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | provenance | | +| SanitizingDoubleDash.go:100:31:100:37 | tainted | SanitizingDoubleDash.go:100:15:100:38 | array literal [array] | provenance | | +| SanitizingDoubleDash.go:101:24:101:31 | arrayLit [array] | SanitizingDoubleDash.go:101:24:101:34 | slice element node | provenance | | +| SanitizingDoubleDash.go:101:24:101:34 | slice element node | SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | provenance | | +| SanitizingDoubleDash.go:101:24:101:34 | slice expression [array] | SanitizingDoubleDash.go:101:24:101:34 | slice expression | provenance | | +| SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | SanitizingDoubleDash.go:106:24:106:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:105:30:105:36 | tainted | SanitizingDoubleDash.go:105:15:105:37 | slice literal [array] | provenance | | +| SanitizingDoubleDash.go:111:14:111:44 | call to append | SanitizingDoubleDash.go:112:24:112:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:111:37:111:43 | tainted | SanitizingDoubleDash.go:111:14:111:44 | call to append | provenance | | +| SanitizingDoubleDash.go:117:14:117:44 | call to append | SanitizingDoubleDash.go:118:24:118:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:117:31:117:37 | tainted | SanitizingDoubleDash.go:117:14:117:44 | call to append | provenance | | +| SanitizingDoubleDash.go:123:14:123:38 | call to append | SanitizingDoubleDash.go:124:24:124:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:123:31:123:37 | tainted | SanitizingDoubleDash.go:123:14:123:38 | call to append | provenance | | +| SanitizingDoubleDash.go:129:14:129:35 | call to append | SanitizingDoubleDash.go:130:24:130:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:129:21:129:28 | arrayLit | SanitizingDoubleDash.go:129:14:129:35 | call to append | provenance | | +| SanitizingDoubleDash.go:136:14:136:38 | call to append | SanitizingDoubleDash.go:137:24:137:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:136:31:136:37 | tainted | SanitizingDoubleDash.go:136:14:136:38 | call to append | provenance | | +| SanitizingDoubleDash.go:142:14:142:38 | call to append | SanitizingDoubleDash.go:143:21:143:28 | arrayLit | provenance | | +| SanitizingDoubleDash.go:142:31:142:37 | tainted | SanitizingDoubleDash.go:142:14:142:38 | call to append | provenance | | +| SanitizingDoubleDash.go:143:14:143:35 | call to append | SanitizingDoubleDash.go:144:24:144:31 | arrayLit | provenance | | +| SanitizingDoubleDash.go:143:21:143:28 | arrayLit | SanitizingDoubleDash.go:143:14:143:35 | call to append | provenance | | nodes | ArgumentInjection.go:9:10:9:16 | selection of URL | semmle.label | selection of URL | | ArgumentInjection.go:9:10:9:24 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected index e0e028fff91..4bdeaa67be0 100644 --- a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected +++ b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected @@ -1,8 +1,8 @@ edges -| StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:13:2:13:5 | rows | -| StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... | -| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:13:12:13:19 | &... | -| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:14:22:14:28 | cmdName | +| StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:13:2:13:5 | rows | provenance | | +| StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... | provenance | | +| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:13:12:13:19 | &... | provenance | | +| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:14:22:14:28 | cmdName | provenance | | nodes | StoredCommand.go:11:2:11:27 | ... := ...[0] | semmle.label | ... := ...[0] | | StoredCommand.go:13:2:13:5 | rows | semmle.label | rows | diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected index 81144cc3c86..634c21befb3 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected @@ -1,52 +1,52 @@ edges -| ReflectedXss.go:11:15:11:20 | selection of Form | ReflectedXss.go:11:15:11:36 | call to Get | -| ReflectedXss.go:11:15:11:36 | call to Get | ReflectedXss.go:14:44:14:51 | username | -| contenttype.go:11:11:11:16 | selection of Form | contenttype.go:11:11:11:28 | call to Get | -| contenttype.go:11:11:11:28 | call to Get | contenttype.go:17:11:17:22 | type conversion | -| contenttype.go:49:11:49:16 | selection of Form | contenttype.go:49:11:49:28 | call to Get | -| contenttype.go:49:11:49:28 | call to Get | contenttype.go:53:34:53:37 | data | -| contenttype.go:63:10:63:28 | call to FormValue | contenttype.go:64:52:64:55 | data | -| contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | -| contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | -| contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | -| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | -| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | -| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | -| reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | -| reflectedxsstest.go:33:17:33:56 | []type{args} [array] | reflectedxsstest.go:33:17:33:56 | call to Sprintf | -| reflectedxsstest.go:33:17:33:56 | call to Sprintf | reflectedxsstest.go:33:10:33:57 | type conversion | -| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | -| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | call to Sprintf | -| reflectedxsstest.go:34:17:34:61 | []type{args} [array] | reflectedxsstest.go:34:17:34:61 | call to Sprintf | -| reflectedxsstest.go:34:17:34:61 | call to Sprintf | reflectedxsstest.go:34:10:34:62 | type conversion | -| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | []type{args} [array] | -| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | call to Sprintf | -| reflectedxsstest.go:38:2:38:35 | ... := ...[0] | reflectedxsstest.go:39:16:39:21 | reader | -| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:40:14:40:17 | part | -| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:42:2:42:5 | part | -| reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | -| reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | -| reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:46:44:53 | partName | -| reflectedxsstest.go:41:2:41:10 | definition of byteSlice | reflectedxsstest.go:45:10:45:18 | byteSlice | -| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | -| reflectedxsstest.go:44:17:44:54 | []type{args} [array] | reflectedxsstest.go:44:17:44:54 | call to Sprintf | -| reflectedxsstest.go:44:17:44:54 | call to Sprintf | reflectedxsstest.go:44:10:44:55 | type conversion | -| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | -| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | call to Sprintf | -| reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:51:14:51:26 | call to Query | -| reflectedxsstest.go:51:14:51:26 | call to Query | reflectedxsstest.go:54:11:54:21 | type conversion | -| tst.go:14:15:14:20 | selection of Form | tst.go:14:15:14:36 | call to Get | -| tst.go:14:15:14:36 | call to Get | tst.go:18:32:18:32 | a | -| tst.go:18:19:18:38 | call to Join | tst.go:18:12:18:39 | type conversion | -| tst.go:18:32:18:32 | a | tst.go:18:19:18:38 | call to Join | -| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:34 | call to Get | -| tst.go:48:14:48:34 | call to Get | tst.go:53:12:53:26 | type conversion | -| websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | -| websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | -| websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | -| websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | -| websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | -| websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | +| ReflectedXss.go:11:15:11:20 | selection of Form | ReflectedXss.go:11:15:11:36 | call to Get | provenance | | +| ReflectedXss.go:11:15:11:36 | call to Get | ReflectedXss.go:14:44:14:51 | username | provenance | | +| contenttype.go:11:11:11:16 | selection of Form | contenttype.go:11:11:11:28 | call to Get | provenance | | +| contenttype.go:11:11:11:28 | call to Get | contenttype.go:17:11:17:22 | type conversion | provenance | | +| contenttype.go:49:11:49:16 | selection of Form | contenttype.go:49:11:49:28 | call to Get | provenance | | +| contenttype.go:49:11:49:28 | call to Get | contenttype.go:53:34:53:37 | data | provenance | | +| contenttype.go:63:10:63:28 | call to FormValue | contenttype.go:64:52:64:55 | data | provenance | | +| contenttype.go:73:10:73:28 | call to FormValue | contenttype.go:79:11:79:14 | data | provenance | | +| contenttype.go:88:10:88:28 | call to FormValue | contenttype.go:91:4:91:7 | data | provenance | | +| contenttype.go:113:10:113:28 | call to FormValue | contenttype.go:114:50:114:53 | data | provenance | | +| reflectedxsstest.go:31:2:31:44 | ... := ...[0] | reflectedxsstest.go:32:34:32:37 | file | provenance | | +| reflectedxsstest.go:31:2:31:44 | ... := ...[1] | reflectedxsstest.go:34:46:34:60 | selection of Filename | provenance | | +| reflectedxsstest.go:32:2:32:38 | ... := ...[0] | reflectedxsstest.go:33:49:33:55 | content | provenance | | +| reflectedxsstest.go:32:34:32:37 | file | reflectedxsstest.go:32:2:32:38 | ... := ...[0] | provenance | | +| reflectedxsstest.go:33:17:33:56 | []type{args} [array] | reflectedxsstest.go:33:17:33:56 | call to Sprintf | provenance | | +| reflectedxsstest.go:33:17:33:56 | call to Sprintf | reflectedxsstest.go:33:10:33:57 | type conversion | provenance | | +| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | []type{args} [array] | provenance | | +| reflectedxsstest.go:33:49:33:55 | content | reflectedxsstest.go:33:17:33:56 | call to Sprintf | provenance | | +| reflectedxsstest.go:34:17:34:61 | []type{args} [array] | reflectedxsstest.go:34:17:34:61 | call to Sprintf | provenance | | +| reflectedxsstest.go:34:17:34:61 | call to Sprintf | reflectedxsstest.go:34:10:34:62 | type conversion | provenance | | +| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | []type{args} [array] | provenance | | +| reflectedxsstest.go:34:46:34:60 | selection of Filename | reflectedxsstest.go:34:17:34:61 | call to Sprintf | provenance | | +| reflectedxsstest.go:38:2:38:35 | ... := ...[0] | reflectedxsstest.go:39:16:39:21 | reader | provenance | | +| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:40:14:40:17 | part | provenance | | +| reflectedxsstest.go:39:2:39:32 | ... := ...[0] | reflectedxsstest.go:42:2:42:5 | part | provenance | | +| reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | provenance | | +| reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | provenance | | +| reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:46:44:53 | partName | provenance | | +| reflectedxsstest.go:41:2:41:10 | definition of byteSlice | reflectedxsstest.go:45:10:45:18 | byteSlice | provenance | | +| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | provenance | | +| reflectedxsstest.go:44:17:44:54 | []type{args} [array] | reflectedxsstest.go:44:17:44:54 | call to Sprintf | provenance | | +| reflectedxsstest.go:44:17:44:54 | call to Sprintf | reflectedxsstest.go:44:10:44:55 | type conversion | provenance | | +| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | provenance | | +| reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | call to Sprintf | provenance | | +| reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:51:14:51:26 | call to Query | provenance | | +| reflectedxsstest.go:51:14:51:26 | call to Query | reflectedxsstest.go:54:11:54:21 | type conversion | provenance | | +| tst.go:14:15:14:20 | selection of Form | tst.go:14:15:14:36 | call to Get | provenance | | +| tst.go:14:15:14:36 | call to Get | tst.go:18:32:18:32 | a | provenance | | +| tst.go:18:19:18:38 | call to Join | tst.go:18:12:18:39 | type conversion | provenance | | +| tst.go:18:32:18:32 | a | tst.go:18:19:18:38 | call to Join | provenance | | +| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:34 | call to Get | provenance | | +| tst.go:48:14:48:34 | call to Get | tst.go:53:12:53:26 | type conversion | provenance | | +| websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | provenance | | +| websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | provenance | | +| websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | provenance | | +| websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | provenance | | +| websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | provenance | | +| websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | provenance | | nodes | ReflectedXss.go:11:15:11:20 | selection of Form | semmle.label | selection of Form | | ReflectedXss.go:11:15:11:36 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected index f51eda4c93c..c399840db9a 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected @@ -1,10 +1,10 @@ edges -| StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | -| stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | -| stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | -| stored.go:25:29:25:33 | &... | stored.go:25:29:25:33 | &... | -| stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | -| stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | +| StoredXss.go:13:21:13:31 | call to Name | StoredXss.go:13:21:13:36 | ...+... | provenance | | +| stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | provenance | | +| stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | provenance | | +| stored.go:25:29:25:33 | &... | stored.go:25:29:25:33 | &... | provenance | | +| stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | provenance | | +| stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | provenance | | nodes | StoredXss.go:13:21:13:31 | call to Name | semmle.label | call to Name | | StoredXss.go:13:21:13:36 | ...+... | semmle.label | ...+... | diff --git a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 43bbd3a3fe7..066f4a272f0 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -1,112 +1,112 @@ edges -| SqlInjection.go:10:7:11:30 | []type{args} [array] | SqlInjection.go:10:7:11:30 | call to Sprintf | -| SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | -| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | -| SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | -| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | []type{args} [array] | -| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | -| issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | -| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | -| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | -| issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | -| issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | -| issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | -| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | -| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | -| issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | -| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | -| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | -| issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | -| issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | -| issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | -| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | []type{args} [array] | -| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | -| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | -| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | -| issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | -| issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | -| issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | -| issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | -| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | []type{args} [array] | -| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | call to Sprintf | -| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | -| main.go:15:11:15:84 | []type{args} [array] | main.go:15:11:15:84 | call to Sprintf | -| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | -| main.go:15:63:15:75 | call to Query | main.go:15:63:15:83 | index expression | -| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | []type{args} [array] | -| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | call to Sprintf | -| main.go:16:11:16:85 | []type{args} [array] | main.go:16:11:16:85 | call to Sprintf | -| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | -| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | []type{args} [array] | -| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | call to Sprintf | -| main.go:28:17:31:2 | &... [pointer, Category] | main.go:34:3:34:13 | RequestData [pointer, Category] | -| main.go:28:18:31:2 | struct literal [Category] | main.go:28:17:31:2 | &... [pointer, Category] | -| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | -| main.go:30:13:30:27 | call to Query | main.go:30:13:30:39 | index expression | -| main.go:30:13:30:39 | index expression | main.go:28:18:31:2 | struct literal [Category] | -| main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | -| main.go:33:7:34:23 | call to Sprintf | main.go:35:11:35:11 | q | -| main.go:34:3:34:13 | RequestData [pointer, Category] | main.go:34:3:34:13 | implicit dereference [Category] | -| main.go:34:3:34:13 | implicit dereference [Category] | main.go:34:3:34:22 | selection of Category | -| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | []type{args} [array] | -| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | call to Sprintf | -| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:40:2:40:12 | RequestData [pointer, Category] | -| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | -| main.go:40:2:40:12 | RequestData [pointer, Category] | main.go:40:2:40:12 | implicit dereference [Category] | -| main.go:40:2:40:12 | implicit dereference [Category] | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | -| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | -| main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | -| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [Category] | -| main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | -| main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | -| main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit dereference [Category] | -| main.go:43:3:43:13 | implicit dereference [Category] | main.go:43:3:43:22 | selection of Category | -| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | []type{args} [array] | -| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | call to Sprintf | -| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:49:4:49:14 | RequestData [pointer, Category] | -| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | -| main.go:49:3:49:14 | star expression [Category] | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | -| main.go:49:4:49:14 | RequestData [pointer, Category] | main.go:49:3:49:14 | star expression [Category] | -| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | -| main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | -| main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [Category] | -| main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | -| main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | -| main.go:52:3:52:13 | RequestData [pointer, Category] | main.go:52:3:52:13 | implicit dereference [Category] | -| main.go:52:3:52:13 | implicit dereference [Category] | main.go:52:3:52:22 | selection of Category | -| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | []type{args} [array] | -| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | call to Sprintf | -| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:58:4:58:14 | RequestData [pointer, Category] | -| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | -| main.go:58:3:58:14 | star expression [Category] | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | -| main.go:58:4:58:14 | RequestData [pointer, Category] | main.go:58:3:58:14 | star expression [Category] | -| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | -| main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | -| main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [Category] | -| main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | -| main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | -| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | []type{args} [array] | -| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | call to Sprintf | -| main.go:61:4:61:15 | star expression [Category] | main.go:61:3:61:25 | selection of Category | -| main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | -| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:64:22:64:27 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:66:32:66:37 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:69:17:69:22 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:70:20:70:25 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:71:29:71:34 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:72:30:72:35 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:73:29:73:34 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:78:23:78:28 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:79:23:79:28 | filter | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:80:22:80:27 | filter | -| mongoDB.go:42:28:42:41 | untrustedInput | mongoDB.go:42:19:42:42 | struct literal | -| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:57:22:57:29 | pipeline | -| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:81:18:81:25 | pipeline | -| mongoDB.go:50:34:50:39 | filter | mongoDB.go:50:23:50:40 | struct literal | +| SqlInjection.go:10:7:11:30 | []type{args} [array] | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | | +| SqlInjection.go:10:7:11:30 | call to Sprintf | SqlInjection.go:12:11:12:11 | q | provenance | | +| SqlInjection.go:11:3:11:9 | selection of URL | SqlInjection.go:11:3:11:17 | call to Query | provenance | | +| SqlInjection.go:11:3:11:17 | call to Query | SqlInjection.go:11:3:11:29 | index expression | provenance | | +| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | []type{args} [array] | provenance | | +| SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | | +| issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | provenance | | +| issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | | +| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | provenance | | +| issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | provenance | | +| issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | provenance | | +| issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | provenance | | +| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | provenance | | +| issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | provenance | | +| issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | provenance | | +| issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | | +| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | provenance | | +| issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | provenance | | +| issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | provenance | | +| issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | provenance | | +| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | []type{args} [array] | provenance | | +| issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | provenance | | +| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | provenance | | +| issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | provenance | | +| issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | provenance | | +| issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | provenance | | +| issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | provenance | | +| issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | provenance | | +| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | []type{args} [array] | provenance | | +| issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | call to Sprintf | provenance | | +| main.go:11:11:11:16 | selection of Form | main.go:11:11:11:28 | index expression | provenance | | +| main.go:15:11:15:84 | []type{args} [array] | main.go:15:11:15:84 | call to Sprintf | provenance | | +| main.go:15:63:15:67 | selection of URL | main.go:15:63:15:75 | call to Query | provenance | | +| main.go:15:63:15:75 | call to Query | main.go:15:63:15:83 | index expression | provenance | | +| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | []type{args} [array] | provenance | | +| main.go:15:63:15:83 | index expression | main.go:15:11:15:84 | call to Sprintf | provenance | | +| main.go:16:11:16:85 | []type{args} [array] | main.go:16:11:16:85 | call to Sprintf | provenance | | +| main.go:16:63:16:70 | selection of Header | main.go:16:63:16:84 | call to Get | provenance | | +| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | []type{args} [array] | provenance | | +| main.go:16:63:16:84 | call to Get | main.go:16:11:16:85 | call to Sprintf | provenance | | +| main.go:28:17:31:2 | &... [pointer, Category] | main.go:34:3:34:13 | RequestData [pointer, Category] | provenance | | +| main.go:28:18:31:2 | struct literal [Category] | main.go:28:17:31:2 | &... [pointer, Category] | provenance | | +| main.go:30:13:30:19 | selection of URL | main.go:30:13:30:27 | call to Query | provenance | | +| main.go:30:13:30:27 | call to Query | main.go:30:13:30:39 | index expression | provenance | | +| main.go:30:13:30:39 | index expression | main.go:28:18:31:2 | struct literal [Category] | provenance | | +| main.go:33:7:34:23 | []type{args} [array] | main.go:33:7:34:23 | call to Sprintf | provenance | | +| main.go:33:7:34:23 | call to Sprintf | main.go:35:11:35:11 | q | provenance | | +| main.go:34:3:34:13 | RequestData [pointer, Category] | main.go:34:3:34:13 | implicit dereference [Category] | provenance | | +| main.go:34:3:34:13 | implicit dereference [Category] | main.go:34:3:34:22 | selection of Category | provenance | | +| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | []type{args} [array] | provenance | | +| main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | call to Sprintf | provenance | | +| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:40:2:40:12 | RequestData [pointer, Category] | provenance | | +| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | provenance | | +| main.go:40:2:40:12 | RequestData [pointer, Category] | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | +| main.go:40:2:40:12 | implicit dereference [Category] | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | provenance | | +| main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | | +| main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | provenance | | +| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | +| main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | provenance | | +| main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | provenance | | +| main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit dereference [Category] | provenance | | +| main.go:43:3:43:13 | implicit dereference [Category] | main.go:43:3:43:22 | selection of Category | provenance | | +| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | []type{args} [array] | provenance | | +| main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | call to Sprintf | provenance | | +| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:49:4:49:14 | RequestData [pointer, Category] | provenance | | +| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | provenance | | +| main.go:49:3:49:14 | star expression [Category] | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | provenance | | +| main.go:49:4:49:14 | RequestData [pointer, Category] | main.go:49:3:49:14 | star expression [Category] | provenance | | +| main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | | +| main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | provenance | | +| main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [Category] | provenance | | +| main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | provenance | | +| main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | provenance | | +| main.go:52:3:52:13 | RequestData [pointer, Category] | main.go:52:3:52:13 | implicit dereference [Category] | provenance | | +| main.go:52:3:52:13 | implicit dereference [Category] | main.go:52:3:52:22 | selection of Category | provenance | | +| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | []type{args} [array] | provenance | | +| main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | call to Sprintf | provenance | | +| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:58:4:58:14 | RequestData [pointer, Category] | provenance | | +| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | provenance | | +| main.go:58:3:58:14 | star expression [Category] | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | provenance | | +| main.go:58:4:58:14 | RequestData [pointer, Category] | main.go:58:3:58:14 | star expression [Category] | provenance | | +| main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | | +| main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | provenance | | +| main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [Category] | provenance | | +| main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | provenance | | +| main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | provenance | | +| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | []type{args} [array] | provenance | | +| main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | call to Sprintf | provenance | | +| main.go:61:4:61:15 | star expression [Category] | main.go:61:3:61:25 | selection of Category | provenance | | +| main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | provenance | | +| mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:64:22:64:27 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:66:32:66:37 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:69:17:69:22 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:70:20:70:25 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:71:29:71:34 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:72:30:72:35 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:73:29:73:34 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:78:23:78:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:79:23:79:28 | filter | provenance | | +| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:80:22:80:27 | filter | provenance | | +| mongoDB.go:42:28:42:41 | untrustedInput | mongoDB.go:42:19:42:42 | struct literal | provenance | | +| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:57:22:57:29 | pipeline | provenance | | +| mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:81:18:81:25 | pipeline | provenance | | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:50:23:50:40 | struct literal | provenance | | nodes | SqlInjection.go:10:7:11:30 | []type{args} [array] | semmle.label | []type{args} [array] | | SqlInjection.go:10:7:11:30 | call to Sprintf | semmle.label | call to Sprintf | diff --git a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected index de5b7c7a833..05147badb06 100644 --- a/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected +++ b/go/ql/test/query-tests/Security/CWE-089/StringBreak.expected @@ -1,11 +1,11 @@ edges -| StringBreak.go:10:2:10:40 | ... := ...[0] | StringBreak.go:14:47:14:57 | versionJSON | -| StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | StringBreakMismatched.go:13:29:13:47 | type conversion | -| StringBreakMismatched.go:13:13:13:62 | call to Replace | StringBreakMismatched.go:17:26:17:32 | escaped | -| StringBreakMismatched.go:13:29:13:47 | type conversion | StringBreakMismatched.go:13:13:13:62 | call to Replace | -| StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | StringBreakMismatched.go:25:29:25:47 | type conversion | -| StringBreakMismatched.go:25:13:25:61 | call to Replace | StringBreakMismatched.go:29:27:29:33 | escaped | -| StringBreakMismatched.go:25:29:25:47 | type conversion | StringBreakMismatched.go:25:13:25:61 | call to Replace | +| StringBreak.go:10:2:10:40 | ... := ...[0] | StringBreak.go:14:47:14:57 | versionJSON | provenance | | +| StringBreakMismatched.go:12:2:12:40 | ... := ...[0] | StringBreakMismatched.go:13:29:13:47 | type conversion | provenance | | +| StringBreakMismatched.go:13:13:13:62 | call to Replace | StringBreakMismatched.go:17:26:17:32 | escaped | provenance | | +| StringBreakMismatched.go:13:29:13:47 | type conversion | StringBreakMismatched.go:13:13:13:62 | call to Replace | provenance | | +| StringBreakMismatched.go:24:2:24:40 | ... := ...[0] | StringBreakMismatched.go:25:29:25:47 | type conversion | provenance | | +| StringBreakMismatched.go:25:13:25:61 | call to Replace | StringBreakMismatched.go:29:27:29:33 | escaped | provenance | | +| StringBreakMismatched.go:25:29:25:47 | type conversion | StringBreakMismatched.go:25:13:25:61 | call to Replace | provenance | | nodes | StringBreak.go:10:2:10:40 | ... := ...[0] | semmle.label | ... := ...[0] | | StringBreak.go:14:47:14:57 | versionJSON | semmle.label | versionJSON | diff --git a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected index 036c11ff51e..e139ab4f5e5 100644 --- a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected +++ b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected @@ -1,24 +1,24 @@ edges -| AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | AllocationSizeOverflow.go:10:14:10:21 | jsonData | -| AllocationSizeOverflow.go:10:14:10:21 | jsonData | AllocationSizeOverflow.go:10:10:10:22 | call to len | -| tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:26:10:29 | data | -| tst2.go:10:26:10:29 | data | tst2.go:10:22:10:30 | call to len | -| tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:26:15:29 | data | -| tst2.go:15:26:15:29 | data | tst2.go:15:22:15:30 | call to len | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:7:26:7:33 | jsonData | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:24:20:24:27 | jsonData | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:32:20:32:27 | jsonData | -| tst3.go:7:26:7:33 | jsonData | tst3.go:7:22:7:34 | call to len | -| tst3.go:24:20:24:27 | jsonData | tst3.go:24:16:24:28 | call to len | -| tst3.go:32:20:32:27 | jsonData | tst3.go:32:16:32:28 | call to len | -| tst.go:14:2:14:30 | ... = ...[0] | tst.go:15:26:15:33 | jsonData | -| tst.go:15:26:15:33 | jsonData | tst.go:15:22:15:34 | call to len | -| tst.go:20:2:20:31 | ... = ...[0] | tst.go:21:26:21:33 | jsonData | -| tst.go:21:26:21:33 | jsonData | tst.go:21:22:21:34 | call to len | -| tst.go:26:2:26:31 | ... = ...[0] | tst.go:27:30:27:37 | jsonData | -| tst.go:27:30:27:37 | jsonData | tst.go:27:26:27:38 | call to len | -| tst.go:34:2:34:30 | ... = ...[0] | tst.go:35:26:35:33 | jsonData | -| tst.go:35:26:35:33 | jsonData | tst.go:35:22:35:34 | call to len | +| AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | AllocationSizeOverflow.go:10:14:10:21 | jsonData | provenance | | +| AllocationSizeOverflow.go:10:14:10:21 | jsonData | AllocationSizeOverflow.go:10:10:10:22 | call to len | provenance | | +| tst2.go:9:2:9:37 | ... := ...[0] | tst2.go:10:26:10:29 | data | provenance | | +| tst2.go:10:26:10:29 | data | tst2.go:10:22:10:30 | call to len | provenance | | +| tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:26:15:29 | data | provenance | | +| tst2.go:15:26:15:29 | data | tst2.go:15:22:15:30 | call to len | provenance | | +| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:7:26:7:33 | jsonData | provenance | | +| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:24:20:24:27 | jsonData | provenance | | +| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:32:20:32:27 | jsonData | provenance | | +| tst3.go:7:26:7:33 | jsonData | tst3.go:7:22:7:34 | call to len | provenance | | +| tst3.go:24:20:24:27 | jsonData | tst3.go:24:16:24:28 | call to len | provenance | | +| tst3.go:32:20:32:27 | jsonData | tst3.go:32:16:32:28 | call to len | provenance | | +| tst.go:14:2:14:30 | ... = ...[0] | tst.go:15:26:15:33 | jsonData | provenance | | +| tst.go:15:26:15:33 | jsonData | tst.go:15:22:15:34 | call to len | provenance | | +| tst.go:20:2:20:31 | ... = ...[0] | tst.go:21:26:21:33 | jsonData | provenance | | +| tst.go:21:26:21:33 | jsonData | tst.go:21:22:21:34 | call to len | provenance | | +| tst.go:26:2:26:31 | ... = ...[0] | tst.go:27:30:27:37 | jsonData | provenance | | +| tst.go:27:30:27:37 | jsonData | tst.go:27:26:27:38 | call to len | provenance | | +| tst.go:34:2:34:30 | ... = ...[0] | tst.go:35:26:35:33 | jsonData | provenance | | +| tst.go:35:26:35:33 | jsonData | tst.go:35:22:35:34 | call to len | provenance | | nodes | AllocationSizeOverflow.go:6:2:6:33 | ... := ...[0] | semmle.label | ... := ...[0] | | AllocationSizeOverflow.go:10:10:10:22 | call to len | semmle.label | call to len | diff --git a/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected b/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected index 99042f7a497..c62c6126648 100644 --- a/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected +++ b/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected @@ -1,5 +1,5 @@ edges -| test.go:14:2:14:4 | definition of buf | test.go:17:10:17:12 | buf | +| test.go:14:2:14:4 | definition of buf | test.go:17:10:17:12 | buf | provenance | | nodes | test.go:14:2:14:4 | definition of buf | semmle.label | definition of buf | | test.go:17:10:17:12 | buf | semmle.label | buf | diff --git a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected index c58d2d26d5e..98daffabbaf 100644 --- a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -1,56 +1,56 @@ edges -| klog.go:20:3:25:3 | range statement[1] | klog.go:20:13:20:19 | definition of headers | -| klog.go:20:13:20:19 | definition of headers | klog.go:21:27:21:33 | headers | -| klog.go:20:30:20:37 | selection of Header | klog.go:20:3:25:3 | range statement[1] | -| klog.go:21:4:24:4 | range statement[1] | klog.go:21:11:21:16 | definition of header | -| klog.go:21:11:21:16 | definition of header | klog.go:22:15:22:20 | header | -| klog.go:21:27:21:33 | headers | klog.go:21:4:24:4 | range statement[1] | -| klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get | -| overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | -| passwords.go:8:12:8:12 | definition of x | passwords.go:9:14:9:14 | x | -| passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | definition of x | -| passwords.go:34:28:34:35 | password | passwords.go:34:14:34:35 | ...+... | -| passwords.go:36:2:36:5 | definition of obj1 | passwords.go:39:14:39:17 | obj1 | -| passwords.go:36:10:38:2 | struct literal | passwords.go:36:2:36:5 | definition of obj1 | -| passwords.go:37:13:37:13 | x | passwords.go:36:10:38:2 | struct literal | -| passwords.go:41:2:41:5 | definition of obj2 | passwords.go:44:14:44:17 | obj2 | -| passwords.go:41:10:43:2 | struct literal | passwords.go:41:2:41:5 | definition of obj2 | -| passwords.go:42:6:42:13 | password | passwords.go:41:10:43:2 | struct literal | -| passwords.go:46:6:46:9 | definition of obj3 | passwords.go:47:14:47:17 | obj3 | -| passwords.go:48:11:48:18 | password | passwords.go:46:6:46:9 | definition of obj3 | -| passwords.go:85:2:85:14 | definition of utilityObject | passwords.go:88:14:88:26 | utilityObject | -| passwords.go:85:19:87:2 | struct literal | passwords.go:85:2:85:14 | definition of utilityObject | -| passwords.go:86:16:86:36 | call to make | passwords.go:85:19:87:2 | struct literal | -| passwords.go:90:2:90:7 | definition of secret | passwords.go:91:23:91:28 | secret | -| passwords.go:90:12:90:19 | password | passwords.go:90:2:90:7 | definition of secret | -| passwords.go:101:33:101:40 | password | passwords.go:101:15:101:40 | ...+... | -| passwords.go:107:34:107:41 | password | passwords.go:107:16:107:41 | ...+... | -| passwords.go:112:33:112:40 | password | passwords.go:112:15:112:40 | ...+... | -| passwords.go:116:28:116:36 | password1 | passwords.go:116:28:116:45 | call to String | -| passwords.go:116:28:116:45 | call to String | passwords.go:116:14:116:45 | ...+... | -| passwords.go:118:2:118:7 | definition of config | passwords.go:125:14:125:19 | config | -| passwords.go:118:2:118:7 | definition of config [x] | passwords.go:126:14:126:19 | config [x] | -| passwords.go:118:2:118:7 | definition of config [y] | passwords.go:127:14:127:19 | config [y] | -| passwords.go:118:12:123:2 | struct literal | passwords.go:118:2:118:7 | definition of config | -| passwords.go:118:12:123:2 | struct literal [x] | passwords.go:118:2:118:7 | definition of config [x] | -| passwords.go:118:12:123:2 | struct literal [y] | passwords.go:118:2:118:7 | definition of config [y] | -| passwords.go:119:13:119:13 | x | passwords.go:118:12:123:2 | struct literal | -| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal | -| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal [x] | -| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal | -| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal [y] | -| passwords.go:126:14:126:19 | config [x] | passwords.go:126:14:126:21 | selection of x | -| passwords.go:127:14:127:19 | config [y] | passwords.go:127:14:127:21 | selection of y | -| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:12:2:12:6 | query [pointer, Description] | -| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | -| protobuf.go:12:2:12:6 | implicit dereference [Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | -| protobuf.go:12:2:12:6 | query [pointer, Description] | protobuf.go:12:2:12:6 | implicit dereference [Description] | -| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [Description] | -| protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:14:14:14:35 | call to GetDescription | -| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | -| protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | -| protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | -| protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | +| klog.go:20:3:25:3 | range statement[1] | klog.go:20:13:20:19 | definition of headers | provenance | | +| klog.go:20:13:20:19 | definition of headers | klog.go:21:27:21:33 | headers | provenance | | +| klog.go:20:30:20:37 | selection of Header | klog.go:20:3:25:3 | range statement[1] | provenance | | +| klog.go:21:4:24:4 | range statement[1] | klog.go:21:11:21:16 | definition of header | provenance | | +| klog.go:21:11:21:16 | definition of header | klog.go:22:15:22:20 | header | provenance | | +| klog.go:21:27:21:33 | headers | klog.go:21:4:24:4 | range statement[1] | provenance | | +| klog.go:28:13:28:20 | selection of Header | klog.go:28:13:28:41 | call to Get | provenance | | +| overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | provenance | | +| passwords.go:8:12:8:12 | definition of x | passwords.go:9:14:9:14 | x | provenance | | +| passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | definition of x | provenance | | +| passwords.go:34:28:34:35 | password | passwords.go:34:14:34:35 | ...+... | provenance | | +| passwords.go:36:2:36:5 | definition of obj1 | passwords.go:39:14:39:17 | obj1 | provenance | | +| passwords.go:36:10:38:2 | struct literal | passwords.go:36:2:36:5 | definition of obj1 | provenance | | +| passwords.go:37:13:37:13 | x | passwords.go:36:10:38:2 | struct literal | provenance | | +| passwords.go:41:2:41:5 | definition of obj2 | passwords.go:44:14:44:17 | obj2 | provenance | | +| passwords.go:41:10:43:2 | struct literal | passwords.go:41:2:41:5 | definition of obj2 | provenance | | +| passwords.go:42:6:42:13 | password | passwords.go:41:10:43:2 | struct literal | provenance | | +| passwords.go:46:6:46:9 | definition of obj3 | passwords.go:47:14:47:17 | obj3 | provenance | | +| passwords.go:48:11:48:18 | password | passwords.go:46:6:46:9 | definition of obj3 | provenance | | +| passwords.go:85:2:85:14 | definition of utilityObject | passwords.go:88:14:88:26 | utilityObject | provenance | | +| passwords.go:85:19:87:2 | struct literal | passwords.go:85:2:85:14 | definition of utilityObject | provenance | | +| passwords.go:86:16:86:36 | call to make | passwords.go:85:19:87:2 | struct literal | provenance | | +| passwords.go:90:2:90:7 | definition of secret | passwords.go:91:23:91:28 | secret | provenance | | +| passwords.go:90:12:90:19 | password | passwords.go:90:2:90:7 | definition of secret | provenance | | +| passwords.go:101:33:101:40 | password | passwords.go:101:15:101:40 | ...+... | provenance | | +| passwords.go:107:34:107:41 | password | passwords.go:107:16:107:41 | ...+... | provenance | | +| passwords.go:112:33:112:40 | password | passwords.go:112:15:112:40 | ...+... | provenance | | +| passwords.go:116:28:116:36 | password1 | passwords.go:116:28:116:45 | call to String | provenance | | +| passwords.go:116:28:116:45 | call to String | passwords.go:116:14:116:45 | ...+... | provenance | | +| passwords.go:118:2:118:7 | definition of config | passwords.go:125:14:125:19 | config | provenance | | +| passwords.go:118:2:118:7 | definition of config [x] | passwords.go:126:14:126:19 | config [x] | provenance | | +| passwords.go:118:2:118:7 | definition of config [y] | passwords.go:127:14:127:19 | config [y] | provenance | | +| passwords.go:118:12:123:2 | struct literal | passwords.go:118:2:118:7 | definition of config | provenance | | +| passwords.go:118:12:123:2 | struct literal [x] | passwords.go:118:2:118:7 | definition of config [x] | provenance | | +| passwords.go:118:12:123:2 | struct literal [y] | passwords.go:118:2:118:7 | definition of config [y] | provenance | | +| passwords.go:119:13:119:13 | x | passwords.go:118:12:123:2 | struct literal | provenance | | +| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal | provenance | | +| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal [x] | provenance | | +| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal | provenance | | +| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal [y] | provenance | | +| passwords.go:126:14:126:19 | config [x] | passwords.go:126:14:126:21 | selection of x | provenance | | +| passwords.go:127:14:127:19 | config [y] | passwords.go:127:14:127:21 | selection of y | provenance | | +| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:12:2:12:6 | query [pointer, Description] | provenance | | +| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | provenance | | +| protobuf.go:12:2:12:6 | implicit dereference [Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | provenance | | +| protobuf.go:12:2:12:6 | query [pointer, Description] | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | +| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | +| protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:14:14:14:35 | call to GetDescription | provenance | | +| protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | provenance | | +| protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | provenance | | +| protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | provenance | | +| protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | provenance | | nodes | klog.go:20:3:25:3 | range statement[1] | semmle.label | range statement[1] | | klog.go:20:13:20:19 | definition of headers | semmle.label | definition of headers | diff --git a/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected b/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected index 2376ab7a7cf..b81d24f2665 100644 --- a/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected +++ b/go/ql/test/query-tests/Security/CWE-322/InsecureHostKeyCallback.expected @@ -1,20 +1,20 @@ edges -| InsecureHostKeyCallbackExample.go:16:4:18:4 | function literal | InsecureHostKeyCallbackExample.go:15:20:18:5 | type conversion | -| InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | InsecureHostKeyCallbackExample.go:39:20:39:27 | callback | -| InsecureHostKeyCallbackExample.go:32:3:34:3 | function literal | InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | -| InsecureHostKeyCallbackExample.go:45:3:47:3 | function literal | InsecureHostKeyCallbackExample.go:52:20:52:48 | type conversion | -| InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | InsecureHostKeyCallbackExample.go:62:20:62:27 | callback | -| InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | InsecureHostKeyCallbackExample.go:78:28:78:35 | callback | -| InsecureHostKeyCallbackExample.go:94:3:94:43 | ... := ...[0] | InsecureHostKeyCallbackExample.go:95:28:95:35 | callback | -| InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | -| InsecureHostKeyCallbackExample.go:103:3:105:3 | function literal | InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | -| InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | -| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | -| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | -| InsecureHostKeyCallbackExample.go:110:3:115:3 | function literal | InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | -| InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | -| InsecureHostKeyCallbackExample.go:118:35:118:61 | call to InsecureIgnoreHostKey | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | -| InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | +| InsecureHostKeyCallbackExample.go:16:4:18:4 | function literal | InsecureHostKeyCallbackExample.go:15:20:18:5 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | InsecureHostKeyCallbackExample.go:39:20:39:27 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:32:3:34:3 | function literal | InsecureHostKeyCallbackExample.go:31:14:34:4 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:45:3:47:3 | function literal | InsecureHostKeyCallbackExample.go:52:20:52:48 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | InsecureHostKeyCallbackExample.go:62:20:62:27 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | InsecureHostKeyCallbackExample.go:78:28:78:35 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:94:3:94:43 | ... := ...[0] | InsecureHostKeyCallbackExample.go:95:28:95:35 | callback | provenance | | +| InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | provenance | | +| InsecureHostKeyCallbackExample.go:103:3:105:3 | function literal | InsecureHostKeyCallbackExample.go:102:22:105:4 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:107:35:107:50 | insecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | provenance | | +| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | provenance | | +| InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | provenance | | +| InsecureHostKeyCallbackExample.go:110:3:115:3 | function literal | InsecureHostKeyCallbackExample.go:109:31:115:4 | type conversion | provenance | | +| InsecureHostKeyCallbackExample.go:117:35:117:59 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | provenance | | +| InsecureHostKeyCallbackExample.go:118:35:118:61 | call to InsecureIgnoreHostKey | InsecureHostKeyCallbackExample.go:58:39:58:46 | definition of callback | provenance | | +| InsecureHostKeyCallbackExample.go:120:44:120:68 | potentiallySecureCallback | InsecureHostKeyCallbackExample.go:68:48:68:55 | definition of callback | provenance | | nodes | InsecureHostKeyCallbackExample.go:15:20:18:5 | type conversion | semmle.label | type conversion | | InsecureHostKeyCallbackExample.go:16:4:18:4 | function literal | semmle.label | function literal | diff --git a/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected b/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected index fb1058af01c..556b1722b59 100644 --- a/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected +++ b/go/ql/test/query-tests/Security/CWE-326/InsufficientKeySize.expected @@ -1,10 +1,10 @@ edges -| InsufficientKeySize.go:13:10:13:13 | 1024 | InsufficientKeySize.go:14:31:14:34 | size | -| InsufficientKeySize.go:18:7:18:10 | 1024 | InsufficientKeySize.go:25:11:25:14 | definition of size | -| InsufficientKeySize.go:25:11:25:14 | definition of size | InsufficientKeySize.go:26:31:26:34 | size | -| InsufficientKeySize.go:30:13:30:16 | 1024 | InsufficientKeySize.go:32:32:32:38 | keyBits | -| InsufficientKeySize.go:44:13:44:16 | 1024 | InsufficientKeySize.go:47:32:47:38 | keyBits | -| InsufficientKeySize.go:61:21:61:24 | 1024 | InsufficientKeySize.go:67:31:67:37 | keyBits | +| InsufficientKeySize.go:13:10:13:13 | 1024 | InsufficientKeySize.go:14:31:14:34 | size | provenance | | +| InsufficientKeySize.go:18:7:18:10 | 1024 | InsufficientKeySize.go:25:11:25:14 | definition of size | provenance | | +| InsufficientKeySize.go:25:11:25:14 | definition of size | InsufficientKeySize.go:26:31:26:34 | size | provenance | | +| InsufficientKeySize.go:30:13:30:16 | 1024 | InsufficientKeySize.go:32:32:32:38 | keyBits | provenance | | +| InsufficientKeySize.go:44:13:44:16 | 1024 | InsufficientKeySize.go:47:32:47:38 | keyBits | provenance | | +| InsufficientKeySize.go:61:21:61:24 | 1024 | InsufficientKeySize.go:67:31:67:37 | keyBits | provenance | | nodes | InsufficientKeySize.go:9:31:9:34 | 1024 | semmle.label | 1024 | | InsufficientKeySize.go:13:10:13:13 | 1024 | semmle.label | 1024 | diff --git a/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected b/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected index e47a4768465..c0dc967a16f 100644 --- a/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected +++ b/go/ql/test/query-tests/Security/CWE-327/UnsafeTLS.expected @@ -1,44 +1,44 @@ edges -| UnsafeTLS.go:131:14:131:29 | selection of VersionTLS13 | UnsafeTLS.go:136:16:136:22 | version | -| UnsafeTLS.go:133:14:133:29 | selection of VersionSSL30 | UnsafeTLS.go:136:16:136:22 | version | -| UnsafeTLS.go:260:5:260:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:261:5:261:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:262:5:262:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:263:5:263:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:264:5:264:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:265:5:265:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | -| UnsafeTLS.go:273:5:273:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:272:18:274:4 | slice literal | -| UnsafeTLS.go:281:5:281:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:280:18:282:4 | slice literal | -| UnsafeTLS.go:289:5:289:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:288:18:290:4 | slice literal | -| UnsafeTLS.go:297:5:297:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:296:18:298:4 | slice literal | -| UnsafeTLS.go:305:5:305:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:304:18:306:4 | slice literal | -| UnsafeTLS.go:313:5:313:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:312:18:314:4 | slice literal | -| UnsafeTLS.go:329:53:329:93 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:329:25:329:94 | call to append | -| UnsafeTLS.go:334:13:334:38 | call to InsecureCipherSuites | UnsafeTLS.go:336:54:336:57 | selection of ID | -| UnsafeTLS.go:336:54:336:57 | selection of ID | UnsafeTLS.go:336:26:336:58 | call to append | -| UnsafeTLS.go:342:13:342:38 | call to InsecureCipherSuites | UnsafeTLS.go:344:40:344:43 | selection of ID | -| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:344:26:344:37 | cipherSuites | -| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:346:25:346:36 | cipherSuites | -| UnsafeTLS.go:344:26:344:37 | cipherSuites | UnsafeTLS.go:344:19:344:44 | call to append | -| UnsafeTLS.go:344:40:344:43 | selection of ID | UnsafeTLS.go:344:19:344:44 | call to append | -| UnsafeTLS.go:351:13:351:38 | call to InsecureCipherSuites | UnsafeTLS.go:353:40:353:51 | selection of ID | -| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:353:26:353:37 | cipherSuites | -| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:355:25:355:36 | cipherSuites | -| UnsafeTLS.go:353:26:353:37 | cipherSuites | UnsafeTLS.go:353:19:353:52 | call to append | -| UnsafeTLS.go:353:40:353:51 | selection of ID | UnsafeTLS.go:353:19:353:52 | call to append | -| UnsafeTLS.go:363:5:363:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:362:18:364:4 | slice literal | -| UnsafeTLS.go:371:5:371:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:370:18:372:4 | slice literal | -| UnsafeTLS.go:379:5:379:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:378:18:380:4 | slice literal | -| UnsafeTLS.go:387:5:387:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:386:18:388:4 | slice literal | -| UnsafeTLS.go:395:5:395:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:394:18:396:4 | slice literal | -| UnsafeTLS.go:403:4:403:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:402:33:404:3 | slice literal | -| UnsafeTLS.go:410:4:410:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:409:31:411:3 | slice literal | -| UnsafeTLS.go:419:6:419:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:418:19:420:5 | slice literal | -| UnsafeTLS.go:426:6:426:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:425:19:427:5 | slice literal | -| UnsafeTLS.go:433:6:433:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:432:19:434:5 | slice literal | -| UnsafeTLS.go:443:6:443:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:442:19:444:5 | slice literal | -| UnsafeTLS.go:450:6:450:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:449:19:451:5 | slice literal | -| UnsafeTLS.go:457:6:457:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:456:19:458:5 | slice literal | +| UnsafeTLS.go:131:14:131:29 | selection of VersionTLS13 | UnsafeTLS.go:136:16:136:22 | version | provenance | | +| UnsafeTLS.go:133:14:133:29 | selection of VersionSSL30 | UnsafeTLS.go:136:16:136:22 | version | provenance | | +| UnsafeTLS.go:260:5:260:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:261:5:261:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:262:5:262:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:263:5:263:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:264:5:264:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:265:5:265:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:259:18:266:4 | slice literal | provenance | | +| UnsafeTLS.go:273:5:273:32 | selection of TLS_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:272:18:274:4 | slice literal | provenance | | +| UnsafeTLS.go:281:5:281:39 | selection of TLS_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:280:18:282:4 | slice literal | provenance | | +| UnsafeTLS.go:289:5:289:40 | selection of TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | UnsafeTLS.go:288:18:290:4 | slice literal | provenance | | +| UnsafeTLS.go:297:5:297:38 | selection of TLS_ECDHE_RSA_WITH_RC4_128_SHA | UnsafeTLS.go:296:18:298:4 | slice literal | provenance | | +| UnsafeTLS.go:305:5:305:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:304:18:306:4 | slice literal | provenance | | +| UnsafeTLS.go:313:5:313:45 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:312:18:314:4 | slice literal | provenance | | +| UnsafeTLS.go:329:53:329:93 | selection of TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:329:25:329:94 | call to append | provenance | | +| UnsafeTLS.go:334:13:334:38 | call to InsecureCipherSuites | UnsafeTLS.go:336:54:336:57 | selection of ID | provenance | | +| UnsafeTLS.go:336:54:336:57 | selection of ID | UnsafeTLS.go:336:26:336:58 | call to append | provenance | | +| UnsafeTLS.go:342:13:342:38 | call to InsecureCipherSuites | UnsafeTLS.go:344:40:344:43 | selection of ID | provenance | | +| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:344:26:344:37 | cipherSuites | provenance | | +| UnsafeTLS.go:344:19:344:44 | call to append | UnsafeTLS.go:346:25:346:36 | cipherSuites | provenance | | +| UnsafeTLS.go:344:26:344:37 | cipherSuites | UnsafeTLS.go:344:19:344:44 | call to append | provenance | | +| UnsafeTLS.go:344:40:344:43 | selection of ID | UnsafeTLS.go:344:19:344:44 | call to append | provenance | | +| UnsafeTLS.go:351:13:351:38 | call to InsecureCipherSuites | UnsafeTLS.go:353:40:353:51 | selection of ID | provenance | | +| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:353:26:353:37 | cipherSuites | provenance | | +| UnsafeTLS.go:353:19:353:52 | call to append | UnsafeTLS.go:355:25:355:36 | cipherSuites | provenance | | +| UnsafeTLS.go:353:26:353:37 | cipherSuites | UnsafeTLS.go:353:19:353:52 | call to append | provenance | | +| UnsafeTLS.go:353:40:353:51 | selection of ID | UnsafeTLS.go:353:19:353:52 | call to append | provenance | | +| UnsafeTLS.go:363:5:363:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:362:18:364:4 | slice literal | provenance | | +| UnsafeTLS.go:371:5:371:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:370:18:372:4 | slice literal | provenance | | +| UnsafeTLS.go:379:5:379:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:378:18:380:4 | slice literal | provenance | | +| UnsafeTLS.go:387:5:387:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:386:18:388:4 | slice literal | provenance | | +| UnsafeTLS.go:395:5:395:47 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:394:18:396:4 | slice literal | provenance | | +| UnsafeTLS.go:403:4:403:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:402:33:404:3 | slice literal | provenance | | +| UnsafeTLS.go:410:4:410:46 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:409:31:411:3 | slice literal | provenance | | +| UnsafeTLS.go:419:6:419:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:418:19:420:5 | slice literal | provenance | | +| UnsafeTLS.go:426:6:426:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:425:19:427:5 | slice literal | provenance | | +| UnsafeTLS.go:433:6:433:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:432:19:434:5 | slice literal | provenance | | +| UnsafeTLS.go:443:6:443:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:442:19:444:5 | slice literal | provenance | | +| UnsafeTLS.go:450:6:450:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:449:19:451:5 | slice literal | provenance | | +| UnsafeTLS.go:457:6:457:48 | selection of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | UnsafeTLS.go:456:19:458:5 | slice literal | provenance | | nodes | UnsafeTLS.go:21:23:21:23 | 0 | semmle.label | 0 | | UnsafeTLS.go:25:23:25:23 | 0 | semmle.label | 0 | diff --git a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected index a107cd75df0..53cfd40145d 100644 --- a/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected +++ b/go/ql/test/query-tests/Security/CWE-327/WeakCryptoAlgorithm.expected @@ -1,8 +1,8 @@ edges -| Crypto.go:16:9:16:16 | password | Crypto.go:19:25:19:27 | buf | -| Crypto.go:16:9:16:16 | password | Crypto.go:22:10:22:12 | buf | -| Crypto.go:16:9:16:16 | password | Crypto.go:25:16:25:18 | buf | -| Crypto.go:16:9:16:16 | password | Crypto.go:28:11:28:13 | buf | +| Crypto.go:16:9:16:16 | password | Crypto.go:19:25:19:27 | buf | provenance | | +| Crypto.go:16:9:16:16 | password | Crypto.go:22:10:22:12 | buf | provenance | | +| Crypto.go:16:9:16:16 | password | Crypto.go:25:16:25:18 | buf | provenance | | +| Crypto.go:16:9:16:16 | password | Crypto.go:28:11:28:13 | buf | provenance | | nodes | Crypto.go:16:9:16:16 | password | semmle.label | password | | Crypto.go:19:25:19:27 | buf | semmle.label | buf | diff --git a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected index 2ba01cedce0..2e92d105daa 100644 --- a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected +++ b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected @@ -1,19 +1,19 @@ edges -| sample.go:15:10:15:64 | call to Sum256 | sample.go:16:9:16:15 | slice expression | -| sample.go:15:24:15:63 | type conversion | sample.go:15:10:15:64 | call to Sum256 | -| sample.go:15:31:15:62 | []type{args} [array] | sample.go:15:31:15:62 | call to Sprintf | -| sample.go:15:31:15:62 | call to Sprintf | sample.go:15:24:15:63 | type conversion | -| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | []type{args} [array] | -| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | call to Sprintf | -| sample.go:16:9:16:15 | slice expression | sample.go:26:25:26:30 | call to Guid | -| sample.go:33:2:33:6 | definition of nonce | sample.go:37:25:37:29 | nonce | -| sample.go:33:2:33:6 | definition of nonce | sample.go:37:32:37:36 | nonce | -| sample.go:34:12:34:40 | call to New | sample.go:35:14:35:19 | random | -| sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | -| sample.go:55:17:55:42 | call to Intn | sample.go:56:29:56:38 | randNumber | -| sample.go:56:11:56:40 | type conversion | sample.go:58:32:58:43 | type conversion | -| sample.go:56:18:56:39 | index expression | sample.go:56:11:56:40 | type conversion | -| sample.go:56:29:56:38 | randNumber | sample.go:56:18:56:39 | index expression | +| sample.go:15:10:15:64 | call to Sum256 | sample.go:16:9:16:15 | slice expression | provenance | | +| sample.go:15:24:15:63 | type conversion | sample.go:15:10:15:64 | call to Sum256 | provenance | | +| sample.go:15:31:15:62 | []type{args} [array] | sample.go:15:31:15:62 | call to Sprintf | provenance | | +| sample.go:15:31:15:62 | call to Sprintf | sample.go:15:24:15:63 | type conversion | provenance | | +| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | []type{args} [array] | provenance | | +| sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | call to Sprintf | provenance | | +| sample.go:16:9:16:15 | slice expression | sample.go:26:25:26:30 | call to Guid | provenance | | +| sample.go:33:2:33:6 | definition of nonce | sample.go:37:25:37:29 | nonce | provenance | | +| sample.go:33:2:33:6 | definition of nonce | sample.go:37:32:37:36 | nonce | provenance | | +| sample.go:34:12:34:40 | call to New | sample.go:35:14:35:19 | random | provenance | | +| sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | provenance | | +| sample.go:55:17:55:42 | call to Intn | sample.go:56:29:56:38 | randNumber | provenance | | +| sample.go:56:11:56:40 | type conversion | sample.go:58:32:58:43 | type conversion | provenance | | +| sample.go:56:18:56:39 | index expression | sample.go:56:11:56:40 | type conversion | provenance | | +| sample.go:56:29:56:38 | randNumber | sample.go:56:18:56:39 | index expression | provenance | | nodes | InsecureRandomness.go:12:18:12:40 | call to Intn | semmle.label | call to Intn | | sample.go:15:10:15:64 | call to Sum256 | semmle.label | call to Sum256 | diff --git a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected similarity index 81% rename from go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected rename to go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected index 7162ed5802f..d067b5eb83d 100644 --- a/go/ql/test/experimental/CWE-347/ParseJWTWithoutVerification.expected +++ b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.expected @@ -1,16 +1,16 @@ edges -| go-jose.v3.go:25:16:25:20 | selection of URL | go-jose.v3.go:25:16:25:28 | call to Query | -| go-jose.v3.go:25:16:25:28 | call to Query | go-jose.v3.go:25:16:25:47 | call to Get | -| go-jose.v3.go:25:16:25:47 | call to Get | go-jose.v3.go:26:15:26:25 | signedToken | -| go-jose.v3.go:26:15:26:25 | signedToken | go-jose.v3.go:29:19:29:29 | definition of signedToken | -| go-jose.v3.go:29:19:29:29 | definition of signedToken | go-jose.v3.go:31:37:31:47 | signedToken | -| go-jose.v3.go:31:2:31:48 | ... := ...[0] | go-jose.v3.go:33:12:33:23 | DecodedToken | -| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | ... := ...[0] | -| golang-jwt-v5.go:28:16:28:20 | selection of URL | golang-jwt-v5.go:28:16:28:28 | call to Query | -| golang-jwt-v5.go:28:16:28:28 | call to Query | golang-jwt-v5.go:28:16:28:47 | call to Get | -| golang-jwt-v5.go:28:16:28:47 | call to Get | golang-jwt-v5.go:29:25:29:35 | signedToken | -| golang-jwt-v5.go:29:25:29:35 | signedToken | golang-jwt-v5.go:32:29:32:39 | definition of signedToken | -| golang-jwt-v5.go:32:29:32:39 | definition of signedToken | golang-jwt-v5.go:34:58:34:68 | signedToken | +| go-jose.v3.go:25:16:25:20 | selection of URL | go-jose.v3.go:25:16:25:28 | call to Query | provenance | | +| go-jose.v3.go:25:16:25:28 | call to Query | go-jose.v3.go:25:16:25:47 | call to Get | provenance | | +| go-jose.v3.go:25:16:25:47 | call to Get | go-jose.v3.go:26:15:26:25 | signedToken | provenance | | +| go-jose.v3.go:26:15:26:25 | signedToken | go-jose.v3.go:29:19:29:29 | definition of signedToken | provenance | | +| go-jose.v3.go:29:19:29:29 | definition of signedToken | go-jose.v3.go:31:37:31:47 | signedToken | provenance | | +| go-jose.v3.go:31:2:31:48 | ... := ...[0] | go-jose.v3.go:33:12:33:23 | DecodedToken | provenance | | +| go-jose.v3.go:31:37:31:47 | signedToken | go-jose.v3.go:31:2:31:48 | ... := ...[0] | provenance | | +| golang-jwt-v5.go:28:16:28:20 | selection of URL | golang-jwt-v5.go:28:16:28:28 | call to Query | provenance | | +| golang-jwt-v5.go:28:16:28:28 | call to Query | golang-jwt-v5.go:28:16:28:47 | call to Get | provenance | | +| golang-jwt-v5.go:28:16:28:47 | call to Get | golang-jwt-v5.go:29:25:29:35 | signedToken | provenance | | +| golang-jwt-v5.go:29:25:29:35 | signedToken | golang-jwt-v5.go:32:29:32:39 | definition of signedToken | provenance | | +| golang-jwt-v5.go:32:29:32:39 | definition of signedToken | golang-jwt-v5.go:34:58:34:68 | signedToken | provenance | | nodes | go-jose.v3.go:25:16:25:20 | selection of URL | semmle.label | selection of URL | | go-jose.v3.go:25:16:25:28 | call to Query | semmle.label | call to Query | diff --git a/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.qlref b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.qlref new file mode 100644 index 00000000000..53caf5633a7 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-347/MissingJwtSignatureCheck.qlref @@ -0,0 +1 @@ +Security/CWE-347/MissingJwtSignatureCheck.ql diff --git a/go/ql/test/experimental/CWE-347/go-jose.v3.go b/go/ql/test/query-tests/Security/CWE-347/go-jose.v3.go similarity index 100% rename from go/ql/test/experimental/CWE-347/go-jose.v3.go rename to go/ql/test/query-tests/Security/CWE-347/go-jose.v3.go diff --git a/go/ql/test/experimental/CWE-347/go.mod b/go/ql/test/query-tests/Security/CWE-347/go.mod similarity index 100% rename from go/ql/test/experimental/CWE-347/go.mod rename to go/ql/test/query-tests/Security/CWE-347/go.mod diff --git a/go/ql/test/experimental/CWE-347/golang-jwt-v5.go b/go/ql/test/query-tests/Security/CWE-347/golang-jwt-v5.go similarity index 100% rename from go/ql/test/experimental/CWE-347/golang-jwt-v5.go rename to go/ql/test/query-tests/Security/CWE-347/golang-jwt-v5.go diff --git a/go/ql/test/experimental/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-347/vendor/github.com/go-jose/go-jose/v3/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go b/go/ql/test/query-tests/Security/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go rename to go/ql/test/query-tests/Security/CWE-347/vendor/github.com/golang-jwt/jwt/v5/stub.go diff --git a/go/ql/test/experimental/CWE-347/vendor/modules.txt b/go/ql/test/query-tests/Security/CWE-347/vendor/modules.txt similarity index 100% rename from go/ql/test/experimental/CWE-347/vendor/modules.txt rename to go/ql/test/query-tests/Security/CWE-347/vendor/modules.txt diff --git a/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected b/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected index 9ef4c6d850e..d1c82f01713 100644 --- a/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected +++ b/go/ql/test/query-tests/Security/CWE-352/ConstantOauth2State.expected @@ -1,16 +1,16 @@ edges -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:50:26:50:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:147:26:147:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:169:26:169:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:191:26:191:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:210:26:210:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:232:26:232:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:249:26:249:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:266:26:266:41 | stateStringConst | -| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:282:26:282:41 | stateStringConst | -| ConstantOauth2State.go:22:22:22:28 | "state" | ConstantOauth2State.go:65:26:65:39 | stateStringVar | -| ConstantOauth2State.go:80:11:80:25 | call to newFixedState | ConstantOauth2State.go:81:26:81:30 | state | -| ConstantOauth2State.go:86:9:86:15 | "state" | ConstantOauth2State.go:80:11:80:25 | call to newFixedState | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:50:26:50:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:147:26:147:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:169:26:169:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:191:26:191:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:210:26:210:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:232:26:232:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:249:26:249:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:266:26:266:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:20:26:20:32 | "state" | ConstantOauth2State.go:282:26:282:41 | stateStringConst | provenance | | +| ConstantOauth2State.go:22:22:22:28 | "state" | ConstantOauth2State.go:65:26:65:39 | stateStringVar | provenance | | +| ConstantOauth2State.go:80:11:80:25 | call to newFixedState | ConstantOauth2State.go:81:26:81:30 | state | provenance | | +| ConstantOauth2State.go:86:9:86:15 | "state" | ConstantOauth2State.go:80:11:80:25 | call to newFixedState | provenance | | nodes | ConstantOauth2State.go:20:26:20:32 | "state" | semmle.label | "state" | | ConstantOauth2State.go:22:22:22:28 | "state" | semmle.label | "state" | diff --git a/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected b/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected index da1b8886574..20569426bfa 100644 --- a/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected +++ b/go/ql/test/query-tests/Security/CWE-601/BadRedirectCheck/BadRedirectCheck.expected @@ -1,23 +1,23 @@ edges -| BadRedirectCheck.go:3:18:3:22 | argument corresponding to redir | BadRedirectCheck.go:5:10:5:14 | redir | -| BadRedirectCheck.go:3:18:3:22 | definition of redir | BadRedirectCheck.go:5:10:5:14 | redir | -| BadRedirectCheck.go:5:10:5:14 | redir | main.go:11:25:11:45 | call to sanitizeUrl | -| cves.go:14:23:14:25 | argument corresponding to url | cves.go:16:26:16:28 | url | -| cves.go:33:14:33:34 | call to Get | cves.go:37:25:37:32 | redirect | -| cves.go:41:14:41:34 | call to Get | cves.go:45:25:45:32 | redirect | -| main.go:10:18:10:25 | argument corresponding to redirect | main.go:11:37:11:44 | redirect | -| main.go:11:37:11:44 | redirect | BadRedirectCheck.go:3:18:3:22 | definition of redir | -| main.go:11:37:11:44 | redirect | main.go:11:25:11:45 | call to sanitizeUrl | -| main.go:32:24:32:26 | argument corresponding to url | main.go:34:26:34:28 | url | -| main.go:68:17:68:24 | argument corresponding to redirect | main.go:73:20:73:27 | redirect | -| main.go:68:17:68:24 | definition of redirect | main.go:73:20:73:27 | redirect | -| main.go:73:9:73:28 | call to Clean | main.go:77:25:77:39 | call to getTarget1 | -| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | -| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | -| main.go:76:19:76:21 | argument corresponding to url | main.go:77:36:77:38 | url | -| main.go:77:36:77:38 | url | main.go:68:17:68:24 | definition of redirect | -| main.go:77:36:77:38 | url | main.go:77:25:77:39 | call to getTarget1 | -| main.go:87:9:87:14 | selection of Path | main.go:91:25:91:39 | call to getTarget2 | +| BadRedirectCheck.go:3:18:3:22 | argument corresponding to redir | BadRedirectCheck.go:5:10:5:14 | redir | provenance | | +| BadRedirectCheck.go:3:18:3:22 | definition of redir | BadRedirectCheck.go:5:10:5:14 | redir | provenance | | +| BadRedirectCheck.go:5:10:5:14 | redir | main.go:11:25:11:45 | call to sanitizeUrl | provenance | | +| cves.go:14:23:14:25 | argument corresponding to url | cves.go:16:26:16:28 | url | provenance | | +| cves.go:33:14:33:34 | call to Get | cves.go:37:25:37:32 | redirect | provenance | | +| cves.go:41:14:41:34 | call to Get | cves.go:45:25:45:32 | redirect | provenance | | +| main.go:10:18:10:25 | argument corresponding to redirect | main.go:11:37:11:44 | redirect | provenance | | +| main.go:11:37:11:44 | redirect | BadRedirectCheck.go:3:18:3:22 | definition of redir | provenance | | +| main.go:11:37:11:44 | redirect | main.go:11:25:11:45 | call to sanitizeUrl | provenance | | +| main.go:32:24:32:26 | argument corresponding to url | main.go:34:26:34:28 | url | provenance | | +| main.go:68:17:68:24 | argument corresponding to redirect | main.go:73:20:73:27 | redirect | provenance | | +| main.go:68:17:68:24 | definition of redirect | main.go:73:20:73:27 | redirect | provenance | | +| main.go:73:9:73:28 | call to Clean | main.go:77:25:77:39 | call to getTarget1 | provenance | | +| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | | +| main.go:73:20:73:27 | redirect | main.go:73:9:73:28 | call to Clean | provenance | | +| main.go:76:19:76:21 | argument corresponding to url | main.go:77:36:77:38 | url | provenance | | +| main.go:77:36:77:38 | url | main.go:68:17:68:24 | definition of redirect | provenance | | +| main.go:77:36:77:38 | url | main.go:77:25:77:39 | call to getTarget1 | provenance | | +| main.go:87:9:87:14 | selection of Path | main.go:91:25:91:39 | call to getTarget2 | provenance | | nodes | BadRedirectCheck.go:3:18:3:22 | argument corresponding to redir | semmle.label | argument corresponding to redir | | BadRedirectCheck.go:3:18:3:22 | definition of redir | semmle.label | definition of redir | diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected index d56e1f9c68b..edbdc8b6e8d 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected @@ -1,69 +1,69 @@ edges -| OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | -| stdlib.go:13:3:13:8 | definition of target | stdlib.go:15:30:15:35 | target | -| stdlib.go:13:13:13:18 | selection of Form | stdlib.go:13:13:13:32 | call to Get | -| stdlib.go:13:13:13:32 | call to Get | stdlib.go:13:3:13:8 | definition of target | -| stdlib.go:22:3:22:8 | definition of target | stdlib.go:24:30:24:35 | target | -| stdlib.go:22:13:22:18 | selection of Form | stdlib.go:22:13:22:32 | call to Get | -| stdlib.go:22:13:22:32 | call to Get | stdlib.go:22:3:22:8 | definition of target | -| stdlib.go:31:3:31:8 | definition of target | stdlib.go:35:34:35:39 | target | -| stdlib.go:31:13:31:18 | selection of Form | stdlib.go:31:13:31:32 | call to Get | -| stdlib.go:31:13:31:32 | call to Get | stdlib.go:31:3:31:8 | definition of target | -| stdlib.go:35:34:35:39 | target | stdlib.go:35:30:35:39 | ...+... | -| stdlib.go:44:3:44:8 | definition of target | stdlib.go:46:23:46:28 | target | -| stdlib.go:44:13:44:18 | selection of Form | stdlib.go:44:13:44:32 | call to Get | -| stdlib.go:44:13:44:32 | call to Get | stdlib.go:44:3:44:8 | definition of target | -| stdlib.go:64:3:64:8 | definition of target | stdlib.go:67:23:67:28 | target | -| stdlib.go:64:13:64:18 | selection of Form | stdlib.go:64:13:64:32 | call to Get | -| stdlib.go:64:13:64:32 | call to Get | stdlib.go:64:3:64:8 | definition of target | -| stdlib.go:67:23:67:28 | target | stdlib.go:67:23:67:37 | ...+... | -| stdlib.go:67:23:67:37 | ...+... | stdlib.go:67:23:67:40 | ...+... | -| stdlib.go:89:3:89:8 | definition of target | stdlib.go:90:3:90:8 | target | -| stdlib.go:89:13:89:18 | selection of Form | stdlib.go:89:13:89:32 | call to Get | -| stdlib.go:89:13:89:32 | call to Get | stdlib.go:89:3:89:8 | definition of target | -| stdlib.go:90:3:90:8 | definition of target | stdlib.go:92:23:92:28 | target | -| stdlib.go:90:3:90:8 | target | stdlib.go:90:3:90:25 | ... += ... | -| stdlib.go:90:3:90:25 | ... += ... | stdlib.go:90:3:90:8 | definition of target | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:112:4:112:4 | r [pointer, URL] | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:113:24:113:24 | r [pointer, URL] | -| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | -| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:112:4:112:8 | selection of URL [pointer] | -| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:107:54:107:54 | definition of r [pointer, URL] | -| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:112:4:112:8 | selection of URL | -| stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | -| stdlib.go:112:4:112:4 | r [pointer, URL] | stdlib.go:112:4:112:4 | implicit dereference [URL] | -| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL | -| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL [pointer] | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:4 | implicit dereference [URL] | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:8 | implicit dereference | -| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | -| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:8 | implicit dereference | -| stdlib.go:113:24:113:24 | implicit dereference [URL] | stdlib.go:113:24:113:28 | selection of URL | -| stdlib.go:113:24:113:24 | r [pointer, URL] | stdlib.go:113:24:113:24 | implicit dereference [URL] | -| stdlib.go:113:24:113:28 | selection of URL | stdlib.go:113:24:113:37 | call to String | -| stdlib.go:146:3:146:8 | definition of target | stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | -| stdlib.go:146:13:146:18 | selection of Form | stdlib.go:146:13:146:32 | call to Get | -| stdlib.go:146:13:146:32 | call to Get | stdlib.go:146:3:146:8 | definition of target | -| stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | stdlib.go:152:23:152:28 | target | -| stdlib.go:159:3:159:5 | definition of url | stdlib.go:162:24:162:26 | url | -| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:3:159:5 | definition of url | -| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:11:159:15 | selection of URL | -| stdlib.go:159:11:159:15 | selection of URL | stdlib.go:159:10:159:15 | star expression | -| stdlib.go:162:24:162:26 | url | stdlib.go:162:24:162:35 | call to String | -| stdlib.go:173:35:173:39 | selection of URL | stdlib.go:173:35:173:52 | call to RequestURI | -| stdlib.go:173:35:173:52 | call to RequestURI | stdlib.go:173:24:173:52 | ...+... | -| stdlib.go:182:3:182:8 | definition of target | stdlib.go:184:23:184:28 | target | -| stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:182:3:182:8 | definition of target | -| stdlib.go:190:3:190:8 | definition of target | stdlib.go:192:23:192:28 | target | -| stdlib.go:190:3:190:8 | definition of target | stdlib.go:194:23:194:28 | target | -| stdlib.go:190:3:190:57 | ... := ...[0] | stdlib.go:190:3:190:8 | definition of target | -| stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:190:3:190:57 | ... := ...[0] | -| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:190:3:190:8 | definition of target | -| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:192:23:192:33 | selection of Path | -| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:28 | implicit dereference | -| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:33 | selection of Path | -| stdlib.go:194:23:194:28 | target | stdlib.go:194:23:194:42 | call to EscapedPath | +| OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | provenance | | +| stdlib.go:13:3:13:8 | definition of target | stdlib.go:15:30:15:35 | target | provenance | | +| stdlib.go:13:13:13:18 | selection of Form | stdlib.go:13:13:13:32 | call to Get | provenance | | +| stdlib.go:13:13:13:32 | call to Get | stdlib.go:13:3:13:8 | definition of target | provenance | | +| stdlib.go:22:3:22:8 | definition of target | stdlib.go:24:30:24:35 | target | provenance | | +| stdlib.go:22:13:22:18 | selection of Form | stdlib.go:22:13:22:32 | call to Get | provenance | | +| stdlib.go:22:13:22:32 | call to Get | stdlib.go:22:3:22:8 | definition of target | provenance | | +| stdlib.go:31:3:31:8 | definition of target | stdlib.go:35:34:35:39 | target | provenance | | +| stdlib.go:31:13:31:18 | selection of Form | stdlib.go:31:13:31:32 | call to Get | provenance | | +| stdlib.go:31:13:31:32 | call to Get | stdlib.go:31:3:31:8 | definition of target | provenance | | +| stdlib.go:35:34:35:39 | target | stdlib.go:35:30:35:39 | ...+... | provenance | | +| stdlib.go:44:3:44:8 | definition of target | stdlib.go:46:23:46:28 | target | provenance | | +| stdlib.go:44:13:44:18 | selection of Form | stdlib.go:44:13:44:32 | call to Get | provenance | | +| stdlib.go:44:13:44:32 | call to Get | stdlib.go:44:3:44:8 | definition of target | provenance | | +| stdlib.go:64:3:64:8 | definition of target | stdlib.go:67:23:67:28 | target | provenance | | +| stdlib.go:64:13:64:18 | selection of Form | stdlib.go:64:13:64:32 | call to Get | provenance | | +| stdlib.go:64:13:64:32 | call to Get | stdlib.go:64:3:64:8 | definition of target | provenance | | +| stdlib.go:67:23:67:28 | target | stdlib.go:67:23:67:37 | ...+... | provenance | | +| stdlib.go:67:23:67:37 | ...+... | stdlib.go:67:23:67:40 | ...+... | provenance | | +| stdlib.go:89:3:89:8 | definition of target | stdlib.go:90:3:90:8 | target | provenance | | +| stdlib.go:89:13:89:18 | selection of Form | stdlib.go:89:13:89:32 | call to Get | provenance | | +| stdlib.go:89:13:89:32 | call to Get | stdlib.go:89:3:89:8 | definition of target | provenance | | +| stdlib.go:90:3:90:8 | definition of target | stdlib.go:92:23:92:28 | target | provenance | | +| stdlib.go:90:3:90:8 | target | stdlib.go:90:3:90:25 | ... += ... | provenance | | +| stdlib.go:90:3:90:25 | ... += ... | stdlib.go:90:3:90:8 | definition of target | provenance | | +| stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | provenance | | +| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:112:4:112:4 | r [pointer, URL] | provenance | | +| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:113:24:113:24 | r [pointer, URL] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:112:4:112:8 | selection of URL [pointer] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:107:54:107:54 | definition of r [pointer, URL] | provenance | | +| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:112:4:112:8 | selection of URL | provenance | | +| stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | provenance | | +| stdlib.go:112:4:112:4 | r [pointer, URL] | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | | +| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL | provenance | | +| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL [pointer] | provenance | | +| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | | +| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:8 | implicit dereference | provenance | | +| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | provenance | | +| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:8 | implicit dereference | provenance | | +| stdlib.go:113:24:113:24 | implicit dereference [URL] | stdlib.go:113:24:113:28 | selection of URL | provenance | | +| stdlib.go:113:24:113:24 | r [pointer, URL] | stdlib.go:113:24:113:24 | implicit dereference [URL] | provenance | | +| stdlib.go:113:24:113:28 | selection of URL | stdlib.go:113:24:113:37 | call to String | provenance | | +| stdlib.go:146:3:146:8 | definition of target | stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | provenance | | +| stdlib.go:146:13:146:18 | selection of Form | stdlib.go:146:13:146:32 | call to Get | provenance | | +| stdlib.go:146:13:146:32 | call to Get | stdlib.go:146:3:146:8 | definition of target | provenance | | +| stdlib.go:152:3:152:3 | target = phi(def@146:3, def@149:4) | stdlib.go:152:23:152:28 | target | provenance | | +| stdlib.go:159:3:159:5 | definition of url | stdlib.go:162:24:162:26 | url | provenance | | +| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:3:159:5 | definition of url | provenance | | +| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:11:159:15 | selection of URL | provenance | | +| stdlib.go:159:11:159:15 | selection of URL | stdlib.go:159:10:159:15 | star expression | provenance | | +| stdlib.go:162:24:162:26 | url | stdlib.go:162:24:162:35 | call to String | provenance | | +| stdlib.go:173:35:173:39 | selection of URL | stdlib.go:173:35:173:52 | call to RequestURI | provenance | | +| stdlib.go:173:35:173:52 | call to RequestURI | stdlib.go:173:24:173:52 | ...+... | provenance | | +| stdlib.go:182:3:182:8 | definition of target | stdlib.go:184:23:184:28 | target | provenance | | +| stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:182:3:182:8 | definition of target | provenance | | +| stdlib.go:190:3:190:8 | definition of target | stdlib.go:192:23:192:28 | target | provenance | | +| stdlib.go:190:3:190:8 | definition of target | stdlib.go:194:23:194:28 | target | provenance | | +| stdlib.go:190:3:190:57 | ... := ...[0] | stdlib.go:190:3:190:8 | definition of target | provenance | | +| stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:190:3:190:57 | ... := ...[0] | provenance | | +| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:190:3:190:8 | definition of target | provenance | | +| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:192:23:192:33 | selection of Path | provenance | | +| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:28 | implicit dereference | provenance | | +| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:33 | selection of Path | provenance | | +| stdlib.go:194:23:194:28 | target | stdlib.go:194:23:194:42 | call to EscapedPath | provenance | | nodes | OpenUrlRedirect.go:10:23:10:28 | selection of Form | semmle.label | selection of Form | | OpenUrlRedirect.go:10:23:10:42 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected index ec7b13e00eb..fa8adec48fe 100644 --- a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected @@ -1,23 +1,23 @@ edges -| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | -| EmailBad.go:9:10:9:29 | call to Get | EmailBad.go:12:56:12:67 | type conversion | -| main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | -| main.go:37:21:37:31 | call to Referer | main.go:41:25:41:38 | untrustedInput | -| main.go:41:25:41:38 | untrustedInput | main.go:40:3:40:7 | definition of write | -| main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | -| main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | -| main.go:58:21:58:31 | call to Referer | main.go:60:47:60:60 | untrustedInput | -| main.go:60:14:60:61 | call to NewContent | main.go:63:16:63:22 | content | -| main.go:60:47:60:60 | untrustedInput | main.go:60:14:60:61 | call to NewContent | -| main.go:68:21:68:31 | call to Referer | main.go:74:47:74:60 | untrustedInput | -| main.go:74:14:74:61 | call to NewContent | main.go:76:50:76:56 | content | -| main.go:74:14:74:61 | call to NewContent | main.go:76:59:76:65 | content | -| main.go:74:14:74:61 | call to NewContent | main.go:77:16:77:22 | content | -| main.go:74:47:74:60 | untrustedInput | main.go:74:14:74:61 | call to NewContent | -| main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | -| main.go:82:21:82:31 | call to Referer | main.go:91:48:91:61 | untrustedInput | -| main.go:91:15:91:62 | call to NewContent | main.go:93:16:93:23 | content2 | -| main.go:91:48:91:61 | untrustedInput | main.go:91:15:91:62 | call to NewContent | +| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | provenance | | +| EmailBad.go:9:10:9:29 | call to Get | EmailBad.go:12:56:12:67 | type conversion | provenance | | +| main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | provenance | | +| main.go:37:21:37:31 | call to Referer | main.go:41:25:41:38 | untrustedInput | provenance | | +| main.go:41:25:41:38 | untrustedInput | main.go:40:3:40:7 | definition of write | provenance | | +| main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | provenance | | +| main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | provenance | | +| main.go:58:21:58:31 | call to Referer | main.go:60:47:60:60 | untrustedInput | provenance | | +| main.go:60:14:60:61 | call to NewContent | main.go:63:16:63:22 | content | provenance | | +| main.go:60:47:60:60 | untrustedInput | main.go:60:14:60:61 | call to NewContent | provenance | | +| main.go:68:21:68:31 | call to Referer | main.go:74:47:74:60 | untrustedInput | provenance | | +| main.go:74:14:74:61 | call to NewContent | main.go:76:50:76:56 | content | provenance | | +| main.go:74:14:74:61 | call to NewContent | main.go:76:59:76:65 | content | provenance | | +| main.go:74:14:74:61 | call to NewContent | main.go:77:16:77:22 | content | provenance | | +| main.go:74:47:74:60 | untrustedInput | main.go:74:14:74:61 | call to NewContent | provenance | | +| main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | provenance | | +| main.go:82:21:82:31 | call to Referer | main.go:91:48:91:61 | untrustedInput | provenance | | +| main.go:91:15:91:62 | call to NewContent | main.go:93:16:93:23 | content2 | provenance | | +| main.go:91:48:91:61 | untrustedInput | main.go:91:15:91:62 | call to NewContent | provenance | | nodes | EmailBad.go:9:10:9:17 | selection of Header | semmle.label | selection of Header | | EmailBad.go:9:10:9:29 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected index 34fbf42f85f..753444333d9 100644 --- a/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-643/XPathInjection.expected @@ -1,57 +1,57 @@ edges -| XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:13:14:13:35 | call to Get | -| XPathInjection.go:13:14:13:35 | call to Get | XPathInjection.go:16:29:16:91 | ...+... | -| tst.go:34:14:34:19 | selection of Form | tst.go:34:14:34:35 | call to Get | -| tst.go:34:14:34:35 | call to Get | tst.go:37:23:37:85 | ...+... | -| tst.go:34:14:34:35 | call to Get | tst.go:40:24:40:86 | ...+... | -| tst.go:34:14:34:35 | call to Get | tst.go:43:24:43:82 | ...+... | -| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:35 | call to Get | -| tst.go:48:14:48:35 | call to Get | tst.go:51:26:51:84 | ...+... | -| tst.go:48:14:48:35 | call to Get | tst.go:54:29:54:87 | ...+... | -| tst.go:48:14:48:35 | call to Get | tst.go:57:33:57:91 | ...+... | -| tst.go:48:14:48:35 | call to Get | tst.go:60:30:60:88 | ...+... | -| tst.go:65:14:65:19 | selection of Form | tst.go:65:14:65:35 | call to Get | -| tst.go:65:14:65:35 | call to Get | tst.go:68:25:68:83 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:71:28:71:86 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:74:25:74:83 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:77:34:77:92 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:80:32:80:90 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:83:29:83:87 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:86:23:86:85 | ...+... | -| tst.go:65:14:65:35 | call to Get | tst.go:89:22:89:84 | ...+... | -| tst.go:94:14:94:19 | selection of Form | tst.go:94:14:94:35 | call to Get | -| tst.go:94:14:94:35 | call to Get | tst.go:97:26:97:84 | ...+... | -| tst.go:94:14:94:35 | call to Get | tst.go:100:29:100:87 | ...+... | -| tst.go:94:14:94:35 | call to Get | tst.go:103:33:103:91 | ...+... | -| tst.go:94:14:94:35 | call to Get | tst.go:106:30:106:88 | ...+... | -| tst.go:111:14:111:19 | selection of Form | tst.go:111:14:111:35 | call to Get | -| tst.go:111:14:111:35 | call to Get | tst.go:114:25:114:87 | ...+... | -| tst.go:111:14:111:35 | call to Get | tst.go:117:26:117:88 | ...+... | -| tst.go:122:14:122:19 | selection of Form | tst.go:122:14:122:35 | call to Get | -| tst.go:122:14:122:35 | call to Get | tst.go:126:23:126:126 | ...+... | -| tst.go:122:14:122:35 | call to Get | tst.go:129:24:129:127 | ...+... | -| tst.go:122:14:122:35 | call to Get | tst.go:132:27:132:122 | ...+... | -| tst.go:123:14:123:19 | selection of Form | tst.go:123:14:123:35 | call to Get | -| tst.go:123:14:123:35 | call to Get | tst.go:126:23:126:126 | ...+... | -| tst.go:123:14:123:35 | call to Get | tst.go:129:24:129:127 | ...+... | -| tst.go:123:14:123:35 | call to Get | tst.go:132:27:132:122 | ...+... | -| tst.go:140:14:140:19 | selection of Form | tst.go:140:14:140:35 | call to Get | -| tst.go:140:14:140:35 | call to Get | tst.go:143:27:143:89 | ...+... | -| tst.go:140:14:140:35 | call to Get | tst.go:146:28:146:90 | ...+... | -| tst.go:151:14:151:19 | selection of Form | tst.go:151:14:151:35 | call to Get | -| tst.go:151:14:151:35 | call to Get | tst.go:155:33:155:136 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:158:18:158:121 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:164:31:164:126 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:173:21:173:116 | ...+... | -| tst.go:151:14:151:35 | call to Get | tst.go:182:27:182:122 | ...+... | -| tst.go:152:14:152:19 | selection of Form | tst.go:152:14:152:35 | call to Get | -| tst.go:152:14:152:35 | call to Get | tst.go:155:33:155:136 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:158:18:158:121 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:164:31:164:126 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:173:21:173:116 | ...+... | -| tst.go:152:14:152:35 | call to Get | tst.go:182:27:182:122 | ...+... | -| tst.go:193:14:193:19 | selection of Form | tst.go:193:14:193:35 | call to Get | -| tst.go:193:14:193:35 | call to Get | tst.go:198:23:198:85 | ...+... | +| XPathInjection.go:13:14:13:19 | selection of Form | XPathInjection.go:13:14:13:35 | call to Get | provenance | | +| XPathInjection.go:13:14:13:35 | call to Get | XPathInjection.go:16:29:16:91 | ...+... | provenance | | +| tst.go:34:14:34:19 | selection of Form | tst.go:34:14:34:35 | call to Get | provenance | | +| tst.go:34:14:34:35 | call to Get | tst.go:37:23:37:85 | ...+... | provenance | | +| tst.go:34:14:34:35 | call to Get | tst.go:40:24:40:86 | ...+... | provenance | | +| tst.go:34:14:34:35 | call to Get | tst.go:43:24:43:82 | ...+... | provenance | | +| tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:35 | call to Get | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:51:26:51:84 | ...+... | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:54:29:54:87 | ...+... | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:57:33:57:91 | ...+... | provenance | | +| tst.go:48:14:48:35 | call to Get | tst.go:60:30:60:88 | ...+... | provenance | | +| tst.go:65:14:65:19 | selection of Form | tst.go:65:14:65:35 | call to Get | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:68:25:68:83 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:71:28:71:86 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:74:25:74:83 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:77:34:77:92 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:80:32:80:90 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:83:29:83:87 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:86:23:86:85 | ...+... | provenance | | +| tst.go:65:14:65:35 | call to Get | tst.go:89:22:89:84 | ...+... | provenance | | +| tst.go:94:14:94:19 | selection of Form | tst.go:94:14:94:35 | call to Get | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:97:26:97:84 | ...+... | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:100:29:100:87 | ...+... | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:103:33:103:91 | ...+... | provenance | | +| tst.go:94:14:94:35 | call to Get | tst.go:106:30:106:88 | ...+... | provenance | | +| tst.go:111:14:111:19 | selection of Form | tst.go:111:14:111:35 | call to Get | provenance | | +| tst.go:111:14:111:35 | call to Get | tst.go:114:25:114:87 | ...+... | provenance | | +| tst.go:111:14:111:35 | call to Get | tst.go:117:26:117:88 | ...+... | provenance | | +| tst.go:122:14:122:19 | selection of Form | tst.go:122:14:122:35 | call to Get | provenance | | +| tst.go:122:14:122:35 | call to Get | tst.go:126:23:126:126 | ...+... | provenance | | +| tst.go:122:14:122:35 | call to Get | tst.go:129:24:129:127 | ...+... | provenance | | +| tst.go:122:14:122:35 | call to Get | tst.go:132:27:132:122 | ...+... | provenance | | +| tst.go:123:14:123:19 | selection of Form | tst.go:123:14:123:35 | call to Get | provenance | | +| tst.go:123:14:123:35 | call to Get | tst.go:126:23:126:126 | ...+... | provenance | | +| tst.go:123:14:123:35 | call to Get | tst.go:129:24:129:127 | ...+... | provenance | | +| tst.go:123:14:123:35 | call to Get | tst.go:132:27:132:122 | ...+... | provenance | | +| tst.go:140:14:140:19 | selection of Form | tst.go:140:14:140:35 | call to Get | provenance | | +| tst.go:140:14:140:35 | call to Get | tst.go:143:27:143:89 | ...+... | provenance | | +| tst.go:140:14:140:35 | call to Get | tst.go:146:28:146:90 | ...+... | provenance | | +| tst.go:151:14:151:19 | selection of Form | tst.go:151:14:151:35 | call to Get | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:155:33:155:136 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:158:18:158:121 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:164:31:164:126 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:173:21:173:116 | ...+... | provenance | | +| tst.go:151:14:151:35 | call to Get | tst.go:182:27:182:122 | ...+... | provenance | | +| tst.go:152:14:152:19 | selection of Form | tst.go:152:14:152:35 | call to Get | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:155:33:155:136 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:158:18:158:121 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:164:31:164:126 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:173:21:173:116 | ...+... | provenance | | +| tst.go:152:14:152:35 | call to Get | tst.go:182:27:182:122 | ...+... | provenance | | +| tst.go:193:14:193:19 | selection of Form | tst.go:193:14:193:35 | call to Get | provenance | | +| tst.go:193:14:193:35 | call to Get | tst.go:198:23:198:85 | ...+... | provenance | | nodes | XPathInjection.go:13:14:13:19 | selection of Form | semmle.label | selection of Form | | XPathInjection.go:13:14:13:35 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected index eb4c265aac0..8eb49a5cc80 100644 --- a/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected +++ b/go/ql/test/query-tests/Security/CWE-798/HardcodedCredentials.expected @@ -1,7 +1,28 @@ | AlertSuppressionExample.go:11:14:11:40 | "horsebatterystaplecorrect" | Hard-coded $@. | AlertSuppressionExample.go:11:14:11:40 | "horsebatterystaplecorrect" | password | | HardcodedCredentials.go:10:13:10:28 | "s3cretp4ssword" | Hard-coded $@. | HardcodedCredentials.go:10:13:10:28 | "s3cretp4ssword" | password | +| HardcodedKeysBad.go:19:28:19:39 | mySigningKey | Hard-coded credential. | HardcodedKeysBad.go:11:25:11:37 | "AllYourBase" | password | +| jwt.go:42:28:42:39 | mySigningKey | Hard-coded credential. | jwt.go:33:25:33:30 | "key1" | password | +| jwt.go:49:16:49:29 | type conversion | Hard-coded credential. | jwt.go:49:23:49:28 | "key2" | password | +| jwt.go:68:44:68:46 | key | Hard-coded credential. | jwt.go:67:16:67:21 | `key3` | password | +| jwt.go:73:66:73:68 | key | Hard-coded credential. | jwt.go:72:16:72:21 | "key4" | password | +| jwt.go:81:15:81:18 | key2 | Hard-coded credential. | jwt.go:76:17:76:22 | "key5" | password | +| jwt.go:91:41:91:43 | key | Hard-coded credential. | jwt.go:87:16:87:21 | "key6" | password | +| jwt.go:98:66:98:69 | key2 | Hard-coded credential. | jwt.go:96:17:96:22 | "key7" | password | +| jwt.go:109:30:109:32 | key | Hard-coded credential. | jwt.go:104:16:104:21 | "key8" | password | +| jwt.go:114:16:114:24 | sharedKey | Hard-coded credential. | jwt.go:113:22:113:27 | "key9" | password | +| jwt.go:120:16:120:30 | sharedKeyglobal | Hard-coded credential. | jwt.go:117:30:117:36 | "key10" | password | +| jwt.go:126:20:126:34 | type conversion | Hard-coded credential. | jwt.go:126:27:126:33 | "key11" | password | +| jwt.go:143:39:143:41 | key | Hard-coded credential. | jwt.go:141:16:141:22 | "key12" | password | +| jwt.go:152:11:152:13 | key | Hard-coded credential. | jwt.go:148:16:148:22 | "key13" | password | +| jwt.go:160:34:160:36 | key | Hard-coded credential. | jwt.go:159:16:159:22 | "key14" | password | +| jwt.go:166:32:166:34 | key | Hard-coded credential. | jwt.go:165:16:165:22 | "key15" | password | +| jwt.go:172:41:172:43 | key | Hard-coded credential. | jwt.go:171:16:171:22 | "key16" | password | +| jwt.go:178:51:178:53 | key | Hard-coded credential. | jwt.go:177:16:177:22 | "key17" | password | +| jwt.go:184:42:184:44 | key | Hard-coded credential. | jwt.go:183:16:183:22 | "key18" | password | +| jwt.go:192:33:192:35 | key | Hard-coded credential. | jwt.go:189:16:189:22 | "key19" | password | | main.go:6:14:6:23 | "p4ssw0rd" | Hard-coded $@. | main.go:6:14:6:23 | "p4ssw0rd" | password | | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | Hard-coded private key. | main.go:12:1:26:30 | `-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC/tzdtXKXcX6F3v3hR6+uYyZpIeXhhLflJkY2eILLQfAnwKlT5\nxIHW5QZcHQV9sCyZ8qSdPGif7PwgMbButMbByiZhCSugUFb6vjVqoktmslYF4LKH\niDgvmlwuJW0TvynxBLzDCwrRP+gpRT8wuAortWAx/03POTw7Mzi2cIPNsQIDAQAB\nAoGAMHCrqY9CPTdQhgAz94cDpTwzJmLCvtMt7J/BR5X9eF4O6MbZZ652HAUMIVQX\n4hUUf+VmIHB2AwqO/ddwO9ijaz04BslOSy/iYevHGlH65q4587NSlFWjvILMIQCM\nGBjfzJIxlLHVhjc2cFnyAE5YWjF/OMnJN0OhP9pxmCP/iM0CQQDxmQndQLdnV7+6\n8SvBHE8bg1LE8/BzTt68U3aWwiBjrHMFgzr//7Za4VF7h4ilFgmbh0F3sYz+C8iO\n0JrBRPeLAkEAyyTwnv/pgqTS/wuxIHUxRBpbdk3YvILAthNrGQg5uzA7eSeFu7Mv\nGtEkXsaqCDbdehgarFfNN8PB6OMRIbsXMwJBAOjhH8UJ0L/osYO9XPO0GfznRS1c\nBnbfm4vk1/bSAO6TF/xEVubU0i4f6q8sIecfqvskEVMS7lkjeptPMR0DIakCQE+7\nuQH/Wizf+r0GXshplyOu4LVHisk63N7aMlAJ7XbuUHmWLKRmiReSfR8CBNzig/2X\nFmkMsUyw9hwte5zsrQcCQQCrOkZvzUj9j1HKG+32EJ2E4kisJZmAgF9GI+z6oxpi\nExped5tp8EWytCjRwKhOcc0068SgaqhKvyyUWpbx32VQ\n-----END RSA PRIVATE KEY-----` | certificate | | main.go:44:14:44:19 | "p4ss" | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:48:13:48:15 | tmp | Hard-coded $@. | main.go:44:14:44:19 | "p4ss" | password | | main.go:50:15:50:21 | "p4ss2" | Hard-coded $@. | main.go:50:15:50:21 | "p4ss2" | password | +| sanitizer.go:18:44:18:46 | key | Hard-coded credential. | sanitizer.go:17:16:17:25 | `some_key` | password | diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeysBad.go b/go/ql/test/query-tests/Security/CWE-798/HardcodedKeysBad.go similarity index 100% rename from go/ql/test/experimental/CWE-321/HardcodedKeysBad.go rename to go/ql/test/query-tests/Security/CWE-798/HardcodedKeysBad.go diff --git a/go/ql/test/experimental/CWE-321/HardcodedKeysGood.go b/go/ql/test/query-tests/Security/CWE-798/HardcodedKeysGood.go similarity index 100% rename from go/ql/test/experimental/CWE-321/HardcodedKeysGood.go rename to go/ql/test/query-tests/Security/CWE-798/HardcodedKeysGood.go diff --git a/go/ql/test/experimental/CWE-321/go.mod b/go/ql/test/query-tests/Security/CWE-798/go.mod similarity index 100% rename from go/ql/test/experimental/CWE-321/go.mod rename to go/ql/test/query-tests/Security/CWE-798/go.mod diff --git a/go/ql/test/experimental/CWE-321/main.go b/go/ql/test/query-tests/Security/CWE-798/jwt.go similarity index 86% rename from go/ql/test/experimental/CWE-321/main.go rename to go/ql/test/query-tests/Security/CWE-798/jwt.go index d18dbf77203..560f95800df 100644 --- a/go/ql/test/experimental/CWE-321/main.go +++ b/go/ql/test/query-tests/Security/CWE-798/jwt.go @@ -44,7 +44,6 @@ func gjwtt() (interface{}, error) { func gin_jwt() (interface{}, error) { var identityKey = "id" - // authMiddleware, err := return jwt.New(&jwt.GinJWTMiddleware{ Realm: "test zone", Key: []byte("key2"), // BAD @@ -124,7 +123,7 @@ func lejwt2() (interface{}, error) { func gogfjwt() interface{} { return &gogf.GfJWTMiddleware{ Realm: "test zone", - Key: []byte("key11"), + Key: []byte("key11"), // BAD Timeout: time.Minute * 5, MaxRefresh: time.Minute * 5, IdentityKey: "id", @@ -139,60 +138,56 @@ func gogfjwt() interface{} { } func irisjwt() interface{} { - mySecret := []byte("key12") + key := []byte("key12") token := iris.NewTokenWithClaims(nil, nil) - tokenString, _ := token.SignedString(mySecret) + tokenString, _ := token.SignedString(key) // BAD return tokenString } func iris12jwt2() interface{} { - mySecret := []byte("key13") + key := []byte("key13") s := &iris12.Signer{ Alg: nil, - Key: mySecret, + Key: key, // BAD MaxAge: 3 * time.Second, } return s } func irisjwt3() interface{} { - secret := []byte("key14") - signer := iris12.NewSigner(nil, secret, 3*time.Second) + key := []byte("key14") + signer := iris12.NewSigner(nil, key, 3*time.Second) // BAD return signer } func katarasJwt() interface{} { - secret := []byte("key15") - token, _ := kataras.Sign(nil, secret, nil, nil) + key := []byte("key15") + token, _ := kataras.Sign(nil, key, nil, nil) // BAD return token } func katarasJwt2() interface{} { - secret := []byte("key16") - token, _ := kataras.SignEncrypted(nil, secret, nil, nil) + key := []byte("key16") + token, _ := kataras.SignEncrypted(nil, key, nil, nil) // BAD return token } func katarasJwt3() interface{} { - secret := []byte("key17") - token, _ := kataras.SignEncryptedWithHeader(nil, secret, nil, nil, nil) + key := []byte("key17") + token, _ := kataras.SignEncryptedWithHeader(nil, key, nil, nil, nil) // BAD return token } func katarasJwt4() interface{} { - secret := []byte("key18") - token, _ := kataras.SignWithHeader(nil, secret, nil, nil) + key := []byte("key18") + token, _ := kataras.SignWithHeader(nil, key, nil, nil) // BAD return token } func katarasJwt5() { - secret := []byte("key19") + key := []byte("key19") var keys kataras.Keys var alg kataras.Alg - keys.Register(alg, "api", nil, secret) -} - -func main() { - return + keys.Register(alg, "api", nil, key) // BAD } diff --git a/go/ql/test/experimental/CWE-321/sanitizer.go b/go/ql/test/query-tests/Security/CWE-798/sanitizer.go similarity index 99% rename from go/ql/test/experimental/CWE-321/sanitizer.go rename to go/ql/test/query-tests/Security/CWE-798/sanitizer.go index 314d9187045..749642ceb3b 100644 --- a/go/ql/test/experimental/CWE-321/sanitizer.go +++ b/go/ql/test/query-tests/Security/CWE-798/sanitizer.go @@ -14,7 +14,7 @@ import ( ) func check_ok() (interface{}, error) { - key := []byte(`key`) + key := []byte(`some_key`) return cristal.NewSignerHS(cristal.HS256, key) // BAD } diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/appleboy/gin-jwt/v2/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/appleboy/gin-jwt/v2/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/appleboy/gin-jwt/v2/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/appleboy/gin-jwt/v2/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/cristalhq/jwt/v3/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/cristalhq/jwt/v3/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/cristalhq/jwt/v3/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/cristalhq/jwt/v3/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/gin-gonic/gin/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gin-gonic/gin/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/gin-gonic/gin/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gin-gonic/gin/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/go-kit/kit/auth/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/go-kit/kit/auth/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/go-kit/kit/auth/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/go-kit/kit/auth/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/gogf/gf-jwt/v2/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gogf/gf-jwt/v2/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/gogf/gf-jwt/v2/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/gogf/gf-jwt/v2/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/golang-jwt/jwt/v4/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/golang-jwt/jwt/v4/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/golang-jwt/jwt/v4/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/golang-jwt/jwt/v4/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/iris-contrib/middleware/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/iris-contrib/middleware/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/iris-contrib/middleware/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/iris-contrib/middleware/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/iris/v12/middleware/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/kataras/jwt/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/jwt/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/kataras/jwt/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/kataras/jwt/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/lestrrat/go-jwx/jwk/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/lestrrat/go-jwx/jwk/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/lestrrat/go-jwx/jwk/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/lestrrat/go-jwx/jwk/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/github.com/square/go-jose/v3/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/github.com/square/go-jose/v3/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/github.com/square/go-jose/v3/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/github.com/square/go-jose/v3/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/gopkg.in/square/go-jose.v2/stub.go b/go/ql/test/query-tests/Security/CWE-798/vendor/gopkg.in/square/go-jose.v2/stub.go similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/gopkg.in/square/go-jose.v2/stub.go rename to go/ql/test/query-tests/Security/CWE-798/vendor/gopkg.in/square/go-jose.v2/stub.go diff --git a/go/ql/test/experimental/CWE-321/vendor/modules.txt b/go/ql/test/query-tests/Security/CWE-798/vendor/modules.txt similarity index 100% rename from go/ql/test/experimental/CWE-321/vendor/modules.txt rename to go/ql/test/query-tests/Security/CWE-798/vendor/modules.txt diff --git a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index b843de1c0b1..c3d6015d748 100644 --- a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -1,32 +1,32 @@ edges -| RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | -| tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:21:34:21:40 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:24:66:24:72 | tainted | -| tst.go:10:13:10:35 | call to FormValue | tst.go:27:11:27:29 | ...+... | -| tst.go:10:13:10:35 | call to FormValue | tst.go:29:11:29:40 | ...+... | -| tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:17 | tainted | -| tst.go:35:2:35:2 | definition of u [pointer] | tst.go:36:2:36:2 | u [pointer] | -| tst.go:36:2:36:2 | implicit dereference | tst.go:35:2:35:2 | definition of u [pointer] | -| tst.go:36:2:36:2 | implicit dereference | tst.go:36:2:36:2 | u | -| tst.go:36:2:36:2 | implicit dereference | tst.go:37:11:37:11 | u | -| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | implicit dereference | -| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | u | -| tst.go:36:2:36:2 | u | tst.go:37:11:37:11 | u | -| tst.go:36:2:36:2 | u [pointer] | tst.go:36:2:36:2 | implicit dereference | -| tst.go:36:11:36:17 | tainted | tst.go:36:2:36:2 | u | -| tst.go:36:11:36:17 | tainted | tst.go:37:11:37:11 | u | -| tst.go:37:11:37:11 | u | tst.go:37:11:37:20 | call to String | -| websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | -| websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | -| websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | -| websocket.go:107:21:107:31 | call to Referer | websocket.go:110:15:110:28 | untrustedInput | -| websocket.go:126:21:126:31 | call to Referer | websocket.go:129:38:129:51 | untrustedInput | -| websocket.go:154:21:154:31 | call to Referer | websocket.go:155:31:155:44 | untrustedInput | -| websocket.go:160:21:160:31 | call to Referer | websocket.go:162:31:162:44 | untrustedInput | -| websocket.go:195:21:195:31 | call to Referer | websocket.go:197:18:197:31 | untrustedInput | -| websocket.go:202:21:202:31 | call to Referer | websocket.go:204:11:204:24 | untrustedInput | +| RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:21:34:21:40 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:24:66:24:72 | tainted | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:27:11:27:29 | ...+... | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:29:11:29:40 | ...+... | provenance | | +| tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:17 | tainted | provenance | | +| tst.go:35:2:35:2 | definition of u [pointer] | tst.go:36:2:36:2 | u [pointer] | provenance | | +| tst.go:36:2:36:2 | implicit dereference | tst.go:35:2:35:2 | definition of u [pointer] | provenance | | +| tst.go:36:2:36:2 | implicit dereference | tst.go:36:2:36:2 | u | provenance | | +| tst.go:36:2:36:2 | implicit dereference | tst.go:37:11:37:11 | u | provenance | | +| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | implicit dereference | provenance | | +| tst.go:36:2:36:2 | u | tst.go:36:2:36:2 | u | provenance | | +| tst.go:36:2:36:2 | u | tst.go:37:11:37:11 | u | provenance | | +| tst.go:36:2:36:2 | u [pointer] | tst.go:36:2:36:2 | implicit dereference | provenance | | +| tst.go:36:11:36:17 | tainted | tst.go:36:2:36:2 | u | provenance | | +| tst.go:36:11:36:17 | tainted | tst.go:37:11:37:11 | u | provenance | | +| tst.go:37:11:37:11 | u | tst.go:37:11:37:20 | call to String | provenance | | +| websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | provenance | | +| websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | provenance | | +| websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | provenance | | +| websocket.go:107:21:107:31 | call to Referer | websocket.go:110:15:110:28 | untrustedInput | provenance | | +| websocket.go:126:21:126:31 | call to Referer | websocket.go:129:38:129:51 | untrustedInput | provenance | | +| websocket.go:154:21:154:31 | call to Referer | websocket.go:155:31:155:44 | untrustedInput | provenance | | +| websocket.go:160:21:160:31 | call to Referer | websocket.go:162:31:162:44 | untrustedInput | provenance | | +| websocket.go:195:21:195:31 | call to Referer | websocket.go:197:18:197:31 | untrustedInput | provenance | | +| websocket.go:202:21:202:31 | call to Referer | websocket.go:204:11:204:24 | untrustedInput | provenance | | nodes | RequestForgery.go:8:12:8:34 | call to FormValue | semmle.label | call to FormValue | | RequestForgery.go:11:24:11:65 | ...+... | semmle.label | ...+... | diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 05fc3c67ada..5b3af5e9040 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -76,13 +76,13 @@ jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 jakarta.xml.bind.attachment,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,, java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,50,1,46,,,,,,,,,22,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,1,,44,2 -java.lang,33,3,101,,13,,,,,,1,,,,,,,,,,,,8,,,,6,,,4,,,1,,,,,,,,,,,,,,3,,,58,43 -java.net,21,3,23,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,3,23, -java.nio,49,,36,,,,,,,,,5,,,,,,,,,,,,,,,43,,,,,,,,,1,,,,,,,,,,,,,,36, +java.io,51,1,46,,,,,,,,,22,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,1,,44,2 +java.lang,38,3,101,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,3,,,58,43 +java.net,22,3,24,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,,,,,,3,24, +java.nio,44,,38,,,,,,,,,5,,,,,,,,,,,,,,,38,,,,,,,,,1,,,,,,,,,,,,,,38, java.security,21,,,,,11,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, java.sql,15,1,2,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,9,,,,,,,,1,,,,2, -java.util,47,2,519,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,45,474 +java.util,47,2,520,,,,,,,,,1,,,,,,,,,,,34,,,,2,,,,5,2,,1,2,,,,,,,,,,,,2,,,46,474 javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,7, javax.crypto,19,,4,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, @@ -125,7 +125,7 @@ org.apache.commons.collections4,,,800,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.compress.archivers.tar,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4, org.apache.commons.exec,10,,,,6,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.httpclient.util,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -org.apache.commons.io,117,,562,,,,,,,,,4,,,,,,,,,,,,,,,98,,,,,,,,,15,,,,,,,,,,,,,,548,14 +org.apache.commons.io,118,,562,,,,,,,,,4,,,,,,,,,,,,,,,99,,,,,,,,,15,,,,,,,,,,,,,,548,14 org.apache.commons.jelly,6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,,,,,, org.apache.commons.jexl2,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.apache.commons.jexl3,15,,,,,,,,,,,,,,,,,,15,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, @@ -147,7 +147,7 @@ org.apache.cxf.tools.corba.utils,4,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,, org.apache.cxf.tools.util,10,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,,, org.apache.cxf.transform,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,, org.apache.directory.ldap.client.api,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -org.apache.hadoop.fs,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10, +org.apache.hadoop.fs,3,,11,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,,,,,,,,,,,,11, org.apache.hadoop.hive.metastore,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3,,,,,,,,,,,,, org.apache.hadoop.hive.ql.exec,1,,1,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,1, org.apache.hadoop.hive.ql.metadata,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, @@ -178,10 +178,10 @@ org.apache.velocity.runtime,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,, org.codehaus.cargo.container.installer,3,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,,,,,,,,,,,,,, org.codehaus.groovy.control,1,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, org.dom4j,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20,,,,,,,,, -org.eclipse.jetty.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, +org.eclipse.jetty.client,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,, org.fusesource.leveldbjni,1,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,, org.geogebra.web.full.main,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,, -org.gradle.api.file,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2, +org.gradle.api.file,,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3, org.hibernate,7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7,,,,,,,,,,,,, org.influxdb,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,, org.jboss.logging,324,,,,,,,,,,,,,,,,,,,,,,324,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 78130e9d9c2..3e0edb7dfac 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -10,7 +10,7 @@ Java framework & library support Android,``android.*``,52,481,180,,3,67,,, Android extensions,``androidx.*``,5,183,60,,,,,, `Apache Commons Collections `_,"``org.apache.commons.collections``, ``org.apache.commons.collections4``",,1600,,,,,,, - `Apache Commons IO `_,``org.apache.commons.io``,,562,117,98,,,,,15 + `Apache Commons IO `_,``org.apache.commons.io``,,562,118,99,,,,,15 `Apache Commons Lang `_,``org.apache.commons.lang3``,,425,6,,,,,, `Apache Commons Text `_,``org.apache.commons.text``,,272,,,,,,, `Apache HttpComponents `_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,183,122,,3,,,,119 @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,731,237,79,,9,,,24 + Java Standard Library,``java.*``,10,735,239,80,,9,,,25 Java extensions,"``javax.*``, ``jakarta.*``",67,688,80,5,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring `_,``org.springframework.*``,38,481,118,5,,28,14,,35 - Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10516,889,121,6,22,18,,208 - Totals,,308,18945,2551,331,16,128,33,1,407 + Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.influxdb``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",131,10518,893,124,6,22,18,,209 + Totals,,308,18951,2558,336,16,128,33,1,409 diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index 6cd3611af52..47288394904 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -1617,8 +1617,9 @@ open class KotlinFileExtractor( cls.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB private fun needsInterfaceForwarder(f: IrFunction) = - // forAllMethodsWithBody means -Xjvm-default=all or all-compatibility, in which case real - // Java default interfaces are used, and we don't need to do anything. + // jvmDefaultModeEnabledIsEnabled means that -Xjvm-default=all or all-compatibility was + // used, in which case real Java default interfaces are used, and we don't need to do + // anything. // Otherwise, for a Kotlin-defined method inheriting a Kotlin-defined default, we need to // create a synthetic method like // `int f(int x) { return super.InterfaceWithDefault.f(x); }`, because kotlinc will generate @@ -1626,9 +1627,9 @@ open class KotlinFileExtractor( // (NB. kotlinc's actual implementation strategy is different -- it makes an inner class // called InterfaceWithDefault$DefaultImpls and stores the default methods // there to allow default method usage in Java < 8, but this is hopefully niche. - !pluginContext.languageVersionSettings - .getFlag(JvmAnalysisFlags.jvmDefaultMode) - .forAllMethodsWithBody && + !jvmDefaultModeEnabledIsEnabled( + pluginContext.languageVersionSettings + .getFlag(JvmAnalysisFlags.jvmDefaultMode)) && f.parentClassOrNull.let { it != null && it.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB && diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt new file mode 100644 index 00000000000..cd849652613 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_5_0/JvmDefaultModeEnabled.kt @@ -0,0 +1,7 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.config.JvmDefaultMode + +fun jvmDefaultModeEnabledIsEnabled(jdm: JvmDefaultMode): Boolean { + return jdm.forAllMethodsWithBody +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt new file mode 100644 index 00000000000..10a936ed909 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/JvmDefaultModeEnabled.kt @@ -0,0 +1,7 @@ +package com.github.codeql.utils.versions + +import org.jetbrains.kotlin.config.JvmDefaultMode + +fun jvmDefaultModeEnabledIsEnabled(jdm: JvmDefaultMode): Boolean { + return jdm.isEnabled +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt new file mode 100644 index 00000000000..09c4f42e021 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_0_255-SNAPSHOT/Psi2Ir.kt @@ -0,0 +1,21 @@ +package com.github.codeql.utils.versions + +import com.github.codeql.utils.Psi2IrFacade +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.ir.PsiSourceManager +import org.jetbrains.kotlin.backend.jvm.ir.getKtFile +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.psi.KtFile + +fun getPsi2Ir(): Psi2IrFacade? = Psi2Ir() + +private class Psi2Ir() : Psi2IrFacade { + override fun getKtFile(irFile: IrFile): KtFile? { + return irFile.getKtFile() + } + + override fun findPsiElement(irElement: IrElement, irFile: IrFile): PsiElement? { + return PsiSourceManager.findPsiElement(irElement, irFile) + } +} diff --git a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll index d203e6ca5d0..045886985b8 100644 --- a/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelApplicationModeCharacteristics.qll @@ -35,14 +35,10 @@ newtype TApplicationModeEndpoint = arg = DataFlow::getInstanceArgument(call) and not call instanceof ConstructorCall } or - TImplicitVarargsArray(Call call, DataFlow::Node arg, int idx) { + TImplicitVarargsArray(Call call, DataFlow::ImplicitVarargsArray arg, int idx) { AutomodelJavaUtil::isFromSource(call) and - exists(Argument argExpr | - arg.asExpr() = argExpr and - call.getArgument(idx) = argExpr and - argExpr.isVararg() and - not exists(int i | i < idx and call.getArgument(i).(Argument).isVararg()) - ) + call = arg.getCall() and + idx = call.getCallee().getVaragsParameterIndex() } or TMethodReturnValue(Call call) { AutomodelJavaUtil::isFromSource(call) and @@ -255,45 +251,74 @@ module ApplicationCandidatesImpl implements SharedCharacteristics::CandidateSig predicate isKnownKind = AutomodelJavaUtil::isKnownKind/2; predicate isSink(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string input | - sinkSpec(e, package, type, name, signature, ext, input) and - ExternalFlow::sinkModel(package, type, _, name, [signature, ""], ext, input, kind, provenance) + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input + | + sinkSpec(e, package, type, subtypes, name, signature, ext, input) and + ExternalFlow::sinkModel(package, type, subtypes, name, [signature, ""], ext, input, kind, + provenance) ) or isCustomSink(e, kind) and provenance = "custom-sink" } predicate isSource(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string output | - sourceSpec(e, package, type, name, signature, ext, output) and - ExternalFlow::sourceModel(package, type, _, name, [signature, ""], ext, output, kind, + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output + | + sourceSpec(e, package, type, subtypes, name, signature, ext, output) and + ExternalFlow::sourceModel(package, type, subtypes, name, [signature, ""], ext, output, kind, provenance) ) } predicate isNeutral(Endpoint e) { - exists(string package, string type, string name, string signature | - sinkSpec(e, package, type, name, signature, _, _) and - ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) + exists(string package, string type, string name, string signature, string endpointType | + sinkSpec(e, package, type, _, name, signature, _, _) and + endpointType = "sink" + or + sourceSpec(e, package, type, _, name, signature, _, _) and + endpointType = "source" + | + ExternalFlow::neutralModel(package, type, name, [signature, ""], endpointType, _) ) } - // XXX how to extend to support sources? - additional predicate sinkSpec( - Endpoint e, string package, string type, string name, string signature, string ext, string input + /** + * Holds if the endpoint concerns a callable with the given package, type, name and signature. + * + * If `subtypes` is `false`, only the exact callable is considered. If `true`, the callable and + * all its overrides are considered. + */ + additional predicate endpointCallable( + Endpoint e, string package, string type, boolean subtypes, string name, string signature ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + exists(Callable c | + c = e.getCallable() and subtypes in [true, false] + or + e.getCallable().(Method).getSourceDeclaration().overrides+(c) and subtypes = true + | + c.hasQualifiedName(package, type, name) and + signature = ExternalFlow::paramsString(c) + ) + } + + additional predicate sinkSpec( + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string input + ) { + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and input = e.getMaDInput() } additional predicate sourceSpec( - Endpoint e, string package, string type, string name, string signature, string ext, - string output + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string output ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and output = e.getMaDOutput() } @@ -465,7 +490,7 @@ predicate isPositiveExample( * TODO: this might filter too much, it's possible that methods with more than one parameter contain interesting sinks */ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { - UnexploitableIsCharacteristic() { this = "unexploitable (is-style boolean method)" } + UnexploitableIsCharacteristic() { this = "argument of is-style boolean method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getName().matches("is%") and @@ -483,7 +508,7 @@ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NotASin * dangerous/interesting thing, so we want the latter to be modeled as the sink. */ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::NotASinkCharacteristic { - UnexploitableExistsCharacteristic() { this = "unexploitable (existence-checking boolean method)" } + UnexploitableExistsCharacteristic() { this = "argument of existence-checking boolean method" } override predicate appliesToEndpoint(Endpoint e) { exists(Callable callable | callable = e.getCallable() | @@ -499,7 +524,7 @@ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::Not */ private class ExceptionCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - ExceptionCharacteristic() { this = "exception" } + ExceptionCharacteristic() { this = "argument/result of exception-related method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable and diff --git a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll index 6981e0369b5..96f886e302d 100644 --- a/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll +++ b/java/ql/automodel/src/AutomodelFrameworkModeCharacteristics.qll @@ -209,46 +209,72 @@ module FrameworkCandidatesImpl implements SharedCharacteristics::CandidateSig { predicate isKnownKind = AutomodelJavaUtil::isKnownKind/2; predicate isSink(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string input | - sinkSpec(e, package, type, name, signature, ext, input) and - ExternalFlow::sinkModel(package, type, _, name, [signature, ""], ext, input, kind, provenance) + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string input + | + sinkSpec(e, package, type, subtypes, name, signature, ext, input) and + ExternalFlow::sinkModel(package, type, subtypes, name, [signature, ""], ext, input, kind, + provenance) ) } predicate isSource(Endpoint e, string kind, string provenance) { - exists(string package, string type, string name, string signature, string ext, string output | - sourceSpec(e, package, type, name, signature, ext, output) and - ExternalFlow::sourceModel(package, type, _, name, [signature, ""], ext, output, kind, + exists( + string package, string type, boolean subtypes, string name, string signature, string ext, + string output + | + sourceSpec(e, package, type, subtypes, name, signature, ext, output) and + ExternalFlow::sourceModel(package, type, subtypes, name, [signature, ""], ext, output, kind, provenance) ) } predicate isNeutral(Endpoint e) { - exists(string package, string type, string name, string signature | - ( - sinkSpec(e, package, type, name, signature, _, _) - or - sourceSpec(e, package, type, name, signature, _, _) - ) and - ExternalFlow::neutralModel(package, type, name, [signature, ""], "sink", _) + exists(string package, string type, string name, string signature, string endpointType | + sinkSpec(e, package, type, _, name, signature, _, _) and + endpointType = "sink" + or + sourceSpec(e, package, type, _, name, signature, _, _) and + endpointType = "source" + | + ExternalFlow::neutralModel(package, type, name, [signature, ""], endpointType, _) + ) + } + + /** + * Holds if the endpoint concerns a callable with the given package, type, name and signature. + * + * If `subtypes` is `false`, only the exact callable is considered. If `true`, the callable and + * all its overrides are considered. + */ + additional predicate endpointCallable( + Endpoint e, string package, string type, boolean subtypes, string name, string signature + ) { + exists(Callable c | + c = e.getCallable() and subtypes in [true, false] + or + e.getCallable().(Method).getSourceDeclaration().overrides+(c) and subtypes = true + | + c.hasQualifiedName(package, type, name) and + signature = ExternalFlow::paramsString(c) ) } additional predicate sinkSpec( - Endpoint e, string package, string type, string name, string signature, string ext, string input + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string input ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and input = e.getMaDInput() } additional predicate sourceSpec( - Endpoint e, string package, string type, string name, string signature, string ext, - string output + Endpoint e, string package, string type, boolean subtypes, string name, string signature, + string ext, string output ) { - e.getCallable().hasQualifiedName(package, type, name) and - signature = ExternalFlow::paramsString(e.getCallable()) and + endpointCallable(e, package, type, subtypes, name, signature) and ext = "" and output = e.getMaDOutput() } @@ -404,7 +430,7 @@ predicate isPositiveExample( */ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - UnexploitableIsCharacteristic() { this = "unexploitable (is-style boolean method)" } + UnexploitableIsCharacteristic() { this = "argument of is-style boolean method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getName().matches("is%") and @@ -430,7 +456,7 @@ private class UnexploitableIsCharacteristic extends CharacteristicsImpl::Neither */ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - UnexploitableExistsCharacteristic() { this = "unexploitable (existence-checking boolean method)" } + UnexploitableExistsCharacteristic() { this = "argument of existence-checking boolean method" } override predicate appliesToEndpoint(Endpoint e) { exists(Callable callable | @@ -454,7 +480,7 @@ private class UnexploitableExistsCharacteristic extends CharacteristicsImpl::Nei */ private class ExceptionCharacteristic extends CharacteristicsImpl::NeitherSourceNorSinkCharacteristic { - ExceptionCharacteristic() { this = "exception" } + ExceptionCharacteristic() { this = "argument/result of exception-related method" } override predicate appliesToEndpoint(Endpoint e) { e.getCallable().getDeclaringType().getASupertype*() instanceof TypeThrowable and diff --git a/java/ql/automodel/src/CHANGELOG.md b/java/ql/automodel/src/CHANGELOG.md index fa718635e0c..4a3c54adb38 100644 --- a/java/ql/automodel/src/CHANGELOG.md +++ b/java/ql/automodel/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.0.16 + +No user-facing changes. + +## 0.0.15 + +No user-facing changes. + ## 0.0.14 No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.15.md b/java/ql/automodel/src/change-notes/released/0.0.15.md new file mode 100644 index 00000000000..7af9c05f23f --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.15.md @@ -0,0 +1,3 @@ +## 0.0.15 + +No user-facing changes. diff --git a/java/ql/automodel/src/change-notes/released/0.0.16.md b/java/ql/automodel/src/change-notes/released/0.0.16.md new file mode 100644 index 00000000000..62b5521ea01 --- /dev/null +++ b/java/ql/automodel/src/change-notes/released/0.0.16.md @@ -0,0 +1,3 @@ +## 0.0.16 + +No user-facing changes. diff --git a/java/ql/automodel/src/codeql-pack.release.yml b/java/ql/automodel/src/codeql-pack.release.yml index ca29e45d0a6..a49f7be4cff 100644 --- a/java/ql/automodel/src/codeql-pack.release.yml +++ b/java/ql/automodel/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.0.14 +lastReleaseVersion: 0.0.16 diff --git a/java/ql/automodel/src/qlpack.yml b/java/ql/automodel/src/qlpack.yml index 3334223e9e4..655c3da2fc6 100644 --- a/java/ql/automodel/src/qlpack.yml +++ b/java/ql/automodel/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-automodel-queries -version: 0.0.14 +version: 0.0.16 groups: - java - automodel diff --git a/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java b/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java index ee8f798f9b9..4d6aff63fd0 100644 --- a/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java +++ b/java/ql/automodel/test/AutomodelApplicationModeExtraction/Test.java @@ -40,11 +40,12 @@ class Test { ); // $ sourceModelCandidate=newInputStream(Path,OpenOption[]):ReturnValue } - public static InputStream getInputStream(String openPath) throws Exception { + public static InputStream getInputStream(String openPath, String otherPath) throws Exception { return Test.getInputStream( // the call is not a source candidate (argument to local call) Paths.get( - openPath // $ negativeSinkExample=get(String,String[]):Argument[0] // modeled as a flow step - ) // $ sourceModelCandidate=get(String,String[]):ReturnValue + openPath, // $ negativeSinkExample=get(String,String[]):Argument[0] // modeled as a flow step + otherPath + ) // $ sourceModelCandidate=get(String,String[]):ReturnValue negativeSinkExample=get(String,String[]):Argument[1] ); } diff --git a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java new file mode 100644 index 00000000000..b31ace21b4d --- /dev/null +++ b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/com/github/codeql/test/MyWriter.java @@ -0,0 +1,15 @@ +package com.github.codeql.test; + +public class MyWriter extends java.io.Writer { + @Override + public void write(char[] cbuf, int off, int len) { // $ sinkModelCandidate=write(char[],int,int):Argument[this] sourceModelCandidate=write(char[],int,int):Parameter[this] sourceModelCandidate=write(char[],int,int):Parameter[0] + } + + @Override + public void close() { // $ sinkModelCandidate=close():Argument[this] sourceModelCandidate=close():Parameter[this] + } + + @Override + public void flush() { // $ sinkModelCandidate=flush():Argument[this] sourceModelCandidate=flush():Parameter[this] + } +} diff --git a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java index c23b6165c64..8bfe83e2339 100644 --- a/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java +++ b/java/ql/automodel/test/AutomodelFrameworkModeExtraction/java/io/File.java @@ -1,8 +1,8 @@ package java.io; public class File { - public int compareTo( // $ negativeSinkExample=compareTo(File):Argument[this] negativeSourceExample=compareTo(File):Parameter[this] // modeled as neutral - File pathname // $ negativeSinkExample=compareTo(File):Argument[0] negativeSourceExample=compareTo(File):Parameter[0] // modeled as neutral + public int compareTo( // $ negativeSinkExample=compareTo(File):Argument[this] sourceModelCandidate=compareTo(File):Parameter[this] // modeled as neutral for sinks + File pathname // $ negativeSinkExample=compareTo(File):Argument[0] sourceModelCandidate=compareTo(File):Parameter[0] // modeled as neutral for sinks ) { return 0; } diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected index a6c80a37475..44842823621 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/buildless-fetches.expected @@ -25,3 +25,4 @@ https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.1 https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar +https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar diff --git a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected index 85455235b43..b8e399f746a 100644 --- a/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected +++ b/java/ql/integration-tests/all-platforms/java/buildless-sibling-projects/diagnostics.expected @@ -69,7 +69,7 @@ } } { - "markdownMessage": "Reading the dependency graph from build files provided 3 classpath entries", + "markdownMessage": "Reading the dependency graph from build files provided 4 classpath entries", "severity": "unknown", "source": { "extractorName": "java", diff --git a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected b/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected index 9f16308bdfc..68f05e908f6 100644 --- a/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected +++ b/java/ql/integration-tests/all-platforms/kotlin/kotlin_java_static_fields/test.expected @@ -1,12 +1,12 @@ edges -| hasFields.kt:5:5:5:34 | constField : String | ReadsFields.java:5:10:5:29 | HasFields.constField | -| hasFields.kt:5:28:5:34 | "taint" : String | hasFields.kt:5:5:5:34 | constField : String | -| hasFields.kt:7:5:7:38 | lateinitField : String | ReadsFields.java:6:10:6:32 | HasFields.lateinitField | -| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:5:7:38 | lateinitField : String | -| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:14:7:38 | : String | -| hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | ReadsFields.java:7:10:7:41 | HasFields.jvmFieldAnnotatedField | -| hasFields.kt:9:44:9:50 | "taint" : String | hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | -| hasFields.kt:14:22:14:26 | "taint" : String | hasFields.kt:7:14:7:38 | : String | +| hasFields.kt:5:5:5:34 | constField : String | ReadsFields.java:5:10:5:29 | HasFields.constField | provenance | | +| hasFields.kt:5:28:5:34 | "taint" : String | hasFields.kt:5:5:5:34 | constField : String | provenance | | +| hasFields.kt:7:5:7:38 | lateinitField : String | ReadsFields.java:6:10:6:32 | HasFields.lateinitField | provenance | | +| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:5:7:38 | lateinitField : String | provenance | | +| hasFields.kt:7:14:7:38 | : String | hasFields.kt:7:14:7:38 | : String | provenance | | +| hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | ReadsFields.java:7:10:7:41 | HasFields.jvmFieldAnnotatedField | provenance | | +| hasFields.kt:9:44:9:50 | "taint" : String | hasFields.kt:9:5:9:50 | jvmFieldAnnotatedField : String | provenance | | +| hasFields.kt:14:22:14:26 | "taint" : String | hasFields.kt:7:14:7:38 | : String | provenance | | nodes | ReadsFields.java:5:10:5:29 | HasFields.constField | semmle.label | HasFields.constField | | ReadsFields.java:6:10:6:32 | HasFields.lateinitField | semmle.label | HasFields.lateinitField | diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 4b34106dc09..d369cbdc931 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,27 @@ +## 0.8.9 + +### Deprecated APIs + +* The `PathCreation` class in `PathCreation.qll` has been deprecated. + +### Minor Analysis Improvements + +* An extension point for sanitizers of the query `java/unvalidated-url-redirection` has been added. +* Added models for the following packages: + + * java.io + * java.lang + * java.net + * java.net.http + * java.nio.file + * java.util.zip + * javax.servlet + * org.apache.commons.io + * org.apache.hadoop.fs + * org.apache.hadoop.fs.s3a + * org.eclipse.jetty.client + * org.gradle.api.file + ## 0.8.8 ### Minor Analysis Improvements diff --git a/java/ql/lib/change-notes/released/0.8.9.md b/java/ql/lib/change-notes/released/0.8.9.md new file mode 100644 index 00000000000..16c4eb6b259 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.8.9.md @@ -0,0 +1,23 @@ +## 0.8.9 + +### Deprecated APIs + +* The `PathCreation` class in `PathCreation.qll` has been deprecated. + +### Minor Analysis Improvements + +* An extension point for sanitizers of the query `java/unvalidated-url-redirection` has been added. +* Added models for the following packages: + + * java.io + * java.lang + * java.net + * java.net.http + * java.nio.file + * java.util.zip + * javax.servlet + * org.apache.commons.io + * org.apache.hadoop.fs + * org.apache.hadoop.fs.s3a + * org.eclipse.jetty.client + * org.gradle.api.file diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index da0a61b4048..5290c29b7fe 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.9 diff --git a/java/ql/lib/ext/java.io.model.yml b/java/ql/lib/ext/java.io.model.yml index 1bd9251c29d..ef0f4dbb0a6 100644 --- a/java/ql/lib/ext/java.io.model.yml +++ b/java/ql/lib/ext/java.io.model.yml @@ -3,18 +3,19 @@ extensions: pack: codeql/java-all extensible: sinkModel data: - - ["java.io", "File", False, "File", "(File,String)", "", "Argument[1]", "path-injection", "manual"] # old PathCreation - - ["java.io", "File", False, "File", "(String)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.io", "File", False, "File", "(String,String)", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - - ["java.io", "File", False, "File", "(URI)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - ["java.io", "File", True, "createNewFile", "()", "", "Argument[this]", "path-injection", "ai-manual"] - ["java.io", "File", True, "createTempFile", "(String,String,File)", "", "Argument[2]", "path-injection", "ai-manual"] + - ["java.io", "File", True, "exists", "()", "", "Argument[this]", "path-injection", "manual"] - ["java.io", "File", True, "renameTo", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.io", "File", True, "renameTo", "(File)", "", "Argument[this]", "path-injection", "ai-manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.io", "FileInputStream", True, "FileInputStream", "(FileDescriptor)", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileInputStream", True, "FileInputStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileOutputStream", False, "FileOutputStream", "", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileOutputStream", False, "write", "", "", "Argument[0]", "file-content-store", "manual"] - ["java.io", "FileReader", True, "FileReader", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.io", "FileReader", True, "FileReader", "(FileDescriptor)", "", "Argument[0]", "path-injection", "manual"] + - ["java.io", "FileReader", True, "FileReader", "(File,Charset)", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileReader", True, "FileReader", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.io", "FileReader", True, "FileReader", "(String,Charset)", "", "Argument[0]", "path-injection", "manual"] - ["java.io", "FileSystem", True, "createDirectory", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] @@ -127,9 +128,8 @@ extensions: - ["java.io", "DataOutput", "writeLong", "(long)", "summary", "manual"] # taint-numeric # sink neutrals - ["java.io", "File", "compareTo", "", "sink", "hq-manual"] - - ["java.io", "File", "exists", "()", "sink", "hq-manual"] - addsTo: pack: codeql/java-all extensible: sourceModel data: - - ["java.io", "FileInputStream", True, "FileInputStream", "", "", "Argument[this]", "file", "manual"] \ No newline at end of file + - ["java.io", "FileInputStream", True, "FileInputStream", "", "", "Argument[this]", "file", "manual"] diff --git a/java/ql/lib/ext/java.lang.model.yml b/java/ql/lib/ext/java.lang.model.yml index 0d09247f4c1..183ed225303 100644 --- a/java/ql/lib/ext/java.lang.model.yml +++ b/java/ql/lib/ext/java.lang.model.yml @@ -5,6 +5,10 @@ extensions: data: - ["java.lang", "Class", False, "getResource", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "Class", False, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", False, "getSystemResources", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", True, "getResource", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ClassLoader", True, "getResources", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "ClassLoader", True, "getSystemResource", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "ClassLoader", True, "getSystemResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "Module", True, "getResourceAsStream", "(String)", "", "Argument[0]", "path-injection", "ai-manual"] @@ -14,6 +18,7 @@ extensions: - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(List)", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "ProcessBuilder", False, "ProcessBuilder", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "ProcessBuilder", False, "redirectError", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["java.lang", "ProcessBuilder", False, "redirectOutput", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.lang", "Runtime", True, "exec", "(String)", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "Runtime", True, "exec", "(String[])", "", "Argument[0]", "command-injection", "ai-manual"] - ["java.lang", "Runtime", True, "exec", "(String[],String[])", "", "Argument[0]", "command-injection", "ai-manual"] diff --git a/java/ql/lib/ext/java.net.http.model.yml b/java/ql/lib/ext/java.net.http.model.yml index 9fc18d2eaab..b920eb3da08 100644 --- a/java/ql/lib/ext/java.net.http.model.yml +++ b/java/ql/lib/ext/java.net.http.model.yml @@ -8,5 +8,6 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["java.net.http", "HttpClient", True, "send", "(HttpRequest,HttpResponse$BodyHandler)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["java.net.http", "HttpRequest", False, "newBuilder", "", "", "Argument[0]", "request-forgery", "manual"] - ["java.net.http", "HttpRequest$Builder", False, "uri", "", "", "Argument[0]", "request-forgery", "manual"] diff --git a/java/ql/lib/ext/java.net.model.yml b/java/ql/lib/ext/java.net.model.yml index 521d42b9c0f..afdf3320b08 100644 --- a/java/ql/lib/ext/java.net.model.yml +++ b/java/ql/lib/ext/java.net.model.yml @@ -44,6 +44,7 @@ extensions: - ["java.net", "InetSocketAddress", True, "InetSocketAddress", "(String,int)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["java.net", "URI", False, "resolve", "(URI)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String,String,String,int,String,String,String)", "", "Argument[5]", "Argument[this].SyntheticField[java.net.URI.query]", "taint", "ai-manual"] + - ["java.net", "URI", False, "URI", "(String,String,String)", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.net", "URI", False, "URI", "(String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.net", "URI", False, "create", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.net", "URI", False, "resolve", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/ext/java.nio.file.model.yml b/java/ql/lib/ext/java.nio.file.model.yml index 3c77c876eee..39a83291fc0 100644 --- a/java/ql/lib/ext/java.nio.file.model.yml +++ b/java/ql/lib/ext/java.nio.file.model.yml @@ -18,6 +18,7 @@ extensions: - ["java.nio.file", "Files", False, "delete", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "deleteIfExists", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "getFileStore", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] # the FileStore class is unlikely to be used for later sanitization + - ["java.nio.file", "Files", False, "exists", "(Path,LinkOption[])", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "lines", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "lines", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "move", "", "", "Argument[1]", "path-injection", "manual"] @@ -27,6 +28,7 @@ extensions: - ["java.nio.file", "Files", False, "newBufferedWriter", "", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "newInputStream", "(Path,OpenOption[])", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "newOutputStream", "", "", "Argument[0]", "path-injection", "manual"] + - ["java.nio.file", "Files", False, "notExists", "(Path,LinkOption[])", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "probeContentType", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] # accesses the file based on user input, but only reads its content type from it - ["java.nio.file", "Files", False, "readAllBytes", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "Files", False, "readAllLines", "(Path,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] @@ -37,15 +39,8 @@ extensions: - ["java.nio.file", "Files", False, "write", "", "", "Argument[1]", "file-content-store", "manual"] - ["java.nio.file", "Files", False, "writeString", "", "", "Argument[0]", "path-injection", "manual"] - ["java.nio.file", "Files", False, "writeString", "", "", "Argument[1]", "file-content-store", "manual"] - - ["java.nio.file", "FileSystem", False, "getPath", "", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "FileSystems", False, "newFileSystem", "(URI,Map)", "", "Argument[0]", "request-forgery", "ai-manual"] - - ["java.nio.file", "Path", False, "of", "(String,String[])", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Path", False, "of", "(URI)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Path", False, "resolve", "(String)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Path", False, "resolveSibling", "(String)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Paths", False, "get", "(String,String[])", "", "Argument[0..1]", "path-injection", "manual"] # old PathCreation - - ["java.nio.file", "Paths", False, "get", "(URI)", "", "Argument[0]", "path-injection", "manual"] # old PathCreation - ["java.nio.file", "SecureDirectoryStream", True, "deleteDirectory", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - ["java.nio.file", "SecureDirectoryStream", True, "deleteFile", "(Path)", "", "Argument[0]", "path-injection", "ai-manual"] - addsTo: @@ -63,10 +58,11 @@ extensions: - ["java.nio.file", "Files", True, "newDirectoryStream", "(Path,DirectoryStream$Filter)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Files", True, "newDirectoryStream", "(Path)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Files", True, "walk", "(Path,FileVisitOption[])", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - - ["java.nio.file", "FileSystem", True, "getPath", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio.file", "FileSystem", True, "getPath", "(String,String[])", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "FileSystem", True, "getPath", "(String,String[])", "", "Argument[1]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getPathMatcher", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "FileSystem", True, "getRootDirectories", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.nio.file", "FileSystems", False, "getFileSystem", "(URI)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Path", True, "getFileName", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "getParent", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "normalize", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -76,7 +72,8 @@ extensions: - ["java.nio.file", "Path", True, "relativize", "(Path)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "resolve", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["java.nio.file", "Path", True, "resolveSibling", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["java.nio.file", "Path", True, "resolveSibling", "", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["java.nio.file", "Path", True, "resolveSibling", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toAbsolutePath", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", False, "toFile", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["java.nio.file", "Path", True, "toString", "", "", "Argument[this]", "ReturnValue", "taint", "manual"] @@ -95,7 +92,6 @@ extensions: # summary neutrals - ["java.nio.file", "Files", "exists", "(Path,LinkOption[])", "summary", "manual"] # sink neutrals - - ["java.nio.file", "Files", "exists", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getOwner", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "getPosixFilePermissions", "", "sink", "hq-manual"] @@ -107,6 +103,5 @@ extensions: - ["java.nio.file", "Files", "isSameFile", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "isSymbolicLink", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "isWritable", "", "sink", "hq-manual"] - - ["java.nio.file", "Files", "notExists", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "setLastModifiedTime", "", "sink", "hq-manual"] - ["java.nio.file", "Files", "size", "", "sink", "hq-manual"] diff --git a/java/ql/lib/ext/java.util.zip.model.yml b/java/ql/lib/ext/java.util.zip.model.yml index 577e6b35723..611fc7804ef 100644 --- a/java/ql/lib/ext/java.util.zip.model.yml +++ b/java/ql/lib/ext/java.util.zip.model.yml @@ -5,6 +5,7 @@ extensions: data: - ["java.util.zip", "GZIPInputStream", False, "GZIPInputStream", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["java.util.zip", "ZipEntry", True, "ZipEntry", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] + - ["java.util.zip", "ZipFile", True, "getInputStream", "(ZipEntry)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["java.util.zip", "ZipInputStream", False, "ZipInputStream", "", "", "Argument[0]", "Argument[this]", "taint", "manual"] - addsTo: pack: codeql/java-all diff --git a/java/ql/lib/ext/org.apache.commons.io.model.yml b/java/ql/lib/ext/org.apache.commons.io.model.yml index 20de13c5366..fccecd72912 100644 --- a/java/ql/lib/ext/org.apache.commons.io.model.yml +++ b/java/ql/lib/ext/org.apache.commons.io.model.yml @@ -21,6 +21,7 @@ extensions: - ["org.apache.commons.io", "FileUtils", False, "forceMkdir", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "moveDirectory", "(File,File)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "readFileToByteArray", "(File)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["org.apache.commons.io", "FileUtils", False, "readFileToString", "(File,Charset)", "", "Argument[0]", "path-injection", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "writeLines", "(File,String,Collection,String)", "", "Argument[3]", "file-content-store", "ai-manual"] - ["org.apache.commons.io", "FileUtils", False, "writeStringToFile", "(File,String,Charset,boolean)", "", "Argument[1]", "file-content-store", "ai-manual"] - ["org.apache.commons.io", "FileUtils", True, "copyInputStreamToFile", "(InputStream,File)", "", "Argument[0]", "file-content-store", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.hadoop.fs.model.yml b/java/ql/lib/ext/org.apache.hadoop.fs.model.yml index ba819b73776..d8b6febd1f8 100644 --- a/java/ql/lib/ext/org.apache.hadoop.fs.model.yml +++ b/java/ql/lib/ext/org.apache.hadoop.fs.model.yml @@ -3,6 +3,7 @@ extensions: pack: codeql/java-all extensible: summaryModel data: + - ["org.apache.hadoop.fs", "FileSystem", True, "makeQualified", "(Path)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(Path,Path)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(Path,Path)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(Path,String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] @@ -13,3 +14,9 @@ extensions: - ["org.apache.hadoop.fs", "Path", True, "Path", "(String,String)", "", "Argument[1]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(String)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] - ["org.apache.hadoop.fs", "Path", True, "Path", "(URI)", "", "Argument[0]", "Argument[this]", "taint", "ai-manual"] + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.apache.hadoop.fs", "FileSystem", True, "rename", "(Path,Path)", "", "Argument[0]", "path-injection", "ai-manual"] + - ["org.apache.hadoop.fs", "FileSystem", True, "rename", "(Path,Path)", "", "Argument[1]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.apache.hadoop.fs.s3a.model.yml b/java/ql/lib/ext/org.apache.hadoop.fs.s3a.model.yml new file mode 100644 index 00000000000..4d5d9484335 --- /dev/null +++ b/java/ql/lib/ext/org.apache.hadoop.fs.s3a.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: sinkModel + data: + - ["org.apache.hadoop.fs.s3a", "WriteOperationHelper", True, "createPutObjectRequest", "(String,File)", "", "Argument[1]", "path-injection", "ai-manual"] diff --git a/java/ql/lib/ext/org.eclipse.jetty.client.model.yml b/java/ql/lib/ext/org.eclipse.jetty.client.model.yml index 28c3430e818..bd3b4f58e72 100644 --- a/java/ql/lib/ext/org.eclipse.jetty.client.model.yml +++ b/java/ql/lib/ext/org.eclipse.jetty.client.model.yml @@ -3,4 +3,5 @@ extensions: pack: codeql/java-all extensible: sinkModel data: + - ["org.eclipse.jetty.client", "HttpClient", True, "GET", "(String)", "", "Argument[0]", "request-forgery", "ai-manual"] - ["org.eclipse.jetty.client", "HttpClient", True, "newRequest", "(String)", "", "Argument[0]", "request-forgery", "ai-manual"] diff --git a/java/ql/lib/ext/org.gradle.api.file.model.yml b/java/ql/lib/ext/org.gradle.api.file.model.yml index 4f492cdbcbc..c3d202aab39 100644 --- a/java/ql/lib/ext/org.gradle.api.file.model.yml +++ b/java/ql/lib/ext/org.gradle.api.file.model.yml @@ -4,4 +4,5 @@ extensions: extensible: summaryModel data: - ["org.gradle.api.file", "Directory", True, "getAsFile", "()", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] + - ["org.gradle.api.file", "DirectoryProperty", True, "dir", "(String)", "", "Argument[0]", "ReturnValue", "taint", "ai-manual"] - ["org.gradle.api.file", "DirectoryProperty", True, "file", "(String)", "", "Argument[this]", "ReturnValue", "taint", "ai-manual"] diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index d144e5741cf..a0f87a259bd 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.8.8 +version: 0.8.9 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index be3976b8458..74f37a4a451 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -378,7 +378,17 @@ class ArrayInit extends Expr, @arrayinit { override string getAPrimaryQlClass() { result = "ArrayInit" } } -/** A common super-class that represents all varieties of assignments. */ +/** + * A common super-class that represents many varieties of assignments. + * + * This does not cover unary assignments such as `i++`, and initialization of + * local variables at their declaration such as `int i = 0;`. + * + * To cover more cases of variable updates, see the classes `VariableAssign`, + * `VariableUpdate` and `VarWrite`. But consider that they don't cover array + * element assignments since there the assignment destination is not directly + * the array variable but instead an `ArrayAccess`. + */ class Assignment extends Expr, @assignment { /** Gets the destination (left-hand side) of the assignment. */ Expr getDest() { result.isNthChildOf(this, 0) } @@ -1781,6 +1791,9 @@ class VariableUpdate extends Expr { /** * An assignment to a variable or an initialization of the variable. + * + * This does not cover compound assignments such as `i += 1`, or unary + * assignments such as `i++`; use the class `VariableUpdate` for that. */ class VariableAssign extends VariableUpdate { VariableAssign() { @@ -1979,6 +1992,9 @@ class ExtensionReceiverAccess extends VarAccess { /** * A write access to a variable, which occurs as the destination of an assignment. + * + * This does not cover the initialization of local variables at their declaration, + * use the class `VariableUpdate` if you want to cover that as well. */ class VarWrite extends VarAccess { VarWrite() { this.isVarWrite() } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 968822395e5..35a0920c8c9 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -178,6 +178,10 @@ private predicate captureReadStep(Node node1, CapturedVariableContent c, Node no CaptureFlow::readStep(asClosureNode(node1), c.getVariable(), asClosureNode(node2)) } +private predicate captureClearsContent(Node node, CapturedVariableContent c) { + CaptureFlow::clearsContent(asClosureNode(node), c.getVariable()) +} + predicate captureValueStep(Node node1, Node node2) { CaptureFlow::localFlowStep(asClosureNode(node1), asClosureNode(node2)) } @@ -311,6 +315,8 @@ predicate clearsContent(Node n, ContentSet c) { ) or FlowSummaryImpl::Private::Steps::summaryClearsContent(n.(FlowSummaryNode).getSummaryNode(), c) + or + captureClearsContent(n, c) } /** diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll new file mode 100644 index 00000000000..ca725a041d5 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -0,0 +1,42 @@ +/** Definitions for the insecure local authentication query. */ + +import java + +/** A base class that is used as a callback for biometric authentication. */ +private class AuthenticationCallbackClass extends Class { + AuthenticationCallbackClass() { + this.hasQualifiedName("android.hardware.fingerprint", + "FingerprintManager$AuthenticationCallback") + or + this.hasQualifiedName("android.hardware.biometrics", "BiometricPrompt$AuthenticationCallback") + or + this.hasQualifiedName("androidx.biometric", "BiometricPrompt$AuthenticationCallback") + } +} + +/** An implementation of the `onAuthenticationSucceeded` method for an authentication callback. */ +class AuthenticationSuccessCallback extends Method { + AuthenticationSuccessCallback() { + this.getDeclaringType().getASupertype+() instanceof AuthenticationCallbackClass and + this.hasName("onAuthenticationSucceeded") + } + + /** Gets the parameter containing the `authenticationResult`. */ + Parameter getResultParameter() { result = this.getParameter(0) } + + /** Gets a use of the result parameter that's used in a `super` call to the base `AuthenticationCallback` class. */ + private VarAccess getASuperResultUse() { + exists(SuperMethodCall sup | + sup.getEnclosingCallable() = this and + result = sup.getArgument(0) and + result = this.getResultParameter().getAnAccess() and + this.getDeclaringType().getASupertype() instanceof AuthenticationCallbackClass + ) + } + + /** Gets a use of the result parameter, other than one used in a `super` call. */ + VarAccess getAResultUse() { + result = this.getResultParameter().getAnAccess() and + not result = this.getASuperResultUse() + } +} diff --git a/java/ql/lib/semmle/code/java/security/PathCreation.qll b/java/ql/lib/semmle/code/java/security/PathCreation.qll index 924d42674fb..3d40a1d4fdb 100644 --- a/java/ql/lib/semmle/code/java/security/PathCreation.qll +++ b/java/ql/lib/semmle/code/java/security/PathCreation.qll @@ -1,11 +1,13 @@ /** + * DEPRECATED. + * * Models the different ways to create paths. Either by using `java.io.File`-related APIs or `java.nio.file.Path`-related APIs. */ import java -/** Models the creation of a path. */ -abstract class PathCreation extends Expr { +/** DEPRECATED: Models the creation of a path. */ +abstract deprecated class PathCreation extends Expr { /** * Gets an input that is used in the creation of this path. * This excludes inputs of type `File` and `Path`. @@ -14,7 +16,7 @@ abstract class PathCreation extends Expr { } /** Models the `java.nio.file.Paths.get` method. */ -private class PathsGet extends PathCreation, MethodCall { +deprecated private class PathsGet extends PathCreation, MethodCall { PathsGet() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePaths and @@ -26,7 +28,7 @@ private class PathsGet extends PathCreation, MethodCall { } /** Models the `java.nio.file.FileSystem.getPath` method. */ -private class FileSystemGetPath extends PathCreation, MethodCall { +deprecated private class FileSystemGetPath extends PathCreation, MethodCall { FileSystemGetPath() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypeFileSystem and @@ -38,7 +40,7 @@ private class FileSystemGetPath extends PathCreation, MethodCall { } /** Models the `new java.io.File(...)` constructor. */ -private class FileCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileCreation extends PathCreation, ClassInstanceExpr { FileCreation() { this.getConstructedType() instanceof TypeFile } override Expr getAnInput() { @@ -49,7 +51,7 @@ private class FileCreation extends PathCreation, ClassInstanceExpr { } /** Models the `java.nio.file.Path.resolveSibling` method. */ -private class PathResolveSiblingCreation extends PathCreation, MethodCall { +deprecated private class PathResolveSiblingCreation extends PathCreation, MethodCall { PathResolveSiblingCreation() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePath and @@ -65,7 +67,7 @@ private class PathResolveSiblingCreation extends PathCreation, MethodCall { } /** Models the `java.nio.file.Path.resolve` method. */ -private class PathResolveCreation extends PathCreation, MethodCall { +deprecated private class PathResolveCreation extends PathCreation, MethodCall { PathResolveCreation() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePath and @@ -81,7 +83,7 @@ private class PathResolveCreation extends PathCreation, MethodCall { } /** Models the `java.nio.file.Path.of` method. */ -private class PathOfCreation extends PathCreation, MethodCall { +deprecated private class PathOfCreation extends PathCreation, MethodCall { PathOfCreation() { exists(Method m | m = this.getMethod() | m.getDeclaringType() instanceof TypePath and @@ -93,7 +95,7 @@ private class PathOfCreation extends PathCreation, MethodCall { } /** Models the `new java.io.FileWriter(...)` constructor. */ -private class FileWriterCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileWriterCreation extends PathCreation, ClassInstanceExpr { FileWriterCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileWriter") } override Expr getAnInput() { @@ -104,7 +106,7 @@ private class FileWriterCreation extends PathCreation, ClassInstanceExpr { } /** Models the `new java.io.FileReader(...)` constructor. */ -private class FileReaderCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileReaderCreation extends PathCreation, ClassInstanceExpr { FileReaderCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileReader") } override Expr getAnInput() { @@ -115,7 +117,7 @@ private class FileReaderCreation extends PathCreation, ClassInstanceExpr { } /** Models the `new java.io.FileInputStream(...)` constructor. */ -private class FileInputStreamCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileInputStreamCreation extends PathCreation, ClassInstanceExpr { FileInputStreamCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileInputStream") } @@ -128,7 +130,7 @@ private class FileInputStreamCreation extends PathCreation, ClassInstanceExpr { } /** Models the `new java.io.FileOutputStream(...)` constructor. */ -private class FileOutputStreamCreation extends PathCreation, ClassInstanceExpr { +deprecated private class FileOutputStreamCreation extends PathCreation, ClassInstanceExpr { FileOutputStreamCreation() { this.getConstructedType().hasQualifiedName("java.io", "FileOutputStream") } diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index 997a9335168..4ca08f5becc 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -56,7 +56,7 @@ private predicate exactPathMatchGuard(Guard g, Expr e, boolean branch) { t instanceof StringsKt or t instanceof FilesKt | - e = getVisualQualifier(ma).getUnderlyingExpr() and + e = [getVisualQualifier(ma).getUnderlyingExpr(), getVisualArgument(ma, 0)] and ma.getMethod().getDeclaringType() = t and ma = g and getSourceMethod(ma.getMethod()).hasName(["equals", "equalsIgnoreCase"]) and diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index a404690d408..3126b750aaf 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -8,12 +8,15 @@ import semmle.code.java.frameworks.android.Compose private import semmle.code.java.security.Sanitizers /** A variable that may hold sensitive information, judging by its name. */ -class CredentialExpr extends Expr { +class VariableWithSensitiveName extends Variable { + VariableWithSensitiveName() { this.getName().regexpMatch(getCommonSensitiveInfoRegex()) } +} + +/** A reference to a variable that may hold sensitive information, judging by its name. */ +class CredentialExpr extends VarAccess { CredentialExpr() { - exists(Variable v | this = v.getAnAccess() | - v.getName().regexpMatch(getCommonSensitiveInfoRegex()) and - not this instanceof CompileTimeConstantExpr - ) + this.getVariable() instanceof VariableWithSensitiveName and + not this instanceof CompileTimeConstantExpr } } diff --git a/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll b/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll index 85265f6b169..63bd4949699 100644 --- a/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll +++ b/java/ql/lib/semmle/code/java/security/TaintedPathQuery.qll @@ -8,6 +8,13 @@ private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.security.PathSanitizer private import semmle.code.java.security.Sanitizers +/** A sink for tainted path flow configurations. */ +abstract class TaintedPathSink extends DataFlow::Node { } + +private class DefaultTaintedPathSink extends TaintedPathSink { + DefaultTaintedPathSink() { sinkNode(this, "path-injection") } +} + /** * A unit class for adding additional taint steps. * @@ -55,7 +62,7 @@ private class TaintPreservingUriCtorParam extends Parameter { module TaintedPathConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } - predicate isSink(DataFlow::Node sink) { sinkNode(sink, "path-injection") } + predicate isSink(DataFlow::Node sink) { sink instanceof TaintedPathSink } predicate isBarrier(DataFlow::Node sanitizer) { sanitizer instanceof SimpleTypeSanitizer or @@ -76,7 +83,7 @@ module TaintedPathFlow = TaintTracking::Global; module TaintedPathLocalConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof LocalUserInput } - predicate isSink(DataFlow::Node sink) { sinkNode(sink, "path-injection") } + predicate isSink(DataFlow::Node sink) { sink instanceof TaintedPathSink } predicate isBarrier(DataFlow::Node sanitizer) { sanitizer instanceof SimpleTypeSanitizer or diff --git a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll index 5877358eaf0..e806905c167 100644 --- a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll +++ b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll @@ -6,10 +6,14 @@ private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.frameworks.Servlets import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.JaxWS +private import semmle.code.java.security.RequestForgery /** A URL redirection sink. */ abstract class UrlRedirectSink extends DataFlow::Node { } +/** A URL redirection sanitizer. */ +abstract class UrlRedirectSanitizer extends DataFlow::Node { } + /** A default sink represeting methods susceptible to URL redirection attacks. */ private class DefaultUrlRedirectSink extends UrlRedirectSink { DefaultUrlRedirectSink() { sinkNode(this, "url-redirection") } @@ -42,3 +46,6 @@ private class ApacheUrlRedirectSink extends UrlRedirectSink { ) } } + +private class DefaultUrlRedirectSanitizer extends UrlRedirectSanitizer instanceof RequestForgerySanitizer +{ } diff --git a/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll b/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll index cdae7839366..675937985c4 100644 --- a/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlRedirectQuery.qll @@ -11,6 +11,8 @@ module UrlRedirectConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { sink instanceof UrlRedirectSink } + + predicate isBarrier(DataFlow::Node node) { node instanceof UrlRedirectSanitizer } } /** diff --git a/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll b/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll index 10db2997bef..7ba99a31e26 100644 --- a/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ZipSlipQuery.qll @@ -41,28 +41,5 @@ module ZipSlipFlow = TaintTracking::Global; * A sink that represents a file creation, such as a file write, copy or move operation. */ private class FileCreationSink extends DataFlow::Node { - FileCreationSink() { - sinkNode(this, "path-injection") and - not isPathCreation(this) - } -} - -/** - * Holds if `sink` is a path creation node that doesn't imply a read/write filesystem operation. - * This is to avoid creating new spurious alerts, since `PathCreation` sinks weren't - * previously part of this query. - */ -private predicate isPathCreation(DataFlow::Node sink) { - exists(PathCreation pc | - pc.getAnInput() = sink.asExpr() - or - pc.getAnInput().(Argument).isVararg() and sink.(DataFlow::ImplicitVarargsArray).getCall() = pc - | - // exclude actual read/write operations included in `PathCreation` - not pc.(Call) - .getCallee() - .getDeclaringType() - .hasQualifiedName("java.io", - ["FileInputStream", "FileOutputStream", "FileReader", "FileWriter"]) - ) + FileCreationSink() { sinkNode(this, "path-injection") } } diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 466b98fea11..b0a780b7584 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,22 @@ +## 0.8.9 + +### New Queries + +* Added a new query `java/android/insecure-local-authentication` for finding uses of biometric authentication APIs that do not make use of a `KeyStore`-backed key and thus may be bypassed. + +### Query Metadata Changes + +* The `security-severity` score of the query `java/relative-path-command` has been reduced to better adjust it to the specific conditions needed for exploitation. + +### Major Analysis Improvements + +* The sinks of the queries `java/path-injection` and `java/path-injection-local` have been reworked. Path creation sinks have been converted to summaries instead, while sinks now are actual file read/write operations only. This has reduced the false positive ratio of both queries. + +### Minor Analysis Improvements + +* The sanitizer for the path injection queries has been improved to handle more cases where `equals` is used to check an exact path match. +* The query `java/unvalidated-url-redirection` now sanitizes results following the same logic as the query `java/ssrf`. URLs the destination of which cannot be externally controlled will not be reported anymore. + ## 0.8.8 ### New Queries diff --git a/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql b/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql index 96e8e66c7cd..3963442d648 100644 --- a/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql +++ b/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql @@ -18,21 +18,7 @@ import semmle.code.java.security.PathCreation import semmle.code.java.security.TaintedPathQuery import TaintedPathFlow::PathGraph -/** - * Gets the data-flow node at which to report a path ending at `sink`. - * - * Previously this query flagged alerts exclusively at `PathCreation` sites, - * so to avoid perturbing existing alerts, where a `PathCreation` exists we - * continue to report there; otherwise we report directly at `sink`. - */ -DataFlow::Node getReportingNode(DataFlow::Node sink) { - TaintedPathFlow::flowTo(sink) and - if exists(PathCreation pc | pc.getAnInput() = sink.asExpr()) - then result.asExpr() = any(PathCreation pc | pc.getAnInput() = sink.asExpr()) - else result = sink -} - from TaintedPathFlow::PathNode source, TaintedPathFlow::PathNode sink where TaintedPathFlow::flowPath(source, sink) -select getReportingNode(sink.getNode()), source, sink, "This path depends on a $@.", - source.getNode(), "user-provided value" +select sink.getNode(), source, sink, "This path depends on a $@.", source.getNode(), + "user-provided value" diff --git a/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql b/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql index 8e56121883f..60dc6b54be8 100644 --- a/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql +++ b/java/ql/src/Security/CWE/CWE-022/TaintedPathLocal.ql @@ -18,21 +18,7 @@ import semmle.code.java.security.PathCreation import semmle.code.java.security.TaintedPathQuery import TaintedPathLocalFlow::PathGraph -/** - * Gets the data-flow node at which to report a path ending at `sink`. - * - * Previously this query flagged alerts exclusively at `PathCreation` sites, - * so to avoid perturbing existing alerts, where a `PathCreation` exists we - * continue to report there; otherwise we report directly at `sink`. - */ -DataFlow::Node getReportingNode(DataFlow::Node sink) { - TaintedPathLocalFlow::flowTo(sink) and - if exists(PathCreation pc | pc.getAnInput() = sink.asExpr()) - then result.asExpr() = any(PathCreation pc | pc.getAnInput() = sink.asExpr()) - else result = sink -} - from TaintedPathLocalFlow::PathNode source, TaintedPathLocalFlow::PathNode sink where TaintedPathLocalFlow::flowPath(source, sink) -select getReportingNode(sink.getNode()), source, sink, "This path depends on a $@.", - source.getNode(), "user-provided value" +select sink.getNode(), source, sink, "This path depends on a $@.", source.getNode(), + "user-provided value" diff --git a/java/ql/src/Security/CWE/CWE-074/JndiInjection.qhelp b/java/ql/src/Security/CWE/CWE-074/JndiInjection.qhelp index b3d1da82fa5..6e3739fafdf 100644 --- a/java/ql/src/Security/CWE/CWE-074/JndiInjection.qhelp +++ b/java/ql/src/Security/CWE/CWE-074/JndiInjection.qhelp @@ -13,7 +13,7 @@ code execution.

    The general recommendation is to avoid passing untrusted data to the InitialContext.lookup method. If the name being used to look up the object must be provided by the user, make -sure that it's not in the form of an absolute URL or that it's the URL pointing to a trused server. +sure that it's not in the form of an absolute URL or that it's the URL pointing to a trusted server.

    diff --git a/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql b/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql index 501826c6426..533980a3f0a 100644 --- a/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql +++ b/java/ql/src/Security/CWE/CWE-078/ExecRelative.ql @@ -4,7 +4,7 @@ * malicious changes in the PATH environment variable. * @kind problem * @problem.severity warning - * @security-severity 9.8 + * @security-severity 5.4 * @precision medium * @id java/relative-path-command * @tags security diff --git a/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java b/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java index 64a389e3ea6..342f6f6be17 100644 --- a/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java +++ b/java/ql/src/Security/CWE/CWE-113/NettyRequestSplitting.java @@ -1,11 +1,11 @@ public class NettyRequestSplitting { - // BAD: Disables the internal response splitting verification + // BAD: Disables the internal request splitting verification private final DefaultHttpHeaders badHeaders = new DefaultHttpHeaders(false); // GOOD: Verifies headers passed don't contain CRLF characters private final DefaultHttpHeaders goodHeaders = new DefaultHttpHeaders(); - // BAD: Disables the internal response splitting verification + // BAD: Disables the internal request splitting verification private final DefaultHttpRequest badRequest = new DefaultHttpRequest(httpVersion, method, uri, false); // GOOD: Verifies headers passed don't contain CRLF characters diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql index 6efb7e9104c..6e0aa9e9cd9 100644 --- a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql +++ b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql @@ -25,7 +25,11 @@ import semmle.code.java.security.TempDirLocalInformationDisclosureQuery * resulting in a zero-length paths. */ module InsecureMethodPathGraph implements DataFlow::PathGraphSig { - predicate edges(MethodCallInsecureFileCreation n1, MethodCallInsecureFileCreation n2) { none() } + predicate edges( + MethodCallInsecureFileCreation n1, MethodCallInsecureFileCreation n2, string key, string value + ) { + none() + } predicate nodes(MethodCallInsecureFileCreation n, string key, string val) { key = "semmle.label" and val = n.toString() diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp new file mode 100644 index 00000000000..672e1a1a1ab --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.qhelp @@ -0,0 +1,42 @@ + + + + +

    +Biometric local authentication such as fingerprint recognition can be used to protect sensitive data or actions within an application. +However, if this authentication does not use a KeyStore-backed key, it can be bypassed by a privileged malicious application, or by an attacker with physical access using application hooking tools such as Frida. +

    +
    + + +

    +Generate a secure key in the Android KeyStore. Ensure that the onAuthenticationSuccess callback for a biometric prompt uses it +in a way that is required for the sensitive parts of the application to function, such as by using it to decrypt sensitive data or credentials. +

    +
    + + +

    In the following (bad) case, no CryptoObject is required for the biometric prompt to grant access, so it can be bypassed.

    + +

    In the following (good) case, a secret key is generated in the Android KeyStore. The application requires this secret key for access, using it to decrypt data.

    + +
    + + +
  • +OWASP Mobile Application Security: Android Local Authentication +
  • +
  • +OWASP Mobile Application Security: Testing Biometric Authentication +
  • +
  • +WithSecure: How Secure is your Android Keystore Authentication? +
  • +
  • +Android Developers: Biometric Authentication +
  • + +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql new file mode 100644 index 00000000000..92256a2b779 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthentication.ql @@ -0,0 +1,18 @@ +/** + * @name Insecure local authentication + * @description Local authentication that does not make use of a `CryptoObject` can be bypassed. + * @kind problem + * @problem.severity warning + * @security-severity 4.4 + * @precision high + * @id java/android/insecure-local-authentication + * @tags security + * external/cwe/cwe-287 + */ + +import java +import semmle.code.java.security.AndroidLocalAuthQuery + +from AuthenticationSuccessCallback c +where not exists(c.getAResultUse()) +select c, "This authentication callback does not use its result for a cryptographic operation." diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationBad.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationBad.java new file mode 100644 index 00000000000..464153ccbee --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationBad.java @@ -0,0 +1,11 @@ +biometricPrompt.authenticate( + cancellationSignal, + executor, + new BiometricPrompt.AuthenticationCallback { + @Override + // BAD: This authentication callback does not make use of a `CryptoObject` from the `result`. + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + grantAccess() + } + } +) \ No newline at end of file diff --git a/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java new file mode 100644 index 00000000000..2ffcbbb6e26 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-287/AndroidInsecureLocalAuthenticationGood.java @@ -0,0 +1,48 @@ +private void generateSecretKey() { + KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder( + "MySecretKey", + KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) + .setUserAuthenticationRequired(true) + .setInvalidatedByBiometricEnrollment(true) + .build(); + KeyGenerator keyGenerator = KeyGenerator.getInstance( + KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); + keyGenerator.init(keyGenParameterSpec); + keyGenerator.generateKey(); +} + + +private SecretKey getSecretKey() { + KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); + keyStore.load(null); + return ((SecretKey)keyStore.getKey("MySecretKey", null)); +} + +private Cipher getCipher() { + return Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + + KeyProperties.BLOCK_MODE_CBC + "/" + + KeyProperties.ENCRYPTION_PADDING_PKCS7); +} + +public prompt(byte[] encryptedData) { + Cipher cipher = getCipher(); + SecretKey secretKey = getSecretKey(); + cipher.init(Cipher.DECRYPT_MODE, secretKey); + + biometricPrompt.authenticate( + new BiometricPrompt.CryptoObject(cipher), + cancellationSignal, + executor, + new BiometricPrompt.AuthenticationCallback() { + @Override + // GOOD: This authentication callback uses the result to decrypt some data. + public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) { + Cipher cipher = result.getCryptoObject().getCipher(); + byte[] decryptedData = cipher.doFinal(encryptedData); + grantAccessWithData(decryptedData); + } + } + ); +} \ No newline at end of file diff --git a/java/ql/src/change-notes/released/0.8.9.md b/java/ql/src/change-notes/released/0.8.9.md new file mode 100644 index 00000000000..d50b8f5e1c5 --- /dev/null +++ b/java/ql/src/change-notes/released/0.8.9.md @@ -0,0 +1,18 @@ +## 0.8.9 + +### New Queries + +* Added a new query `java/android/insecure-local-authentication` for finding uses of biometric authentication APIs that do not make use of a `KeyStore`-backed key and thus may be bypassed. + +### Query Metadata Changes + +* The `security-severity` score of the query `java/relative-path-command` has been reduced to better adjust it to the specific conditions needed for exploitation. + +### Major Analysis Improvements + +* The sinks of the queries `java/path-injection` and `java/path-injection-local` have been reworked. Path creation sinks have been converted to summaries instead, while sinks now are actual file read/write operations only. This has reduced the false positive ratio of both queries. + +### Minor Analysis Improvements + +* The sanitizer for the path injection queries has been improved to handle more cases where `equals` is used to check an exact path match. +* The query `java/unvalidated-url-redirection` now sanitizes results following the same logic as the query `java/ssrf`. URLs the destination of which cannot be externally controlled will not be reported anymore. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index da0a61b4048..5290c29b7fe 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.8.8 +lastReleaseVersion: 0.8.9 diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql index d0b59bf1136..6fab554ac67 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql @@ -16,6 +16,7 @@ import java import semmle.code.java.dataflow.TaintTracking import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.TaintedPathQuery import JFinalController import semmle.code.java.security.PathSanitizer private import semmle.code.java.security.Sanitizers @@ -52,7 +53,7 @@ module InjectFilePathConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ThreatModelFlowSource } predicate isSink(DataFlow::Node sink) { - sinkNode(sink, "path-injection") and + sink instanceof TaintedPathSink and not sink instanceof NormalizedPathNode } diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 73e8a062ffe..c9f04ca70d1 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.8.8 +version: 0.8.9 groups: - java - queries diff --git a/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected b/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected index 986bdeed21f..3dd2feaf353 100644 --- a/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected +++ b/java/ql/test-kotlin2/library-tests/arrays/arrayAccesses.expected @@ -16,7 +16,7 @@ | arrayGetsSets.kt:19:11:19:15 | ...[...] | arrayGetsSets.kt:19:3:19:7 | ...=... | char | arrayGetsSets.kt:19:11:19:12 | a8 | arrayGetsSets.kt:19:14:19:14 | 0 | | arrayGetsSets.kt:20:3:20:7 | ...[...] | arrayGetsSets.kt:20:3:20:7 | ...=... | Object[] | arrayGetsSets.kt:20:3:20:4 | a9 | arrayGetsSets.kt:20:6:20:6 | 0 | | arrayGetsSets.kt:20:11:20:15 | ...[...] | arrayGetsSets.kt:20:3:20:7 | ...=... | Object | arrayGetsSets.kt:20:11:20:12 | a9 | arrayGetsSets.kt:20:14:20:14 | 0 | -| arrayGetsSets.kt:32:3:32:7 | ...[...] | arrayGetsSets.kt:32:3:32:7 | ...+=... | int | arrayGetsSets.kt:32:3:32:4 | a1 | arrayGetsSets.kt:32:6:32:6 | 0 | -| arrayGetsSets.kt:38:3:38:7 | ...[...] | arrayGetsSets.kt:38:3:38:7 | .../=... | long | arrayGetsSets.kt:38:3:38:4 | a4 | arrayGetsSets.kt:38:6:38:6 | 0 | -| arrayGetsSets.kt:39:3:39:7 | ...[...] | arrayGetsSets.kt:39:3:39:7 | ...-=... | float | arrayGetsSets.kt:39:3:39:4 | a5 | arrayGetsSets.kt:39:6:39:6 | 0 | -| arrayGetsSets.kt:40:3:40:7 | ...[...] | arrayGetsSets.kt:40:3:40:7 | ...*=... | double | arrayGetsSets.kt:40:3:40:4 | a6 | arrayGetsSets.kt:40:6:40:6 | 0 | +| arrayGetsSets.kt:32:3:32:12 | ...[...] | arrayGetsSets.kt:32:3:32:12 | ...+=... | int | arrayGetsSets.kt:32:3:32:4 | a1 | arrayGetsSets.kt:32:6:32:6 | 0 | +| arrayGetsSets.kt:38:3:38:13 | ...[...] | arrayGetsSets.kt:38:3:38:13 | .../=... | long | arrayGetsSets.kt:38:3:38:4 | a4 | arrayGetsSets.kt:38:6:38:6 | 0 | +| arrayGetsSets.kt:39:3:39:13 | ...[...] | arrayGetsSets.kt:39:3:39:13 | ...-=... | float | arrayGetsSets.kt:39:3:39:4 | a5 | arrayGetsSets.kt:39:6:39:6 | 0 | +| arrayGetsSets.kt:40:3:40:14 | ...[...] | arrayGetsSets.kt:40:3:40:14 | ...*=... | double | arrayGetsSets.kt:40:3:40:4 | a6 | arrayGetsSets.kt:40:6:40:6 | 0 | diff --git a/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected b/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected index da09855b1e0..5f8fda311e2 100644 --- a/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected +++ b/java/ql/test-kotlin2/library-tests/arrays/assignExprs.expected @@ -1,4 +1,4 @@ -| arrayGetsSets.kt:32:3:32:7 | ...+=... | += | int[] | arrayGetsSets.kt:32:3:32:7 | ...[...] | int | arrayGetsSets.kt:32:12:32:12 | 1 | int | -| arrayGetsSets.kt:38:3:38:7 | .../=... | /= | long[] | arrayGetsSets.kt:38:3:38:7 | ...[...] | long | arrayGetsSets.kt:38:12:38:13 | 1 | long | -| arrayGetsSets.kt:39:3:39:7 | ...-=... | -= | float[] | arrayGetsSets.kt:39:3:39:7 | ...[...] | float | arrayGetsSets.kt:39:12:39:13 | 1.0 | float | -| arrayGetsSets.kt:40:3:40:7 | ...*=... | *= | double[] | arrayGetsSets.kt:40:3:40:7 | ...[...] | double | arrayGetsSets.kt:40:12:40:14 | 1.0 | double | +| arrayGetsSets.kt:32:3:32:12 | ...+=... | += | int[] | arrayGetsSets.kt:32:3:32:12 | ...[...] | int | arrayGetsSets.kt:32:12:32:12 | 1 | int | +| arrayGetsSets.kt:38:3:38:13 | .../=... | /= | long[] | arrayGetsSets.kt:38:3:38:13 | ...[...] | long | arrayGetsSets.kt:38:12:38:13 | 1 | long | +| arrayGetsSets.kt:39:3:39:13 | ...-=... | -= | float[] | arrayGetsSets.kt:39:3:39:13 | ...[...] | float | arrayGetsSets.kt:39:12:39:13 | 1.0 | float | +| arrayGetsSets.kt:40:3:40:14 | ...*=... | *= | double[] | arrayGetsSets.kt:40:3:40:14 | ...[...] | double | arrayGetsSets.kt:40:12:40:14 | 1.0 | double | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected index 04031bdd910..69581c248ad 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected @@ -18,7 +18,7 @@ | Test.kt:4:13:79:2 | { ... } | 12 | Test.kt:8:3:8:16 | w | | Test.kt:4:13:79:2 | { ... } | 13 | Test.kt:11:3:16:3 | ; | | Test.kt:4:13:79:2 | { ... } | 14 | Test.kt:11:3:16:3 | when ... | -| Test.kt:4:13:79:2 | { ... } | 15 | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:4:13:79:2 | { ... } | 15 | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | 16 | Test.kt:11:7:11:7 | x | | Test.kt:4:13:79:2 | { ... } | 17 | Test.kt:11:11:11:11 | 0 | | Test.kt:4:13:79:2 | { ... } | 18 | Test.kt:11:7:11:11 | ... > ... | @@ -40,23 +40,22 @@ | Test.kt:18:3:18:7 | ; | 2 | Test.kt:18:3:18:7 | ...=... | | Test.kt:18:3:18:7 | ; | 3 | Test.kt:21:3:24:9 | ; | | Test.kt:18:3:18:7 | ; | 4 | Test.kt:21:3:24:9 | when ... | -| Test.kt:18:3:18:7 | ; | 5 | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:18:3:18:7 | ; | 5 | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:18:3:18:7 | ; | 6 | Test.kt:21:6:21:6 | x | | Test.kt:18:3:18:7 | ; | 7 | Test.kt:21:10:21:10 | 0 | | Test.kt:18:3:18:7 | ; | 8 | Test.kt:21:6:21:10 | ... < ... | -| Test.kt:22:4:22:9 | { ... } | 0 | Test.kt:22:4:22:9 | { ... } | -| Test.kt:22:4:22:9 | { ... } | 1 | Test.kt:22:4:22:9 | ; | -| Test.kt:22:4:22:9 | { ... } | 2 | Test.kt:22:8:22:9 | 40 | -| Test.kt:22:4:22:9 | { ... } | 3 | Test.kt:22:4:22:9 | ...=... | -| Test.kt:22:4:22:9 | { ... } | 4 | Test.kt:27:3:27:8 | ; | -| Test.kt:22:4:22:9 | { ... } | 5 | Test.kt:27:7:27:8 | 10 | -| Test.kt:22:4:22:9 | { ... } | 6 | Test.kt:27:3:27:8 | ...=... | -| Test.kt:22:4:22:9 | { ... } | 7 | Test.kt:30:3:33:3 | ; | -| Test.kt:22:4:22:9 | { ... } | 8 | Test.kt:30:3:33:3 | when ... | -| Test.kt:22:4:22:9 | { ... } | 9 | Test.kt:30:7:30:12 | ... -> ... | -| Test.kt:22:4:22:9 | { ... } | 10 | Test.kt:30:7:30:7 | x | -| Test.kt:22:4:22:9 | { ... } | 11 | Test.kt:30:12:30:12 | 0 | -| Test.kt:22:4:22:9 | { ... } | 12 | Test.kt:30:7:30:12 | ... (value equals) ... | +| Test.kt:22:4:22:9 | ; | 0 | Test.kt:22:4:22:9 | ; | +| Test.kt:22:4:22:9 | ; | 1 | Test.kt:22:8:22:9 | 40 | +| Test.kt:22:4:22:9 | ; | 2 | Test.kt:22:4:22:9 | ...=... | +| Test.kt:22:4:22:9 | ; | 3 | Test.kt:27:3:27:8 | ; | +| Test.kt:22:4:22:9 | ; | 4 | Test.kt:27:7:27:8 | 10 | +| Test.kt:22:4:22:9 | ; | 5 | Test.kt:27:3:27:8 | ...=... | +| Test.kt:22:4:22:9 | ; | 6 | Test.kt:30:3:33:3 | ; | +| Test.kt:22:4:22:9 | ; | 7 | Test.kt:30:3:33:3 | when ... | +| Test.kt:22:4:22:9 | ; | 8 | Test.kt:30:7:33:3 | ... -> ... | +| Test.kt:22:4:22:9 | ; | 9 | Test.kt:30:7:30:7 | x | +| Test.kt:22:4:22:9 | ; | 10 | Test.kt:30:12:30:12 | 0 | +| Test.kt:22:4:22:9 | ; | 11 | Test.kt:30:7:30:12 | ... (value equals) ... | | Test.kt:24:4:24:9 | ... -> ... | 0 | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:24:4:24:9 | ... -> ... | 1 | Test.kt:24:4:24:9 | true | | Test.kt:24:4:24:9 | ... -> ... | 2 | Test.kt:24:10:24:10 | INSTANCE | @@ -137,7 +136,7 @@ | Test.kt:100:25:110:1 | { ... } | 0 | Test.kt:100:25:110:1 | { ... } | | Test.kt:100:25:110:1 | { ... } | 1 | Test.kt:101:5:103:5 | ; | | Test.kt:100:25:110:1 | { ... } | 2 | Test.kt:101:5:103:5 | when ... | -| Test.kt:100:25:110:1 | { ... } | 3 | Test.kt:101:9:101:30 | ... -> ... | +| Test.kt:100:25:110:1 | { ... } | 3 | Test.kt:101:9:103:5 | ... -> ... | | Test.kt:100:25:110:1 | { ... } | 4 | Test.kt:101:9:101:30 | ... && ... | | Test.kt:100:25:110:1 | { ... } | 5 | Test.kt:101:9:101:9 | x | | Test.kt:100:25:110:1 | { ... } | 6 | Test.kt:101:14:101:17 | null | @@ -150,7 +149,7 @@ | Test.kt:101:33:103:5 | { ... } | 2 | Test.kt:102:9:102:25 | throw ... | | Test.kt:105:5:109:5 | ; | 0 | Test.kt:105:5:109:5 | ; | | Test.kt:105:5:109:5 | ; | 1 | Test.kt:105:5:109:5 | when ... | -| Test.kt:105:5:109:5 | ; | 2 | Test.kt:105:9:105:17 | ... -> ... | +| Test.kt:105:5:109:5 | ; | 2 | Test.kt:105:9:107:5 | ... -> ... | | Test.kt:105:5:109:5 | ; | 3 | Test.kt:105:9:105:9 | x | | Test.kt:105:5:109:5 | ; | 4 | Test.kt:105:14:105:17 | null | | Test.kt:105:5:109:5 | ; | 5 | Test.kt:105:9:105:17 | ... (value not-equals) ... | @@ -158,10 +157,10 @@ | Test.kt:105:20:107:5 | { ... } | 1 | Test.kt:106:9:106:29 | ; | | Test.kt:105:20:107:5 | { ... } | 2 | Test.kt:106:17:106:28 | "x not null" | | Test.kt:105:20:107:5 | { ... } | 3 | Test.kt:106:9:106:29 | println(...) | -| Test.kt:107:16:107:24 | ... -> ... | 0 | Test.kt:107:16:107:24 | ... -> ... | -| Test.kt:107:16:107:24 | ... -> ... | 1 | Test.kt:107:16:107:16 | y | -| Test.kt:107:16:107:24 | ... -> ... | 2 | Test.kt:107:21:107:24 | null | -| Test.kt:107:16:107:24 | ... -> ... | 3 | Test.kt:107:16:107:24 | ... (value not-equals) ... | +| Test.kt:107:16:109:5 | ... -> ... | 0 | Test.kt:107:16:109:5 | ... -> ... | +| Test.kt:107:16:109:5 | ... -> ... | 1 | Test.kt:107:16:107:16 | y | +| Test.kt:107:16:109:5 | ... -> ... | 2 | Test.kt:107:21:107:24 | null | +| Test.kt:107:16:109:5 | ... -> ... | 3 | Test.kt:107:16:107:24 | ... (value not-equals) ... | | Test.kt:107:27:109:5 | { ... } | 0 | Test.kt:107:27:109:5 | { ... } | | Test.kt:107:27:109:5 | { ... } | 1 | Test.kt:108:9:108:29 | ; | | Test.kt:107:27:109:5 | { ... } | 2 | Test.kt:108:17:108:28 | "y not null" | @@ -170,7 +169,7 @@ | Test.kt:112:32:116:1 | { ... } | 0 | Test.kt:112:32:116:1 | { ... } | | Test.kt:112:32:116:1 | { ... } | 1 | Test.kt:113:5:115:5 | ; | | Test.kt:112:32:116:1 | { ... } | 2 | Test.kt:113:5:115:5 | when ... | -| Test.kt:112:32:116:1 | { ... } | 3 | Test.kt:113:9:113:14 | ... -> ... | +| Test.kt:112:32:116:1 | { ... } | 3 | Test.kt:113:9:115:5 | ... -> ... | | Test.kt:112:32:116:1 | { ... } | 4 | Test.kt:113:9:113:14 | ... && ... | | Test.kt:112:32:116:1 | { ... } | 5 | Test.kt:113:9:113:9 | x | | Test.kt:113:14:113:14 | y | 0 | Test.kt:113:14:113:14 | y | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected index c7506b8b0a0..544f50e60fa 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected @@ -2,7 +2,7 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:18:3:18:7 | ; | -| Test.kt:4:13:79:2 | { ... } | Test.kt:22:4:22:9 | { ... } | +| Test.kt:4:13:79:2 | { ... } | Test.kt:22:4:22:9 | ; | | Test.kt:4:13:79:2 | { ... } | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:30:15:33:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:35:3:35:8 | ; | @@ -10,18 +10,18 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:8 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:4:2:79:2 | test | -| Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | { ... } | +| Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:18:3:18:7 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:18:3:18:7 | ; | Test.kt:35:3:35:8 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:38:9:38:9 | x | | Test.kt:18:3:18:7 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:18:3:18:7 | ; | Test.kt:43:3:43:8 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:30:15:33:3 | { ... } | -| Test.kt:22:4:22:9 | { ... } | Test.kt:35:3:35:8 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:38:9:38:9 | x | -| Test.kt:22:4:22:9 | { ... } | Test.kt:38:16:41:3 | { ... } | -| Test.kt:22:4:22:9 | { ... } | Test.kt:43:3:43:8 | ; | +| Test.kt:22:4:22:9 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:22:4:22:9 | ; | Test.kt:35:3:35:8 | ; | +| Test.kt:22:4:22:9 | ; | Test.kt:38:9:38:9 | x | +| Test.kt:22:4:22:9 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:22:4:22:9 | ; | Test.kt:43:3:43:8 | ; | | Test.kt:35:3:35:8 | ; | Test.kt:38:9:38:9 | x | | Test.kt:35:3:35:8 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:35:3:35:8 | ; | Test.kt:43:3:43:8 | ; | @@ -38,13 +38,13 @@ | Test.kt:100:25:110:1 | { ... } | Test.kt:101:33:103:5 | { ... } | | Test.kt:100:25:110:1 | { ... } | Test.kt:105:5:109:5 | ; | | Test.kt:100:25:110:1 | { ... } | Test.kt:105:20:107:5 | { ... } | -| Test.kt:100:25:110:1 | { ... } | Test.kt:107:16:107:24 | ... -> ... | +| Test.kt:100:25:110:1 | { ... } | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:100:25:110:1 | { ... } | Test.kt:107:27:109:5 | { ... } | | Test.kt:101:22:101:22 | y | Test.kt:101:33:103:5 | { ... } | | Test.kt:105:5:109:5 | ; | Test.kt:105:20:107:5 | { ... } | -| Test.kt:105:5:109:5 | ; | Test.kt:107:16:107:24 | ... -> ... | +| Test.kt:105:5:109:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:105:5:109:5 | ; | Test.kt:107:27:109:5 | { ... } | -| Test.kt:107:16:107:24 | ... -> ... | Test.kt:107:27:109:5 | { ... } | +| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | | Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | fn | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:17:115:5 | { ... } | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected index 7f4ddbab89c..0e115a651f5 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected @@ -2,10 +2,10 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... | | Test.kt:11:14:14:3 | { ... } | Test.kt:18:3:18:7 | ; | | Test.kt:14:10:16:3 | ... -> ... | Test.kt:18:3:18:7 | ; | -| Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | { ... } | +| Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:24:4:24:9 | ... -> ... | -| Test.kt:22:4:22:9 | { ... } | Test.kt:30:15:33:3 | { ... } | -| Test.kt:22:4:22:9 | { ... } | Test.kt:35:3:35:8 | ; | +| Test.kt:22:4:22:9 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:22:4:22:9 | ; | Test.kt:35:3:35:8 | ; | | Test.kt:24:4:24:9 | ... -> ... | Test.kt:4:2:79:2 | test | | Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:8 | ; | | Test.kt:35:3:35:8 | ; | Test.kt:38:9:38:9 | x | @@ -27,10 +27,10 @@ | Test.kt:101:22:101:22 | y | Test.kt:105:5:109:5 | ; | | Test.kt:101:33:103:5 | { ... } | Test.kt:100:1:110:1 | fn | | Test.kt:105:5:109:5 | ; | Test.kt:105:20:107:5 | { ... } | -| Test.kt:105:5:109:5 | ; | Test.kt:107:16:107:24 | ... -> ... | +| Test.kt:105:5:109:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:105:20:107:5 | { ... } | Test.kt:100:1:110:1 | fn | -| Test.kt:107:16:107:24 | ... -> ... | Test.kt:100:1:110:1 | fn | -| Test.kt:107:16:107:24 | ... -> ... | Test.kt:107:27:109:5 | { ... } | +| Test.kt:107:16:109:5 | ... -> ... | Test.kt:100:1:110:1 | fn | +| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | | Test.kt:107:27:109:5 | { ... } | Test.kt:100:1:110:1 | fn | | Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | fn | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected index bda0ae70577..1f1db340aeb 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected @@ -25,11 +25,11 @@ | Test.kt:8:3:8:16 | w | LocalVariableDeclExpr | Test.kt:11:3:16:3 | ; | ExprStmt | | Test.kt:8:16:8:16 | 0 | IntegerLiteral | Test.kt:8:3:8:16 | w | LocalVariableDeclExpr | | Test.kt:11:3:16:3 | ; | ExprStmt | Test.kt:11:3:16:3 | when ... | WhenExpr | -| Test.kt:11:3:16:3 | when ... | WhenExpr | Test.kt:11:7:11:11 | ... -> ... | WhenBranch | +| Test.kt:11:3:16:3 | when ... | WhenExpr | Test.kt:11:7:14:3 | ... -> ... | WhenBranch | | Test.kt:11:7:11:7 | x | VarAccess | Test.kt:11:11:11:11 | 0 | IntegerLiteral | -| Test.kt:11:7:11:11 | ... -> ... | WhenBranch | Test.kt:11:7:11:7 | x | VarAccess | | Test.kt:11:7:11:11 | ... > ... | GTExpr | Test.kt:11:14:14:3 | { ... } | BlockStmt | | Test.kt:11:7:11:11 | ... > ... | GTExpr | Test.kt:14:10:16:3 | ... -> ... | WhenBranch | +| Test.kt:11:7:14:3 | ... -> ... | WhenBranch | Test.kt:11:7:11:7 | x | VarAccess | | Test.kt:11:11:11:11 | 0 | IntegerLiteral | Test.kt:11:7:11:11 | ... > ... | GTExpr | | Test.kt:11:14:14:3 | { ... } | BlockStmt | Test.kt:12:4:12:9 | ; | ExprStmt | | Test.kt:12:4:12:9 | ...=... | AssignExpr | Test.kt:13:4:13:9 | ; | ExprStmt | @@ -52,16 +52,15 @@ | Test.kt:18:3:18:7 | z | VarAccess | file://:0:0:0:0 | | | | Test.kt:18:7:18:7 | 0 | IntegerLiteral | Test.kt:18:3:18:7 | ...=... | AssignExpr | | Test.kt:21:3:24:9 | ; | ExprStmt | Test.kt:21:3:24:9 | when ... | WhenExpr | -| Test.kt:21:3:24:9 | when ... | WhenExpr | Test.kt:21:6:21:10 | ... -> ... | WhenBranch | +| Test.kt:21:3:24:9 | when ... | WhenExpr | Test.kt:21:6:22:9 | ... -> ... | WhenBranch | | Test.kt:21:6:21:6 | x | VarAccess | Test.kt:21:10:21:10 | 0 | IntegerLiteral | -| Test.kt:21:6:21:10 | ... -> ... | WhenBranch | Test.kt:21:6:21:6 | x | VarAccess | -| Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:22:4:22:9 | { ... } | BlockStmt | +| Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:22:4:22:9 | ; | ExprStmt | | Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:24:4:24:9 | ... -> ... | WhenBranch | +| Test.kt:21:6:22:9 | ... -> ... | WhenBranch | Test.kt:21:6:21:6 | x | VarAccess | | Test.kt:21:10:21:10 | 0 | IntegerLiteral | Test.kt:21:6:21:10 | ... < ... | LTExpr | | Test.kt:22:4:22:9 | ...=... | AssignExpr | Test.kt:27:3:27:8 | ; | ExprStmt | | Test.kt:22:4:22:9 | ; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral | | Test.kt:22:4:22:9 | y | VarAccess | file://:0:0:0:0 | | | -| Test.kt:22:4:22:9 | { ... } | BlockStmt | Test.kt:22:4:22:9 | ; | ExprStmt | | Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:9 | ...=... | AssignExpr | | Test.kt:24:4:24:9 | ... -> ... | WhenBranch | Test.kt:24:4:24:9 | true | BooleanLiteral | | Test.kt:24:4:24:9 | return ... | ReturnStmt | Test.kt:4:2:79:2 | test | Method | @@ -72,11 +71,11 @@ | Test.kt:27:3:27:8 | z | VarAccess | file://:0:0:0:0 | | | | Test.kt:27:7:27:8 | 10 | IntegerLiteral | Test.kt:27:3:27:8 | ...=... | AssignExpr | | Test.kt:30:3:33:3 | ; | ExprStmt | Test.kt:30:3:33:3 | when ... | WhenExpr | -| Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:30:7:30:12 | ... -> ... | WhenBranch | +| Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:30:7:33:3 | ... -> ... | WhenBranch | | Test.kt:30:7:30:7 | x | VarAccess | Test.kt:30:12:30:12 | 0 | IntegerLiteral | | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr | Test.kt:30:15:33:3 | { ... } | BlockStmt | | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr | Test.kt:35:3:35:8 | ; | ExprStmt | -| Test.kt:30:7:30:12 | ... -> ... | WhenBranch | Test.kt:30:7:30:7 | x | VarAccess | +| Test.kt:30:7:33:3 | ... -> ... | WhenBranch | Test.kt:30:7:30:7 | x | VarAccess | | Test.kt:30:12:30:12 | 0 | IntegerLiteral | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr | | Test.kt:30:15:33:3 | { ... } | BlockStmt | Test.kt:31:4:31:9 | ; | ExprStmt | | Test.kt:31:4:31:9 | ...=... | AssignExpr | Test.kt:32:4:32:9 | ; | ExprStmt | @@ -184,12 +183,12 @@ | Test.kt:100:16:100:22 | y | Parameter | file://:0:0:0:0 | | | | Test.kt:100:25:110:1 | { ... } | BlockStmt | Test.kt:101:5:103:5 | ; | ExprStmt | | Test.kt:101:5:103:5 | ; | ExprStmt | Test.kt:101:5:103:5 | when ... | WhenExpr | -| Test.kt:101:5:103:5 | when ... | WhenExpr | Test.kt:101:9:101:30 | ... -> ... | WhenBranch | +| Test.kt:101:5:103:5 | when ... | WhenExpr | Test.kt:101:9:103:5 | ... -> ... | WhenBranch | | Test.kt:101:9:101:9 | x | VarAccess | Test.kt:101:14:101:17 | null | NullLiteral | | Test.kt:101:9:101:17 | ... (value equals) ... | ValueEQExpr | Test.kt:101:22:101:22 | y | VarAccess | | Test.kt:101:9:101:17 | ... (value equals) ... | ValueEQExpr | Test.kt:105:5:109:5 | ; | ExprStmt | | Test.kt:101:9:101:30 | ... && ... | AndLogicalExpr | Test.kt:101:9:101:9 | x | VarAccess | -| Test.kt:101:9:101:30 | ... -> ... | WhenBranch | Test.kt:101:9:101:30 | ... && ... | AndLogicalExpr | +| Test.kt:101:9:103:5 | ... -> ... | WhenBranch | Test.kt:101:9:101:30 | ... && ... | AndLogicalExpr | | Test.kt:101:14:101:17 | null | NullLiteral | Test.kt:101:9:101:17 | ... (value equals) ... | ValueEQExpr | | Test.kt:101:22:101:22 | y | VarAccess | Test.kt:101:27:101:30 | null | NullLiteral | | Test.kt:101:22:101:30 | ... (value equals) ... | ValueEQExpr | Test.kt:101:33:103:5 | { ... } | BlockStmt | @@ -200,11 +199,11 @@ | Test.kt:102:15:102:25 | Exception | TypeAccess | file://:0:0:0:0 | | | | Test.kt:102:15:102:25 | new Exception(...) | ClassInstanceExpr | Test.kt:102:9:102:25 | throw ... | ThrowStmt | | Test.kt:105:5:109:5 | ; | ExprStmt | Test.kt:105:5:109:5 | when ... | WhenExpr | -| Test.kt:105:5:109:5 | when ... | WhenExpr | Test.kt:105:9:105:17 | ... -> ... | WhenBranch | +| Test.kt:105:5:109:5 | when ... | WhenExpr | Test.kt:105:9:107:5 | ... -> ... | WhenBranch | | Test.kt:105:9:105:9 | x | VarAccess | Test.kt:105:14:105:17 | null | NullLiteral | | Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr | Test.kt:105:20:107:5 | { ... } | BlockStmt | -| Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr | Test.kt:107:16:107:24 | ... -> ... | WhenBranch | -| Test.kt:105:9:105:17 | ... -> ... | WhenBranch | Test.kt:105:9:105:9 | x | VarAccess | +| Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr | Test.kt:107:16:109:5 | ... -> ... | WhenBranch | +| Test.kt:105:9:107:5 | ... -> ... | WhenBranch | Test.kt:105:9:105:9 | x | VarAccess | | Test.kt:105:14:105:17 | null | NullLiteral | Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr | | Test.kt:105:20:107:5 | { ... } | BlockStmt | Test.kt:106:9:106:29 | ; | ExprStmt | | Test.kt:106:9:106:29 | ; | ExprStmt | Test.kt:106:17:106:28 | "x not null" | StringLiteral | @@ -214,7 +213,7 @@ | Test.kt:107:16:107:16 | y | VarAccess | Test.kt:107:21:107:24 | null | NullLiteral | | Test.kt:107:16:107:24 | ... (value not-equals) ... | ValueNEExpr | Test.kt:100:1:110:1 | fn | Method | | Test.kt:107:16:107:24 | ... (value not-equals) ... | ValueNEExpr | Test.kt:107:27:109:5 | { ... } | BlockStmt | -| Test.kt:107:16:107:24 | ... -> ... | WhenBranch | Test.kt:107:16:107:16 | y | VarAccess | +| Test.kt:107:16:109:5 | ... -> ... | WhenBranch | Test.kt:107:16:107:16 | y | VarAccess | | Test.kt:107:21:107:24 | null | NullLiteral | Test.kt:107:16:107:24 | ... (value not-equals) ... | ValueNEExpr | | Test.kt:107:27:109:5 | { ... } | BlockStmt | Test.kt:108:9:108:29 | ; | ExprStmt | | Test.kt:108:9:108:29 | ; | ExprStmt | Test.kt:108:17:108:28 | "y not null" | StringLiteral | @@ -229,11 +228,11 @@ | Test.kt:112:20:112:29 | y | Parameter | file://:0:0:0:0 | | | | Test.kt:112:32:116:1 | { ... } | BlockStmt | Test.kt:113:5:115:5 | ; | ExprStmt | | Test.kt:113:5:115:5 | ; | ExprStmt | Test.kt:113:5:115:5 | when ... | WhenExpr | -| Test.kt:113:5:115:5 | when ... | WhenExpr | Test.kt:113:9:113:14 | ... -> ... | WhenBranch | +| Test.kt:113:5:115:5 | when ... | WhenExpr | Test.kt:113:9:115:5 | ... -> ... | WhenBranch | | Test.kt:113:9:113:9 | x | VarAccess | Test.kt:112:1:116:1 | fn | Method | | Test.kt:113:9:113:9 | x | VarAccess | Test.kt:113:14:113:14 | y | VarAccess | | Test.kt:113:9:113:14 | ... && ... | AndLogicalExpr | Test.kt:113:9:113:9 | x | VarAccess | -| Test.kt:113:9:113:14 | ... -> ... | WhenBranch | Test.kt:113:9:113:14 | ... && ... | AndLogicalExpr | +| Test.kt:113:9:115:5 | ... -> ... | WhenBranch | Test.kt:113:9:113:14 | ... && ... | AndLogicalExpr | | Test.kt:113:14:113:14 | y | VarAccess | Test.kt:112:1:116:1 | fn | Method | | Test.kt:113:14:113:14 | y | VarAccess | Test.kt:113:17:115:5 | { ... } | BlockStmt | | Test.kt:113:17:115:5 | { ... } | BlockStmt | Test.kt:112:1:116:1 | fn | Method | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected index 39832117f79..4fb56510ed5 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected @@ -6,7 +6,7 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:7:3:7:16 | var ...; | | Test.kt:4:13:79:2 | { ... } | Test.kt:8:3:8:16 | var ...; | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:3:16:3 | ; | -| Test.kt:4:13:79:2 | { ... } | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:4:13:79:2 | { ... } | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:12:4:12:9 | ; | | Test.kt:4:13:79:2 | { ... } | Test.kt:13:4:13:9 | ; | @@ -15,14 +15,13 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:15:4:15:9 | ; | | Test.kt:4:13:79:2 | { ... } | Test.kt:18:3:18:7 | ; | | Test.kt:4:13:79:2 | { ... } | Test.kt:21:3:24:9 | ; | -| Test.kt:4:13:79:2 | { ... } | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:4:13:79:2 | { ... } | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:22:4:22:9 | ; | -| Test.kt:4:13:79:2 | { ... } | Test.kt:22:4:22:9 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:24:4:24:9 | return ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:27:3:27:8 | ; | | Test.kt:4:13:79:2 | { ... } | Test.kt:30:3:33:3 | ; | -| Test.kt:4:13:79:2 | { ... } | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:4:13:79:2 | { ... } | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:30:15:33:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:31:4:31:9 | ; | | Test.kt:4:13:79:2 | { ... } | Test.kt:32:4:32:9 | ; | @@ -43,7 +42,7 @@ | Test.kt:5:3:5:16 | var ...; | Test.kt:7:3:7:16 | var ...; | | Test.kt:5:3:5:16 | var ...; | Test.kt:8:3:8:16 | var ...; | | Test.kt:5:3:5:16 | var ...; | Test.kt:11:3:16:3 | ; | -| Test.kt:5:3:5:16 | var ...; | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:5:3:5:16 | var ...; | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:5:3:5:16 | var ...; | Test.kt:11:14:14:3 | { ... } | | Test.kt:5:3:5:16 | var ...; | Test.kt:12:4:12:9 | ; | | Test.kt:5:3:5:16 | var ...; | Test.kt:13:4:13:9 | ; | @@ -52,14 +51,13 @@ | Test.kt:5:3:5:16 | var ...; | Test.kt:15:4:15:9 | ; | | Test.kt:5:3:5:16 | var ...; | Test.kt:18:3:18:7 | ; | | Test.kt:5:3:5:16 | var ...; | Test.kt:21:3:24:9 | ; | -| Test.kt:5:3:5:16 | var ...; | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:5:3:5:16 | var ...; | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:5:3:5:16 | var ...; | Test.kt:22:4:22:9 | ; | -| Test.kt:5:3:5:16 | var ...; | Test.kt:22:4:22:9 | { ... } | | Test.kt:5:3:5:16 | var ...; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:5:3:5:16 | var ...; | Test.kt:24:4:24:9 | return ... | | Test.kt:5:3:5:16 | var ...; | Test.kt:27:3:27:8 | ; | | Test.kt:5:3:5:16 | var ...; | Test.kt:30:3:33:3 | ; | -| Test.kt:5:3:5:16 | var ...; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:5:3:5:16 | var ...; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:5:3:5:16 | var ...; | Test.kt:30:15:33:3 | { ... } | | Test.kt:5:3:5:16 | var ...; | Test.kt:31:4:31:9 | ; | | Test.kt:5:3:5:16 | var ...; | Test.kt:32:4:32:9 | ; | @@ -79,7 +77,7 @@ | Test.kt:6:3:6:18 | var ...; | Test.kt:7:3:7:16 | var ...; | | Test.kt:6:3:6:18 | var ...; | Test.kt:8:3:8:16 | var ...; | | Test.kt:6:3:6:18 | var ...; | Test.kt:11:3:16:3 | ; | -| Test.kt:6:3:6:18 | var ...; | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:6:3:6:18 | var ...; | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:6:3:6:18 | var ...; | Test.kt:11:14:14:3 | { ... } | | Test.kt:6:3:6:18 | var ...; | Test.kt:12:4:12:9 | ; | | Test.kt:6:3:6:18 | var ...; | Test.kt:13:4:13:9 | ; | @@ -88,14 +86,13 @@ | Test.kt:6:3:6:18 | var ...; | Test.kt:15:4:15:9 | ; | | Test.kt:6:3:6:18 | var ...; | Test.kt:18:3:18:7 | ; | | Test.kt:6:3:6:18 | var ...; | Test.kt:21:3:24:9 | ; | -| Test.kt:6:3:6:18 | var ...; | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:6:3:6:18 | var ...; | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:6:3:6:18 | var ...; | Test.kt:22:4:22:9 | ; | -| Test.kt:6:3:6:18 | var ...; | Test.kt:22:4:22:9 | { ... } | | Test.kt:6:3:6:18 | var ...; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:6:3:6:18 | var ...; | Test.kt:24:4:24:9 | return ... | | Test.kt:6:3:6:18 | var ...; | Test.kt:27:3:27:8 | ; | | Test.kt:6:3:6:18 | var ...; | Test.kt:30:3:33:3 | ; | -| Test.kt:6:3:6:18 | var ...; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:6:3:6:18 | var ...; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:6:3:6:18 | var ...; | Test.kt:30:15:33:3 | { ... } | | Test.kt:6:3:6:18 | var ...; | Test.kt:31:4:31:9 | ; | | Test.kt:6:3:6:18 | var ...; | Test.kt:32:4:32:9 | ; | @@ -114,7 +111,7 @@ | Test.kt:6:3:6:18 | var ...; | Test.kt:78:3:78:8 | return ... | | Test.kt:7:3:7:16 | var ...; | Test.kt:8:3:8:16 | var ...; | | Test.kt:7:3:7:16 | var ...; | Test.kt:11:3:16:3 | ; | -| Test.kt:7:3:7:16 | var ...; | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:7:3:7:16 | var ...; | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:7:3:7:16 | var ...; | Test.kt:11:14:14:3 | { ... } | | Test.kt:7:3:7:16 | var ...; | Test.kt:12:4:12:9 | ; | | Test.kt:7:3:7:16 | var ...; | Test.kt:13:4:13:9 | ; | @@ -123,14 +120,13 @@ | Test.kt:7:3:7:16 | var ...; | Test.kt:15:4:15:9 | ; | | Test.kt:7:3:7:16 | var ...; | Test.kt:18:3:18:7 | ; | | Test.kt:7:3:7:16 | var ...; | Test.kt:21:3:24:9 | ; | -| Test.kt:7:3:7:16 | var ...; | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:7:3:7:16 | var ...; | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:7:3:7:16 | var ...; | Test.kt:22:4:22:9 | ; | -| Test.kt:7:3:7:16 | var ...; | Test.kt:22:4:22:9 | { ... } | | Test.kt:7:3:7:16 | var ...; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:7:3:7:16 | var ...; | Test.kt:24:4:24:9 | return ... | | Test.kt:7:3:7:16 | var ...; | Test.kt:27:3:27:8 | ; | | Test.kt:7:3:7:16 | var ...; | Test.kt:30:3:33:3 | ; | -| Test.kt:7:3:7:16 | var ...; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:7:3:7:16 | var ...; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:7:3:7:16 | var ...; | Test.kt:30:15:33:3 | { ... } | | Test.kt:7:3:7:16 | var ...; | Test.kt:31:4:31:9 | ; | | Test.kt:7:3:7:16 | var ...; | Test.kt:32:4:32:9 | ; | @@ -148,7 +144,7 @@ | Test.kt:7:3:7:16 | var ...; | Test.kt:77:3:77:8 | ; | | Test.kt:7:3:7:16 | var ...; | Test.kt:78:3:78:8 | return ... | | Test.kt:8:3:8:16 | var ...; | Test.kt:11:3:16:3 | ; | -| Test.kt:8:3:8:16 | var ...; | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:8:3:8:16 | var ...; | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:8:3:8:16 | var ...; | Test.kt:11:14:14:3 | { ... } | | Test.kt:8:3:8:16 | var ...; | Test.kt:12:4:12:9 | ; | | Test.kt:8:3:8:16 | var ...; | Test.kt:13:4:13:9 | ; | @@ -157,14 +153,13 @@ | Test.kt:8:3:8:16 | var ...; | Test.kt:15:4:15:9 | ; | | Test.kt:8:3:8:16 | var ...; | Test.kt:18:3:18:7 | ; | | Test.kt:8:3:8:16 | var ...; | Test.kt:21:3:24:9 | ; | -| Test.kt:8:3:8:16 | var ...; | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:8:3:8:16 | var ...; | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:8:3:8:16 | var ...; | Test.kt:22:4:22:9 | ; | -| Test.kt:8:3:8:16 | var ...; | Test.kt:22:4:22:9 | { ... } | | Test.kt:8:3:8:16 | var ...; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:8:3:8:16 | var ...; | Test.kt:24:4:24:9 | return ... | | Test.kt:8:3:8:16 | var ...; | Test.kt:27:3:27:8 | ; | | Test.kt:8:3:8:16 | var ...; | Test.kt:30:3:33:3 | ; | -| Test.kt:8:3:8:16 | var ...; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:8:3:8:16 | var ...; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:8:3:8:16 | var ...; | Test.kt:30:15:33:3 | { ... } | | Test.kt:8:3:8:16 | var ...; | Test.kt:31:4:31:9 | ; | | Test.kt:8:3:8:16 | var ...; | Test.kt:32:4:32:9 | ; | @@ -181,7 +176,7 @@ | Test.kt:8:3:8:16 | var ...; | Test.kt:73:3:73:8 | ; | | Test.kt:8:3:8:16 | var ...; | Test.kt:77:3:77:8 | ; | | Test.kt:8:3:8:16 | var ...; | Test.kt:78:3:78:8 | return ... | -| Test.kt:11:3:16:3 | ; | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:11:3:16:3 | ; | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:11:3:16:3 | ; | Test.kt:11:14:14:3 | { ... } | | Test.kt:11:3:16:3 | ; | Test.kt:12:4:12:9 | ; | | Test.kt:11:3:16:3 | ; | Test.kt:13:4:13:9 | ; | @@ -190,14 +185,13 @@ | Test.kt:11:3:16:3 | ; | Test.kt:15:4:15:9 | ; | | Test.kt:11:3:16:3 | ; | Test.kt:18:3:18:7 | ; | | Test.kt:11:3:16:3 | ; | Test.kt:21:3:24:9 | ; | -| Test.kt:11:3:16:3 | ; | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:11:3:16:3 | ; | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:11:3:16:3 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:11:3:16:3 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:11:3:16:3 | ; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:11:3:16:3 | ; | Test.kt:24:4:24:9 | return ... | | Test.kt:11:3:16:3 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:11:3:16:3 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:11:3:16:3 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:11:3:16:3 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:11:3:16:3 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:11:3:16:3 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:11:3:16:3 | ; | Test.kt:32:4:32:9 | ; | @@ -214,38 +208,37 @@ | Test.kt:11:3:16:3 | ; | Test.kt:73:3:73:8 | ; | | Test.kt:11:3:16:3 | ; | Test.kt:77:3:77:8 | ; | | Test.kt:11:3:16:3 | ; | Test.kt:78:3:78:8 | return ... | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:11:14:14:3 | { ... } | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:12:4:12:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:13:4:13:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:14:10:16:3 | ... -> ... | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:14:10:16:3 | { ... } | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:15:4:15:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:18:3:18:7 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:21:3:24:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:21:6:21:10 | ... -> ... | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:22:4:22:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:22:4:22:9 | { ... } | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:24:4:24:9 | ... -> ... | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:24:4:24:9 | return ... | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:27:3:27:8 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:30:3:33:3 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:30:7:30:12 | ... -> ... | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:30:15:33:3 | { ... } | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:31:4:31:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:32:4:32:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:35:3:35:8 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:38:3:41:3 | while (...) | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:38:16:41:3 | { ... } | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:39:4:39:9 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:40:4:40:6 | var ...; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:40:4:40:6 | { ... } | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:43:3:43:8 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:73:3:73:8 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:77:3:77:8 | ; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:78:3:78:8 | return ... | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:11:14:14:3 | { ... } | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:12:4:12:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:13:4:13:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:14:10:16:3 | ... -> ... | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:14:10:16:3 | { ... } | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:15:4:15:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:18:3:18:7 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:21:3:24:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:21:6:22:9 | ... -> ... | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:22:4:22:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:24:4:24:9 | ... -> ... | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:24:4:24:9 | return ... | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:27:3:27:8 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:30:3:33:3 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:30:7:33:3 | ... -> ... | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:30:15:33:3 | { ... } | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:31:4:31:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:32:4:32:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:35:3:35:8 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:38:3:41:3 | while (...) | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:38:16:41:3 | { ... } | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:39:4:39:9 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:40:4:40:6 | var ...; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:40:4:40:6 | { ... } | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:43:3:43:8 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:73:3:73:8 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:77:3:77:8 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:78:3:78:8 | return ... | | Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:9 | ; | | Test.kt:11:14:14:3 | { ... } | Test.kt:13:4:13:9 | ; | | Test.kt:12:4:12:9 | ; | Test.kt:13:4:13:9 | ; | @@ -253,14 +246,13 @@ | Test.kt:14:10:16:3 | ... -> ... | Test.kt:15:4:15:9 | ; | | Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:9 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:21:3:24:9 | ; | -| Test.kt:18:3:18:7 | ; | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:18:3:18:7 | ; | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:18:3:18:7 | ; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:18:3:18:7 | ; | Test.kt:24:4:24:9 | return ... | | Test.kt:18:3:18:7 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:18:3:18:7 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:18:3:18:7 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:18:3:18:7 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:18:3:18:7 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:32:4:32:9 | ; | @@ -277,14 +269,13 @@ | Test.kt:18:3:18:7 | ; | Test.kt:73:3:73:8 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:77:3:77:8 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:78:3:78:8 | return ... | -| Test.kt:21:3:24:9 | ; | Test.kt:21:6:21:10 | ... -> ... | +| Test.kt:21:3:24:9 | ; | Test.kt:21:6:22:9 | ... -> ... | | Test.kt:21:3:24:9 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:21:3:24:9 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:21:3:24:9 | ; | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:21:3:24:9 | ; | Test.kt:24:4:24:9 | return ... | | Test.kt:21:3:24:9 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:21:3:24:9 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:21:3:24:9 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:21:3:24:9 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:21:3:24:9 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:21:3:24:9 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:21:3:24:9 | ; | Test.kt:32:4:32:9 | ; | @@ -301,32 +292,31 @@ | Test.kt:21:3:24:9 | ; | Test.kt:73:3:73:8 | ; | | Test.kt:21:3:24:9 | ; | Test.kt:77:3:77:8 | ; | | Test.kt:21:3:24:9 | ; | Test.kt:78:3:78:8 | return ... | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:22:4:22:9 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:22:4:22:9 | { ... } | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:24:4:24:9 | ... -> ... | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:24:4:24:9 | return ... | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:27:3:27:8 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:30:3:33:3 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:30:7:30:12 | ... -> ... | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:30:15:33:3 | { ... } | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:31:4:31:9 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:32:4:32:9 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:35:3:35:8 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:38:3:41:3 | while (...) | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:38:16:41:3 | { ... } | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:39:4:39:9 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:40:4:40:6 | var ...; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:40:4:40:6 | { ... } | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:43:3:43:8 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:73:3:73:8 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:77:3:77:8 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:78:3:78:8 | return ... | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:22:4:22:9 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:24:4:24:9 | ... -> ... | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:24:4:24:9 | return ... | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:27:3:27:8 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:30:3:33:3 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:30:7:33:3 | ... -> ... | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:30:15:33:3 | { ... } | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:31:4:31:9 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:32:4:32:9 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:35:3:35:8 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:38:3:41:3 | while (...) | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:38:16:41:3 | { ... } | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:39:4:39:9 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:40:4:40:6 | var ...; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:40:4:40:6 | { ... } | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:43:3:43:8 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:73:3:73:8 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:77:3:77:8 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:78:3:78:8 | return ... | | Test.kt:22:4:22:9 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:22:4:22:9 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:22:4:22:9 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:22:4:22:9 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:22:4:22:9 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:22:4:22:9 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:22:4:22:9 | ; | Test.kt:32:4:32:9 | ; | @@ -343,29 +333,9 @@ | Test.kt:22:4:22:9 | ; | Test.kt:73:3:73:8 | ; | | Test.kt:22:4:22:9 | ; | Test.kt:77:3:77:8 | ; | | Test.kt:22:4:22:9 | ; | Test.kt:78:3:78:8 | return ... | -| Test.kt:22:4:22:9 | { ... } | Test.kt:22:4:22:9 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:27:3:27:8 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:30:3:33:3 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:30:7:30:12 | ... -> ... | -| Test.kt:22:4:22:9 | { ... } | Test.kt:30:15:33:3 | { ... } | -| Test.kt:22:4:22:9 | { ... } | Test.kt:31:4:31:9 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:32:4:32:9 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:35:3:35:8 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:38:3:41:3 | while (...) | -| Test.kt:22:4:22:9 | { ... } | Test.kt:38:16:41:3 | { ... } | -| Test.kt:22:4:22:9 | { ... } | Test.kt:39:4:39:9 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:40:4:40:6 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:40:4:40:6 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:40:4:40:6 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:40:4:40:6 | var ...; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:40:4:40:6 | { ... } | -| Test.kt:22:4:22:9 | { ... } | Test.kt:43:3:43:8 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:73:3:73:8 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:77:3:77:8 | ; | -| Test.kt:22:4:22:9 | { ... } | Test.kt:78:3:78:8 | return ... | | Test.kt:24:4:24:9 | ... -> ... | Test.kt:24:4:24:9 | return ... | | Test.kt:27:3:27:8 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:27:3:27:8 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:27:3:27:8 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:27:3:27:8 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:27:3:27:8 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:27:3:27:8 | ; | Test.kt:32:4:32:9 | ; | @@ -382,7 +352,7 @@ | Test.kt:27:3:27:8 | ; | Test.kt:73:3:73:8 | ; | | Test.kt:27:3:27:8 | ; | Test.kt:77:3:77:8 | ; | | Test.kt:27:3:27:8 | ; | Test.kt:78:3:78:8 | return ... | -| Test.kt:30:3:33:3 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:30:3:33:3 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:30:3:33:3 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:30:3:33:3 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:30:3:33:3 | ; | Test.kt:32:4:32:9 | ; | @@ -399,22 +369,22 @@ | Test.kt:30:3:33:3 | ; | Test.kt:73:3:73:8 | ; | | Test.kt:30:3:33:3 | ; | Test.kt:77:3:77:8 | ; | | Test.kt:30:3:33:3 | ; | Test.kt:78:3:78:8 | return ... | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:30:15:33:3 | { ... } | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:31:4:31:9 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:32:4:32:9 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:35:3:35:8 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:38:3:41:3 | while (...) | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:38:16:41:3 | { ... } | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:39:4:39:9 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:40:4:40:6 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:40:4:40:6 | var ...; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:40:4:40:6 | { ... } | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:43:3:43:8 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:73:3:73:8 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:77:3:77:8 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:78:3:78:8 | return ... | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:30:15:33:3 | { ... } | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:31:4:31:9 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:32:4:32:9 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:35:3:35:8 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:38:3:41:3 | while (...) | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:38:16:41:3 | { ... } | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:39:4:39:9 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:40:4:40:6 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:40:4:40:6 | var ...; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:40:4:40:6 | { ... } | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:43:3:43:8 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:73:3:73:8 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:77:3:77:8 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:78:3:78:8 | return ... | | Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:9 | ; | | Test.kt:30:15:33:3 | { ... } | Test.kt:32:4:32:9 | ; | | Test.kt:31:4:31:9 | ; | Test.kt:32:4:32:9 | ; | @@ -519,57 +489,57 @@ | Test.kt:95:4:97:2 | catch (...) | Test.kt:96:3:96:10 | return ... | | Test.kt:95:36:97:2 | { ... } | Test.kt:96:3:96:10 | return ... | | Test.kt:100:25:110:1 | { ... } | Test.kt:101:5:103:5 | ; | -| Test.kt:100:25:110:1 | { ... } | Test.kt:101:9:101:30 | ... -> ... | +| Test.kt:100:25:110:1 | { ... } | Test.kt:101:9:103:5 | ... -> ... | | Test.kt:100:25:110:1 | { ... } | Test.kt:101:33:103:5 | { ... } | | Test.kt:100:25:110:1 | { ... } | Test.kt:102:9:102:25 | throw ... | | Test.kt:100:25:110:1 | { ... } | Test.kt:105:5:109:5 | ; | -| Test.kt:100:25:110:1 | { ... } | Test.kt:105:9:105:17 | ... -> ... | +| Test.kt:100:25:110:1 | { ... } | Test.kt:105:9:107:5 | ... -> ... | | Test.kt:100:25:110:1 | { ... } | Test.kt:105:20:107:5 | { ... } | | Test.kt:100:25:110:1 | { ... } | Test.kt:106:9:106:29 | ; | -| Test.kt:100:25:110:1 | { ... } | Test.kt:107:16:107:24 | ... -> ... | +| Test.kt:100:25:110:1 | { ... } | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:100:25:110:1 | { ... } | Test.kt:107:27:109:5 | { ... } | | Test.kt:100:25:110:1 | { ... } | Test.kt:108:9:108:29 | ; | -| Test.kt:101:5:103:5 | ; | Test.kt:101:9:101:30 | ... -> ... | +| Test.kt:101:5:103:5 | ; | Test.kt:101:9:103:5 | ... -> ... | | Test.kt:101:5:103:5 | ; | Test.kt:101:33:103:5 | { ... } | | Test.kt:101:5:103:5 | ; | Test.kt:102:9:102:25 | throw ... | | Test.kt:101:5:103:5 | ; | Test.kt:105:5:109:5 | ; | -| Test.kt:101:5:103:5 | ; | Test.kt:105:9:105:17 | ... -> ... | +| Test.kt:101:5:103:5 | ; | Test.kt:105:9:107:5 | ... -> ... | | Test.kt:101:5:103:5 | ; | Test.kt:105:20:107:5 | { ... } | | Test.kt:101:5:103:5 | ; | Test.kt:106:9:106:29 | ; | -| Test.kt:101:5:103:5 | ; | Test.kt:107:16:107:24 | ... -> ... | +| Test.kt:101:5:103:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:101:5:103:5 | ; | Test.kt:107:27:109:5 | { ... } | | Test.kt:101:5:103:5 | ; | Test.kt:108:9:108:29 | ; | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:101:33:103:5 | { ... } | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:102:9:102:25 | throw ... | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:105:5:109:5 | ; | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:105:9:105:17 | ... -> ... | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:105:20:107:5 | { ... } | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:106:9:106:29 | ; | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:107:16:107:24 | ... -> ... | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:107:27:109:5 | { ... } | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:108:9:108:29 | ; | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:101:33:103:5 | { ... } | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:102:9:102:25 | throw ... | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:105:5:109:5 | ; | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:105:9:107:5 | ... -> ... | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:105:20:107:5 | { ... } | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:106:9:106:29 | ; | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:107:16:109:5 | ... -> ... | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:108:9:108:29 | ; | | Test.kt:101:33:103:5 | { ... } | Test.kt:102:9:102:25 | throw ... | -| Test.kt:105:5:109:5 | ; | Test.kt:105:9:105:17 | ... -> ... | +| Test.kt:105:5:109:5 | ; | Test.kt:105:9:107:5 | ... -> ... | | Test.kt:105:5:109:5 | ; | Test.kt:105:20:107:5 | { ... } | | Test.kt:105:5:109:5 | ; | Test.kt:106:9:106:29 | ; | -| Test.kt:105:5:109:5 | ; | Test.kt:107:16:107:24 | ... -> ... | +| Test.kt:105:5:109:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:105:5:109:5 | ; | Test.kt:107:27:109:5 | { ... } | | Test.kt:105:5:109:5 | ; | Test.kt:108:9:108:29 | ; | -| Test.kt:105:9:105:17 | ... -> ... | Test.kt:105:20:107:5 | { ... } | -| Test.kt:105:9:105:17 | ... -> ... | Test.kt:106:9:106:29 | ; | -| Test.kt:105:9:105:17 | ... -> ... | Test.kt:107:16:107:24 | ... -> ... | -| Test.kt:105:9:105:17 | ... -> ... | Test.kt:107:27:109:5 | { ... } | -| Test.kt:105:9:105:17 | ... -> ... | Test.kt:108:9:108:29 | ; | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:105:20:107:5 | { ... } | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:106:9:106:29 | ; | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:107:16:109:5 | ... -> ... | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:108:9:108:29 | ; | | Test.kt:105:20:107:5 | { ... } | Test.kt:106:9:106:29 | ; | -| Test.kt:107:16:107:24 | ... -> ... | Test.kt:107:27:109:5 | { ... } | -| Test.kt:107:16:107:24 | ... -> ... | Test.kt:108:9:108:29 | ; | +| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | +| Test.kt:107:16:109:5 | ... -> ... | Test.kt:108:9:108:29 | ; | | Test.kt:107:27:109:5 | { ... } | Test.kt:108:9:108:29 | ; | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:5:115:5 | ; | -| Test.kt:112:32:116:1 | { ... } | Test.kt:113:9:113:14 | ... -> ... | +| Test.kt:112:32:116:1 | { ... } | Test.kt:113:9:115:5 | ... -> ... | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:17:115:5 | { ... } | -| Test.kt:113:5:115:5 | ; | Test.kt:113:9:113:14 | ... -> ... | +| Test.kt:113:5:115:5 | ; | Test.kt:113:9:115:5 | ... -> ... | | Test.kt:113:5:115:5 | ; | Test.kt:113:17:115:5 | { ... } | -| Test.kt:113:9:113:14 | ... -> ... | Test.kt:113:17:115:5 | { ... } | +| Test.kt:113:9:115:5 | ... -> ... | Test.kt:113:17:115:5 | { ... } | | Test.kt:118:37:124:1 | { ... } | Test.kt:119:2:123:12 | ; | | Test.kt:118:37:124:1 | { ... } | Test.kt:120:3:123:10 | ... -> ... | | Test.kt:118:37:124:1 | { ... } | Test.kt:121:4:121:9 | ... -> ... | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected index 5cc9401a0ed..257d82fc1a7 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictPostDominance.expected @@ -16,12 +16,12 @@ | Test.kt:11:3:16:3 | ; | Test.kt:6:3:6:18 | var ...; | | Test.kt:11:3:16:3 | ; | Test.kt:7:3:7:16 | var ...; | | Test.kt:11:3:16:3 | ; | Test.kt:8:3:8:16 | var ...; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:4:13:79:2 | { ... } | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:5:3:5:16 | var ...; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:6:3:6:18 | var ...; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:7:3:7:16 | var ...; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:8:3:8:16 | var ...; | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:11:3:16:3 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:4:13:79:2 | { ... } | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:5:3:5:16 | var ...; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:6:3:6:18 | var ...; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:7:3:7:16 | var ...; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:8:3:8:16 | var ...; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:11:3:16:3 | ; | | Test.kt:12:4:12:9 | ; | Test.kt:11:14:14:3 | { ... } | | Test.kt:13:4:13:9 | ; | Test.kt:11:14:14:3 | { ... } | | Test.kt:13:4:13:9 | ; | Test.kt:12:4:12:9 | ; | @@ -34,7 +34,7 @@ | Test.kt:18:3:18:7 | ; | Test.kt:7:3:7:16 | var ...; | | Test.kt:18:3:18:7 | ; | Test.kt:8:3:8:16 | var ...; | | Test.kt:18:3:18:7 | ; | Test.kt:11:3:16:3 | ; | -| Test.kt:18:3:18:7 | ; | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:18:3:18:7 | ; | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:18:3:18:7 | ; | Test.kt:11:14:14:3 | { ... } | | Test.kt:18:3:18:7 | ; | Test.kt:12:4:12:9 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:13:4:13:9 | ; | @@ -47,7 +47,7 @@ | Test.kt:21:3:24:9 | ; | Test.kt:7:3:7:16 | var ...; | | Test.kt:21:3:24:9 | ; | Test.kt:8:3:8:16 | var ...; | | Test.kt:21:3:24:9 | ; | Test.kt:11:3:16:3 | ; | -| Test.kt:21:3:24:9 | ; | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:21:3:24:9 | ; | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:21:3:24:9 | ; | Test.kt:11:14:14:3 | { ... } | | Test.kt:21:3:24:9 | ; | Test.kt:12:4:12:9 | ; | | Test.kt:21:3:24:9 | ; | Test.kt:13:4:13:9 | ; | @@ -55,48 +55,42 @@ | Test.kt:21:3:24:9 | ; | Test.kt:14:10:16:3 | { ... } | | Test.kt:21:3:24:9 | ; | Test.kt:15:4:15:9 | ; | | Test.kt:21:3:24:9 | ; | Test.kt:18:3:18:7 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:4:13:79:2 | { ... } | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:5:3:5:16 | var ...; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:6:3:6:18 | var ...; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:7:3:7:16 | var ...; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:8:3:8:16 | var ...; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:11:3:16:3 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:11:7:11:11 | ... -> ... | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:11:14:14:3 | { ... } | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:12:4:12:9 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:13:4:13:9 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:14:10:16:3 | ... -> ... | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:14:10:16:3 | { ... } | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:15:4:15:9 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:18:3:18:7 | ; | -| Test.kt:21:6:21:10 | ... -> ... | Test.kt:21:3:24:9 | ; | -| Test.kt:22:4:22:9 | ; | Test.kt:22:4:22:9 | { ... } | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:4:13:79:2 | { ... } | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:5:3:5:16 | var ...; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:6:3:6:18 | var ...; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:7:3:7:16 | var ...; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:8:3:8:16 | var ...; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:11:3:16:3 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:11:7:14:3 | ... -> ... | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:11:14:14:3 | { ... } | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:12:4:12:9 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:13:4:13:9 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:14:10:16:3 | ... -> ... | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:14:10:16:3 | { ... } | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:15:4:15:9 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:18:3:18:7 | ; | +| Test.kt:21:6:22:9 | ... -> ... | Test.kt:21:3:24:9 | ; | | Test.kt:24:4:24:9 | return ... | Test.kt:24:4:24:9 | ... -> ... | | Test.kt:27:3:27:8 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:27:3:27:8 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:30:3:33:3 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:30:3:33:3 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:30:3:33:3 | ; | Test.kt:27:3:27:8 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:22:4:22:9 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:22:4:22:9 | { ... } | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:27:3:27:8 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:30:3:33:3 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:22:4:22:9 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:27:3:27:8 | ; | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:30:3:33:3 | ; | | Test.kt:31:4:31:9 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:32:4:32:9 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:32:4:32:9 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:35:3:35:8 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:35:3:35:8 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:35:3:35:8 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:35:3:35:8 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:35:3:35:8 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:35:3:35:8 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:35:3:35:8 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:35:3:35:8 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:35:3:35:8 | ; | Test.kt:32:4:32:9 | ; | | Test.kt:38:3:41:3 | while (...) | Test.kt:22:4:22:9 | ; | -| Test.kt:38:3:41:3 | while (...) | Test.kt:22:4:22:9 | { ... } | | Test.kt:38:3:41:3 | while (...) | Test.kt:27:3:27:8 | ; | | Test.kt:38:3:41:3 | while (...) | Test.kt:30:3:33:3 | ; | -| Test.kt:38:3:41:3 | while (...) | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:38:3:41:3 | while (...) | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:38:3:41:3 | while (...) | Test.kt:30:15:33:3 | { ... } | | Test.kt:38:3:41:3 | while (...) | Test.kt:31:4:31:9 | ; | | Test.kt:38:3:41:3 | while (...) | Test.kt:32:4:32:9 | ; | @@ -123,10 +117,9 @@ | Test.kt:40:4:40:6 | { ... } | Test.kt:39:4:39:9 | ; | | Test.kt:40:4:40:6 | { ... } | Test.kt:40:4:40:6 | ; | | Test.kt:43:3:43:8 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:43:3:43:8 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:43:3:43:8 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:43:3:43:8 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:43:3:43:8 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:43:3:43:8 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:43:3:43:8 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:43:3:43:8 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:43:3:43:8 | ; | Test.kt:32:4:32:9 | ; | @@ -140,10 +133,9 @@ | Test.kt:43:3:43:8 | ; | Test.kt:40:4:40:6 | var ...; | | Test.kt:43:3:43:8 | ; | Test.kt:40:4:40:6 | { ... } | | Test.kt:73:3:73:8 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:73:3:73:8 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:73:3:73:8 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:73:3:73:8 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:73:3:73:8 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:73:3:73:8 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:73:3:73:8 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:73:3:73:8 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:73:3:73:8 | ; | Test.kt:32:4:32:9 | ; | @@ -158,10 +150,9 @@ | Test.kt:73:3:73:8 | ; | Test.kt:40:4:40:6 | { ... } | | Test.kt:73:3:73:8 | ; | Test.kt:43:3:43:8 | ; | | Test.kt:77:3:77:8 | ; | Test.kt:22:4:22:9 | ; | -| Test.kt:77:3:77:8 | ; | Test.kt:22:4:22:9 | { ... } | | Test.kt:77:3:77:8 | ; | Test.kt:27:3:27:8 | ; | | Test.kt:77:3:77:8 | ; | Test.kt:30:3:33:3 | ; | -| Test.kt:77:3:77:8 | ; | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:77:3:77:8 | ; | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:77:3:77:8 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:77:3:77:8 | ; | Test.kt:31:4:31:9 | ; | | Test.kt:77:3:77:8 | ; | Test.kt:32:4:32:9 | ; | @@ -177,10 +168,9 @@ | Test.kt:77:3:77:8 | ; | Test.kt:43:3:43:8 | ; | | Test.kt:77:3:77:8 | ; | Test.kt:73:3:73:8 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:22:4:22:9 | ; | -| Test.kt:78:3:78:8 | return ... | Test.kt:22:4:22:9 | { ... } | | Test.kt:78:3:78:8 | return ... | Test.kt:27:3:27:8 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:30:3:33:3 | ; | -| Test.kt:78:3:78:8 | return ... | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:78:3:78:8 | return ... | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:78:3:78:8 | return ... | Test.kt:30:15:33:3 | { ... } | | Test.kt:78:3:78:8 | return ... | Test.kt:31:4:31:9 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:32:4:32:9 | ; | @@ -215,15 +205,15 @@ | Test.kt:96:3:96:10 | return ... | Test.kt:95:4:97:2 | catch (...) | | Test.kt:96:3:96:10 | return ... | Test.kt:95:36:97:2 | { ... } | | Test.kt:101:5:103:5 | ; | Test.kt:100:25:110:1 | { ... } | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:100:25:110:1 | { ... } | -| Test.kt:101:9:101:30 | ... -> ... | Test.kt:101:5:103:5 | ; | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:100:25:110:1 | { ... } | +| Test.kt:101:9:103:5 | ... -> ... | Test.kt:101:5:103:5 | ; | | Test.kt:102:9:102:25 | throw ... | Test.kt:101:33:103:5 | { ... } | -| Test.kt:105:9:105:17 | ... -> ... | Test.kt:105:5:109:5 | ; | +| Test.kt:105:9:107:5 | ... -> ... | Test.kt:105:5:109:5 | ; | | Test.kt:106:9:106:29 | ; | Test.kt:105:20:107:5 | { ... } | | Test.kt:108:9:108:29 | ; | Test.kt:107:27:109:5 | { ... } | | Test.kt:113:5:115:5 | ; | Test.kt:112:32:116:1 | { ... } | -| Test.kt:113:9:113:14 | ... -> ... | Test.kt:112:32:116:1 | { ... } | -| Test.kt:113:9:113:14 | ... -> ... | Test.kt:113:5:115:5 | ; | +| Test.kt:113:9:115:5 | ... -> ... | Test.kt:112:32:116:1 | { ... } | +| Test.kt:113:9:115:5 | ... -> ... | Test.kt:113:5:115:5 | ; | | Test.kt:119:2:123:12 | ; | Test.kt:118:37:124:1 | { ... } | | Test.kt:120:3:123:10 | ... -> ... | Test.kt:118:37:124:1 | { ... } | | Test.kt:120:3:123:10 | ... -> ... | Test.kt:119:2:123:12 | ; | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected index 69cb545eefa..72d9d6bbbde 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected @@ -14,12 +14,12 @@ | Test.kt:8:3:8:18 | y | Test.kt:11:3:16:3 | ; | | Test.kt:8:17:8:18 | 50 | Test.kt:8:3:8:18 | y | | Test.kt:11:3:16:3 | ; | Test.kt:11:3:16:3 | when ... | -| Test.kt:11:3:16:3 | when ... | Test.kt:11:7:11:11 | ... -> ... | +| Test.kt:11:3:16:3 | when ... | Test.kt:11:7:14:3 | ... -> ... | | Test.kt:11:7:11:7 | x | Test.kt:11:11:11:11 | 0 | -| Test.kt:11:7:11:11 | ... -> ... | Test.kt:11:7:11:7 | x | | Test.kt:11:7:11:11 | ... > ... | Test.kt:11:14:14:3 | { ... } | | Test.kt:11:7:11:11 | ... > ... | Test.kt:14:10:16:3 | ... -> ... | | Test.kt:11:7:11:11 | ... > ... | Test.kt:18:3:18:20 | ; | +| Test.kt:11:7:14:3 | ... -> ... | Test.kt:11:7:11:7 | x | | Test.kt:11:11:11:11 | 0 | Test.kt:11:7:11:11 | ... > ... | | Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:9 | ; | | Test.kt:12:4:12:9 | ...=... | Test.kt:13:4:13:9 | ; | @@ -39,16 +39,15 @@ | Test.kt:18:8:18:12 | ... + ... | Test.kt:18:7:18:20 | (...)... | | Test.kt:18:12:18:12 | y | Test.kt:18:8:18:12 | ... + ... | | Test.kt:21:3:24:11 | ; | Test.kt:21:3:24:11 | when ... | -| Test.kt:21:3:24:11 | when ... | Test.kt:21:7:21:11 | ... -> ... | +| Test.kt:21:3:24:11 | when ... | Test.kt:21:7:22:9 | ... -> ... | | Test.kt:21:7:21:7 | x | Test.kt:21:11:21:11 | 0 | -| Test.kt:21:7:21:11 | ... -> ... | Test.kt:21:7:21:7 | x | | Test.kt:21:7:21:11 | ... < ... | Test.kt:2:2:79:2 | test | -| Test.kt:21:7:21:11 | ... < ... | Test.kt:22:4:22:9 | { ... } | +| Test.kt:21:7:21:11 | ... < ... | Test.kt:22:4:22:9 | ; | | Test.kt:21:7:21:11 | ... < ... | Test.kt:24:4:24:11 | ... -> ... | +| Test.kt:21:7:22:9 | ... -> ... | Test.kt:21:7:21:7 | x | | Test.kt:21:11:21:11 | 0 | Test.kt:21:7:21:11 | ... < ... | | Test.kt:22:4:22:9 | ...=... | Test.kt:27:3:27:8 | ; | | Test.kt:22:4:22:9 | ; | Test.kt:22:8:22:9 | 40 | -| Test.kt:22:4:22:9 | { ... } | Test.kt:22:4:22:9 | ; | | Test.kt:22:8:22:9 | 40 | Test.kt:22:4:22:9 | ...=... | | Test.kt:24:4:24:11 | ... -> ... | Test.kt:24:4:24:11 | true | | Test.kt:24:4:24:11 | true | Test.kt:24:11:24:11 | z | @@ -57,11 +56,11 @@ | Test.kt:27:3:27:8 | ; | Test.kt:27:7:27:8 | 10 | | Test.kt:27:7:27:8 | 10 | Test.kt:27:3:27:8 | ...=... | | Test.kt:30:3:33:3 | ; | Test.kt:30:3:33:3 | when ... | -| Test.kt:30:3:33:3 | when ... | Test.kt:30:7:30:12 | ... -> ... | +| Test.kt:30:3:33:3 | when ... | Test.kt:30:7:33:3 | ... -> ... | | Test.kt:30:7:30:7 | x | Test.kt:30:12:30:12 | 0 | | Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:30:15:33:3 | { ... } | | Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:35:3:35:8 | ; | -| Test.kt:30:7:30:12 | ... -> ... | Test.kt:30:7:30:7 | x | +| Test.kt:30:7:33:3 | ... -> ... | Test.kt:30:7:30:7 | x | | Test.kt:30:12:30:12 | 0 | Test.kt:30:7:30:12 | ... (value equals) ... | | Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:9 | ; | | Test.kt:31:4:31:9 | ...=... | Test.kt:32:4:32:9 | ; | @@ -127,11 +126,11 @@ | Test.kt:87:4:87:9 | ; | Test.kt:87:8:87:9 | 10 | | Test.kt:87:8:87:9 | 10 | Test.kt:87:4:87:9 | ...=... | | Test.kt:88:4:91:4 | ; | Test.kt:88:4:91:4 | when ... | -| Test.kt:88:4:91:4 | when ... | Test.kt:88:8:88:14 | ... -> ... | +| Test.kt:88:4:91:4 | when ... | Test.kt:88:8:91:4 | ... -> ... | | Test.kt:88:8:88:8 | a | Test.kt:88:12:88:14 | 100 | -| Test.kt:88:8:88:14 | ... -> ... | Test.kt:88:8:88:8 | a | | Test.kt:88:8:88:14 | ... > ... | Test.kt:88:17:91:4 | { ... } | | Test.kt:88:8:88:14 | ... > ... | Test.kt:92:4:93:9 | ; | +| Test.kt:88:8:91:4 | ... -> ... | Test.kt:88:8:88:8 | a | | Test.kt:88:12:88:14 | 100 | Test.kt:88:8:88:14 | ... > ... | | Test.kt:88:17:91:4 | { ... } | Test.kt:89:5:89:10 | ; | | Test.kt:89:5:89:10 | ...=... | Test.kt:90:5:90:9 | ; | @@ -140,19 +139,19 @@ | Test.kt:90:5:90:9 | ; | Test.kt:90:9:90:9 | c | | Test.kt:90:9:90:9 | c | Test.kt:90:5:90:9 | ...=... | | Test.kt:92:4:93:9 | ; | Test.kt:92:4:93:9 | when ... | -| Test.kt:92:4:93:9 | when ... | Test.kt:92:8:92:14 | ... -> ... | +| Test.kt:92:4:93:9 | when ... | Test.kt:92:8:93:9 | ... -> ... | | Test.kt:92:8:92:8 | a | Test.kt:92:13:92:14 | 10 | | Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:81:2:98:2 | test2 | | Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:93:5:93:9 | break | | Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:94:4:95:12 | ; | -| Test.kt:92:8:92:14 | ... -> ... | Test.kt:92:8:92:8 | a | +| Test.kt:92:8:93:9 | ... -> ... | Test.kt:92:8:92:8 | a | | Test.kt:92:13:92:14 | 10 | Test.kt:92:8:92:14 | ... (value equals) ... | | Test.kt:93:5:93:9 | break | Test.kt:97:10:97:10 | b | | Test.kt:94:4:95:12 | ; | Test.kt:94:4:95:12 | when ... | -| Test.kt:94:4:95:12 | when ... | Test.kt:94:8:94:14 | ... -> ... | +| Test.kt:94:4:95:12 | when ... | Test.kt:94:8:95:12 | ... -> ... | | Test.kt:94:8:94:8 | a | Test.kt:94:13:94:14 | 20 | | Test.kt:94:8:94:14 | ... (value equals) ... | Test.kt:95:12:95:12 | c | -| Test.kt:94:8:94:14 | ... -> ... | Test.kt:94:8:94:8 | a | +| Test.kt:94:8:95:12 | ... -> ... | Test.kt:94:8:94:8 | a | | Test.kt:94:13:94:14 | 20 | Test.kt:94:8:94:14 | ... (value equals) ... | | Test.kt:95:12:95:12 | c | Test.kt:95:5:95:12 | return ... | | Test.kt:97:10:97:10 | b | Test.kt:97:3:97:10 | return ... | diff --git a/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected b/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected index f884671c094..e601e1378a6 100644 --- a/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected +++ b/java/ql/test-kotlin2/library-tests/data-classes/PrintAst.expected @@ -17,11 +17,11 @@ dc.kt: # 0| 3: [Method] copy # 0| 3: [TypeAccess] ProtoMapValue #-----| 4: (Parameters) -# 1| 0: [Parameter] bytes -# 1| 0: [TypeAccess] byte[] -# 1| 1: [Parameter] strs -# 1| 0: [TypeAccess] String[] -# 1| 0: [TypeAccess] String +# 0| 0: [Parameter] bytes +# 0| 0: [TypeAccess] byte[] +# 0| 1: [Parameter] strs +# 0| 0: [TypeAccess] String[] +# 0| 0: [TypeAccess] String # 0| 5: [BlockStmt] { ... } # 0| 0: [ReturnStmt] return ... # 0| 0: [ClassInstanceExpr] new ProtoMapValue(...) diff --git a/java/ql/test-kotlin2/library-tests/data-classes/callees.expected b/java/ql/test-kotlin2/library-tests/data-classes/callees.expected index f16c4ffb435..a0352c3ac72 100644 --- a/java/ql/test-kotlin2/library-tests/data-classes/callees.expected +++ b/java/ql/test-kotlin2/library-tests/data-classes/callees.expected @@ -4,4 +4,4 @@ | dc.kt:0:0:0:0 | new ProtoMapValue(...) | ProtoMapValue.ProtoMapValue | | dc.kt:0:0:0:0 | toString(...) | java.util.Arrays.toString | | dc.kt:0:0:0:0 | toString(...) | java.util.Arrays.toString | -| dc.kt:1:1:1:71 | super(...) | java.lang.Object.Object | +| dc.kt:1:25:1:71 | super(...) | java.lang.Object.Object | diff --git a/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt b/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt index 3ef2c70d363..8cb4c31fb25 100644 --- a/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt +++ b/java/ql/test-kotlin2/library-tests/dataflow/func/kotlinx_coroutines_stubs.kt @@ -31,5 +31,3 @@ public fun CoroutineScope.async( ): Deferred { return null!! } - -// Diagnostic Matches: % Couldn't get owner of KDoc. The comment is extracted without an owner. ...while extracting a file (kotlinx_coroutines_stubs.kt) at %kotlinx_coroutines_stubs.kt:1:1:36:0% diff --git a/java/ql/test-kotlin2/library-tests/exprs/binop.expected b/java/ql/test-kotlin2/library-tests/exprs/binop.expected index f69701028d5..83dad7f94b5 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/binop.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/binop.expected @@ -96,8 +96,8 @@ | exprs.kt:141:12:141:20 | ... + ... | exprs.kt:141:12:141:14 | 123 | exprs.kt:141:18:141:20 | 456 | | exprs.kt:167:8:167:16 | ... (value not-equals) ... | exprs.kt:167:8:167:8 | r | exprs.kt:167:13:167:16 | null | | exprs.kt:196:31:196:37 | ... + ... | exprs.kt:196:31:196:32 | getA1(...) | exprs.kt:196:36:196:37 | a2 | -| exprs.kt:211:20:211:29 | ... + ... | exprs.kt:211:20:211:21 | ...!! | exprs.kt:211:28:211:28 | 5 | -| exprs.kt:212:19:212:25 | ... + ... | exprs.kt:212:20:212:21 | ...!! | exprs.kt:212:25:212:25 | 5 | +| exprs.kt:211:19:211:29 | ... + ... | exprs.kt:211:19:211:21 | ...!! | exprs.kt:211:28:211:28 | 5 | +| exprs.kt:212:19:212:25 | ... + ... | exprs.kt:212:19:212:21 | ...!! | exprs.kt:212:25:212:25 | 5 | | exprs.kt:230:12:230:47 | ... (value equals) ... | exprs.kt:230:12:230:27 | notNullPrimitive | exprs.kt:230:32:230:47 | notNullPrimitive | | exprs.kt:231:12:231:48 | ... (value equals) ... | exprs.kt:231:12:231:27 | notNullPrimitive | exprs.kt:231:32:231:48 | nullablePrimitive | | exprs.kt:232:12:232:49 | ... (value equals) ... | exprs.kt:232:12:232:28 | nullablePrimitive | exprs.kt:232:33:232:49 | nullablePrimitive | diff --git a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected index 220dee0084b..4eab44316e1 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/exprs.expected @@ -883,18 +883,6 @@ | delegatedProperties.kt:87:34:87:46 | getTopLevelInt(...) | delegatedProperties.kt:87:34:87:46 | get | MethodCall | | delegatedProperties.kt:87:34:87:46 | setTopLevelInt(...) | delegatedProperties.kt:87:34:87:46 | set | MethodCall | | delegatedProperties.kt:87:34:87:46 | this | delegatedProperties.kt:87:34:87:46 | invoke | ThisAccess | -| exprs.kt:0:0:0:0 | Color | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Color | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Color | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Color[] | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | Direction[] | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | EnumEntries | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | EnumEntries | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:4:1:142:1 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:4:20:4:25 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:4:28:4:33 | int | file://:0:0:0:0 | | TypeAccess | @@ -908,468 +896,468 @@ | exprs.kt:8:32:8:41 | double | file://:0:0:0:0 | | TypeAccess | | exprs.kt:9:20:9:28 | float | file://:0:0:0:0 | | TypeAccess | | exprs.kt:9:31:9:39 | float | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:11:9:11:10 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:11:5:11:14 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:11:14:11:14 | 1 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | -| exprs.kt:12:9:12:10 | i2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:12:5:12:18 | i2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:12:14:12:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:12:14:12:18 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:12:18:12:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:13:9:13:10 | i3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:13:5:13:18 | i3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:13:14:13:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:13:14:13:18 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:13:18:13:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:14:9:14:10 | i4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:14:5:14:18 | i4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:14:14:14:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:14:14:14:18 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:14:18:14:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:15:9:15:10 | i5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:15:5:15:18 | i5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:15:14:15:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:15:14:15:18 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:15:18:15:18 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:16:9:16:10 | i6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:16:5:16:20 | i6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:16:14:16:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:16:14:16:20 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LeftShiftExpr | | exprs.kt:16:20:16:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:17:9:17:10 | i7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:17:5:17:20 | i7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:17:14:17:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:17:14:17:20 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RightShiftExpr | | exprs.kt:17:20:17:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:18:9:18:10 | i8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:18:5:18:21 | i8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:18:14:18:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:18:14:18:21 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | UnsignedRightShiftExpr | | exprs.kt:18:21:18:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:19:9:19:10 | i9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:19:5:19:20 | i9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:19:14:19:14 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:19:14:19:20 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:19:20:19:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:20:9:20:11 | i10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:20:5:20:20 | i10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:20:15:20:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:20:15:20:20 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:20:20:20:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:21:9:21:11 | i11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:21:5:21:21 | i11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:21:15:21:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:21:15:21:21 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:21:21:21:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:22:9:22:11 | i12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:22:5:22:21 | i12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:22:15:22:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:22:15:22:21 | ~... | exprs.kt:4:1:142:1 | topLevelMethod | BitNotExpr | -| exprs.kt:23:9:23:11 | i13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:23:5:23:20 | i13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:23:15:23:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:23:15:23:20 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:23:20:23:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:24:9:24:11 | i14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:24:5:24:20 | i14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:24:15:24:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:24:15:24:20 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:24:20:24:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:25:9:25:11 | i15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:25:5:25:19 | i15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:25:15:25:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:25:15:25:19 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:25:19:25:19 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:26:9:26:11 | i16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:26:5:26:20 | i16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:26:15:26:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:26:15:26:20 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:26:20:26:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:27:9:27:11 | i17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:27:5:27:19 | i17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:27:15:27:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:27:15:27:19 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:27:19:27:19 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:28:9:28:11 | i18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:28:5:28:20 | i18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:28:15:28:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:28:15:28:20 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:28:20:28:20 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:29:9:29:11 | i19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:29:5:29:21 | i19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:29:15:29:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:29:15:29:21 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:29:21:29:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:30:9:30:11 | i20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:30:5:30:21 | i20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:30:15:30:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:30:15:30:21 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:30:21:30:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:31:9:31:11 | i21 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:31:5:31:25 | i21 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:31:15:31:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:31:15:31:25 | contains(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:31:20:31:20 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:31:20:31:25 | rangeTo(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:31:25:31:25 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:32:9:32:11 | i22 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:32:5:32:26 | i22 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:32:15:32:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:32:15:32:26 | !... | exprs.kt:4:1:142:1 | topLevelMethod | LogNotExpr | | exprs.kt:32:15:32:26 | contains(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:32:21:32:21 | x | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:32:21:32:26 | rangeTo(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:32:26:32:26 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:34:9:34:11 | by1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:34:5:34:17 | by1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:34:15:34:17 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:35:9:35:11 | by2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:35:5:35:23 | by2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:35:15:35:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:35:15:35:23 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:35:21:35:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:36:9:36:11 | by3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:36:5:36:23 | by3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:36:15:36:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:36:15:36:23 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:36:21:36:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:37:9:37:11 | by4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:37:5:37:23 | by4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:37:15:37:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:37:15:37:23 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:37:21:37:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:38:9:38:11 | by5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:38:5:38:23 | by5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:38:15:38:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:38:15:38:23 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:38:21:38:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:39:9:39:11 | by6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:39:5:39:24 | by6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:39:15:39:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:39:15:39:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:39:15:39:24 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:39:22:39:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:39:22:39:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:40:9:40:11 | by7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:40:5:40:24 | by7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:40:15:40:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:40:15:40:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:40:15:40:24 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:40:22:40:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:40:22:40:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:41:9:41:11 | by8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:41:5:41:23 | by8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:41:15:41:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:41:15:41:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:41:15:41:23 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:41:21:41:23 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:41:21:41:23 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:42:9:42:11 | by9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:42:5:42:24 | by9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:42:15:42:17 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:42:15:42:17 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:42:15:42:24 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:42:22:42:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:42:22:42:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:43:9:43:12 | by10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:43:5:43:24 | by10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:43:16:43:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:43:16:43:18 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:43:16:43:24 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:43:22:43:24 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:43:22:43:24 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:44:9:44:12 | by11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:44:5:44:25 | by11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:44:16:44:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:44:16:44:18 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:44:16:44:25 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:44:23:44:25 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:44:23:44:25 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | -| exprs.kt:45:9:45:12 | by12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:45:5:45:26 | by12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:45:16:45:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:45:16:45:26 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:45:24:45:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:46:9:46:12 | by13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:46:5:46:26 | by13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:46:16:46:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:46:16:46:26 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:46:24:46:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:47:9:47:12 | by14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:47:5:47:25 | by14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:47:16:47:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:47:16:47:25 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:47:23:47:25 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:48:9:48:12 | by15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:48:5:48:26 | by15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:48:16:48:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:48:16:48:26 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:48:24:48:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:49:9:49:12 | by16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:49:5:49:26 | by16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:49:16:49:18 | byx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:49:16:49:26 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:49:24:49:26 | byy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:51:9:51:10 | s1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:51:5:51:16 | s1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:51:14:51:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:52:9:52:10 | s2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:52:5:52:20 | s2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:52:14:52:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:52:14:52:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:52:19:52:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:53:9:53:10 | s3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:53:5:53:20 | s3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:53:14:53:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:53:14:53:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:53:19:53:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:54:9:54:10 | s4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:54:5:54:20 | s4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:54:14:54:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:54:14:54:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:54:19:54:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:55:9:55:10 | s5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:55:5:55:20 | s5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:55:14:55:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:55:14:55:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:55:19:55:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:56:9:56:10 | s6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:56:5:56:21 | s6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:56:14:56:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:56:14:56:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:56:14:56:21 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:56:20:56:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:56:20:56:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:57:9:57:10 | s7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:57:5:57:21 | s7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:57:14:57:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:57:14:57:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:57:14:57:21 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:57:20:57:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:57:20:57:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:58:9:58:10 | s8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:58:5:58:20 | s8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:58:14:58:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:58:14:58:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:58:14:58:20 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:58:19:58:20 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:58:19:58:20 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:59:9:59:10 | s9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:59:5:59:21 | s9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:59:14:59:15 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:59:14:59:15 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:59:14:59:21 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:59:20:59:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:59:20:59:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:60:9:60:11 | s10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:60:5:60:21 | s10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:60:15:60:16 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:60:15:60:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:60:15:60:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:60:20:60:21 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:60:20:60:21 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:61:9:61:11 | s11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:61:5:61:22 | s11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:61:15:61:16 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:61:15:61:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:61:15:61:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:61:21:61:22 | intValue(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:61:21:61:22 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:62:9:62:11 | s12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:62:5:62:23 | s12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:62:15:62:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:62:15:62:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:62:22:62:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:63:9:63:11 | s13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:63:5:63:23 | s13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:63:15:63:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:63:15:63:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:63:22:63:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:64:9:64:11 | s14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:64:5:64:22 | s14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:64:15:64:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:64:15:64:22 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:64:21:64:22 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:65:9:65:11 | s15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:65:5:65:23 | s15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:65:15:65:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:65:15:65:23 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:65:22:65:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:66:9:66:11 | s16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:66:5:66:23 | s16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:66:15:66:16 | sx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:66:15:66:23 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:66:22:66:23 | sy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:68:9:68:10 | l1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:68:5:68:16 | l1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:68:14:68:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:69:9:69:10 | l2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:69:5:69:20 | l2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:69:14:69:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:69:14:69:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:69:19:69:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:70:9:70:10 | l3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:70:5:70:20 | l3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:70:14:70:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:70:14:70:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:70:19:70:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:71:9:71:10 | l4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:71:5:71:20 | l4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:71:14:71:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:71:14:71:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:71:19:71:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:72:9:72:10 | l5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:72:5:72:20 | l5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:72:14:72:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:72:14:72:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:72:19:72:20 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:73:9:73:10 | l6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:73:5:73:21 | l6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:73:14:73:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:73:14:73:21 | ... << ... | exprs.kt:4:1:142:1 | topLevelMethod | LeftShiftExpr | | exprs.kt:73:21:73:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:74:9:74:10 | l7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:74:5:74:21 | l7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:74:14:74:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:74:14:74:21 | ... >> ... | exprs.kt:4:1:142:1 | topLevelMethod | RightShiftExpr | | exprs.kt:74:21:74:21 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:75:9:75:10 | l8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:75:5:75:22 | l8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:75:14:75:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:75:14:75:22 | ... >>> ... | exprs.kt:4:1:142:1 | topLevelMethod | UnsignedRightShiftExpr | | exprs.kt:75:22:75:22 | y | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:76:9:76:10 | l9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:76:5:76:22 | l9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:76:14:76:15 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:76:14:76:22 | ... & ... | exprs.kt:4:1:142:1 | topLevelMethod | AndBitwiseExpr | | exprs.kt:76:21:76:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:77:9:77:11 | l10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:77:5:77:22 | l10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:77:15:77:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:77:15:77:22 | ... \| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrBitwiseExpr | | exprs.kt:77:21:77:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:78:9:78:11 | l11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:78:5:78:23 | l11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:78:15:78:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:78:15:78:23 | ... ^ ... | exprs.kt:4:1:142:1 | topLevelMethod | XorBitwiseExpr | | exprs.kt:78:22:78:23 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:79:9:79:11 | l12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:79:5:79:22 | l12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:79:15:79:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:79:15:79:22 | ~... | exprs.kt:4:1:142:1 | topLevelMethod | BitNotExpr | -| exprs.kt:80:9:80:11 | l13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:80:5:80:22 | l13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:80:15:80:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:80:15:80:22 | ... (value equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueEQExpr | | exprs.kt:80:21:80:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:81:9:81:11 | l14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:81:5:81:22 | l14 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:81:15:81:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:81:15:81:22 | ... (value not-equals) ... | exprs.kt:4:1:142:1 | topLevelMethod | ValueNEExpr | | exprs.kt:81:21:81:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:82:9:82:11 | l15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:82:5:82:21 | l15 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:82:15:82:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:82:15:82:21 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:82:20:82:21 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:83:9:83:11 | l16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:83:5:83:22 | l16 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:83:15:83:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:83:15:83:22 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:83:21:83:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:84:9:84:11 | l17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:84:5:84:21 | l17 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:84:15:84:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:84:15:84:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:84:20:84:21 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:85:9:85:11 | l18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:85:5:85:22 | l18 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:85:15:85:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:85:15:85:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:85:21:85:22 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:86:9:86:11 | l19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:86:5:86:23 | l19 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:86:15:86:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:86:15:86:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:86:22:86:23 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:87:9:87:11 | l20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:87:5:87:23 | l20 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:87:15:87:16 | lx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:87:15:87:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:87:22:87:23 | ly | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:89:9:89:10 | d1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:89:5:89:16 | d1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:89:14:89:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:90:9:90:10 | d2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:90:5:90:20 | d2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:90:14:90:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:90:14:90:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:90:19:90:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:91:9:91:10 | d3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:91:5:91:20 | d3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:91:14:91:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:91:14:91:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:91:19:91:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:92:9:92:10 | d4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:92:5:92:20 | d4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:92:14:92:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:92:14:92:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:92:19:92:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:93:9:93:10 | d5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:93:5:93:20 | d5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:93:14:93:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:93:14:93:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:93:19:93:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:94:9:94:10 | d6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:94:5:94:21 | d6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:94:14:94:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:94:14:94:21 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:94:20:94:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:95:9:95:10 | d7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:95:5:95:21 | d7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:95:14:95:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:95:14:95:21 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:95:20:95:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:96:9:96:10 | d8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:96:5:96:20 | d8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:96:14:96:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:96:14:96:20 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:96:19:96:20 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:97:9:97:10 | d9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:97:5:97:21 | d9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:97:14:97:15 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:97:14:97:21 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:97:20:97:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:98:9:98:11 | d10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:98:5:98:21 | d10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:98:15:98:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:98:15:98:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:98:20:98:21 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:99:9:99:11 | d11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:99:5:99:22 | d11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:99:15:99:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:99:15:99:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:99:21:99:22 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:100:9:100:11 | d12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:100:5:100:23 | d12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:100:15:100:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:100:15:100:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:100:22:100:23 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:101:9:101:11 | d13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:101:5:101:23 | d13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:101:15:101:16 | dx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:101:15:101:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:101:22:101:23 | dy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:103:9:103:10 | f1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:103:5:103:16 | f1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:103:14:103:16 | 1.0 | exprs.kt:4:1:142:1 | topLevelMethod | DoubleLiteral | -| exprs.kt:104:9:104:10 | f2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:104:5:104:20 | f2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:104:14:104:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:104:14:104:20 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:104:19:104:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:105:9:105:10 | f3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:105:5:105:20 | f3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:105:14:105:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:105:14:105:20 | ... - ... | exprs.kt:4:1:142:1 | topLevelMethod | SubExpr | | exprs.kt:105:19:105:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:106:9:106:10 | f4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:106:5:106:20 | f4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:106:14:106:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:106:14:106:20 | ... / ... | exprs.kt:4:1:142:1 | topLevelMethod | DivExpr | | exprs.kt:106:19:106:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:107:9:107:10 | f5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:107:5:107:20 | f5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:107:14:107:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:107:14:107:20 | ... % ... | exprs.kt:4:1:142:1 | topLevelMethod | RemExpr | | exprs.kt:107:19:107:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:108:9:108:10 | f6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:108:5:108:21 | f6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:108:14:108:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:108:14:108:21 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:108:20:108:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:109:9:109:10 | f7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:109:5:109:21 | f7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:109:14:109:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:109:14:109:21 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:109:20:109:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:110:9:110:10 | f8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:110:5:110:20 | f8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:110:14:110:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:110:14:110:20 | ... < ... | exprs.kt:4:1:142:1 | topLevelMethod | LTExpr | | exprs.kt:110:19:110:20 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:111:9:111:10 | f9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:111:5:111:21 | f9 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:111:14:111:15 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:111:14:111:21 | ... <= ... | exprs.kt:4:1:142:1 | topLevelMethod | LEExpr | | exprs.kt:111:20:111:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:112:9:112:11 | f10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:112:5:112:21 | f10 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:112:15:112:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:112:15:112:21 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | | exprs.kt:112:20:112:21 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:113:9:113:11 | f11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:113:5:113:22 | f11 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:113:15:113:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:113:15:113:22 | ... >= ... | exprs.kt:4:1:142:1 | topLevelMethod | GEExpr | | exprs.kt:113:21:113:22 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:114:9:114:11 | f12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:114:5:114:23 | f12 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:114:15:114:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:114:15:114:23 | ... == ... | exprs.kt:4:1:142:1 | topLevelMethod | EQExpr | | exprs.kt:114:22:114:23 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:115:9:115:11 | f13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:115:5:115:23 | f13 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:115:15:115:16 | fx | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:115:15:115:23 | ... != ... | exprs.kt:4:1:142:1 | topLevelMethod | NEExpr | | exprs.kt:115:22:115:23 | fy | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:117:9:117:10 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:117:5:117:17 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:117:14:117:17 | true | exprs.kt:4:1:142:1 | topLevelMethod | BooleanLiteral | -| exprs.kt:118:9:118:10 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:118:5:118:18 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:118:14:118:18 | false | exprs.kt:4:1:142:1 | topLevelMethod | BooleanLiteral | -| exprs.kt:119:9:119:10 | b3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:119:5:119:21 | b3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:119:14:119:15 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:119:14:119:21 | ... && ... | exprs.kt:4:1:142:1 | topLevelMethod | AndLogicalExpr | | exprs.kt:119:20:119:21 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:120:9:120:10 | b4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:120:5:120:21 | b4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:120:14:120:15 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:120:14:120:21 | ... \|\| ... | exprs.kt:4:1:142:1 | topLevelMethod | OrLogicalExpr | | exprs.kt:120:20:120:21 | b2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:121:9:121:10 | b5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:121:5:121:16 | b5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:121:14:121:16 | !... | exprs.kt:4:1:142:1 | topLevelMethod | LogNotExpr | | exprs.kt:121:15:121:16 | b1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:123:9:123:9 | c | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:123:5:123:15 | c | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:123:13:123:15 | x | exprs.kt:4:1:142:1 | topLevelMethod | CharacterLiteral | -| exprs.kt:124:9:124:11 | str | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:124:16:124:25 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:125:9:125:20 | strWithQuote | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:125:25:125:37 | "string \\" lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:126:9:126:10 | b6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:124:5:124:26 | str | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:124:15:124:26 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:125:5:125:38 | strWithQuote | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:125:24:125:38 | "string \\" lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:126:5:126:22 | b6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:126:14:126:15 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:126:14:126:22 | ...instanceof... | exprs.kt:4:1:142:1 | topLevelMethod | InstanceOfExpr | | exprs.kt:126:14:126:22 | int | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | -| exprs.kt:127:9:127:10 | b7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:127:5:127:23 | b7 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:127:14:127:15 | i1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:127:14:127:23 | ... !is ... | exprs.kt:4:1:142:1 | topLevelMethod | NotInstanceOfExpr | | exprs.kt:127:14:127:23 | int | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | -| exprs.kt:128:9:128:10 | b8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:128:5:128:26 | b8 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:128:14:128:15 | b7 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:128:14:128:26 | (...)... | exprs.kt:4:1:142:1 | topLevelMethod | CastExpr | | exprs.kt:128:14:128:26 | boolean | exprs.kt:4:1:142:1 | topLevelMethod | TypeAccess | -| exprs.kt:129:9:129:12 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:129:25:129:34 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:130:9:130:12 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | -| exprs.kt:130:26:130:35 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:131:9:131:12 | str3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:129:5:129:35 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:129:24:129:35 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:130:5:130:36 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:130:25:130:36 | "string lit" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | +| exprs.kt:131:5:131:28 | str3 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:131:25:131:28 | null | exprs.kt:4:1:142:1 | topLevelMethod | NullLiteral | -| exprs.kt:132:9:132:12 | str4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:132:5:132:48 | str4 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:132:24:132:48 | "..." | exprs.kt:4:1:142:1 | topLevelMethod | StringTemplateExpr | | exprs.kt:132:25:132:28 | "foo " | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | | exprs.kt:132:30:132:33 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:132:34:132:38 | " bar " | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | | exprs.kt:132:40:132:43 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:132:44:132:47 | " baz" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:133:9:133:12 | str5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:133:5:133:66 | str5 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:133:24:133:66 | "..." | exprs.kt:4:1:142:1 | topLevelMethod | StringTemplateExpr | | exprs.kt:133:25:133:28 | "foo " | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | | exprs.kt:133:31:133:34 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | @@ -1381,11 +1369,11 @@ | exprs.kt:133:50:133:60 | stringPlus(...) | exprs.kt:4:1:142:1 | topLevelMethod | MethodCall | | exprs.kt:133:57:133:60 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:133:62:133:65 | " baz" | exprs.kt:4:1:142:1 | topLevelMethod | StringLiteral | -| exprs.kt:134:9:134:12 | str6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:134:5:134:26 | str6 | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:134:16:134:19 | str1 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:134:16:134:26 | ... + ... | exprs.kt:4:1:142:1 | topLevelMethod | AddExpr | | exprs.kt:134:23:134:26 | str2 | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | -| exprs.kt:136:9:136:16 | variable | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | +| exprs.kt:136:5:136:21 | variable | exprs.kt:4:1:142:1 | topLevelMethod | LocalVariableDeclExpr | | exprs.kt:136:20:136:21 | 10 | exprs.kt:4:1:142:1 | topLevelMethod | IntegerLiteral | | exprs.kt:137:12:137:19 | variable | exprs.kt:4:1:142:1 | topLevelMethod | VarAccess | | exprs.kt:137:12:137:23 | ... > ... | exprs.kt:4:1:142:1 | topLevelMethod | GTExpr | @@ -1407,12 +1395,12 @@ | exprs.kt:145:9:145:9 | d | exprs.kt:144:1:146:1 | getClass | LocalVariableDeclExpr | | exprs.kt:145:13:145:16 | true | exprs.kt:144:1:146:1 | getClass | BooleanLiteral | | exprs.kt:145:13:145:23 | ::class | exprs.kt:144:1:146:1 | getClass | ClassExpr | -| exprs.kt:148:9:148:18 | ...=... | exprs.kt:148:1:150:1 | C | KtInitializerAssignExpr | +| exprs.kt:148:9:148:18 | ...=... | exprs.kt:148:8:148:19 | C | KtInitializerAssignExpr | | exprs.kt:148:9:148:18 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:148:9:148:18 | int | file://:0:0:0:0 | | TypeAccess | | exprs.kt:148:9:148:18 | int | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:148:9:148:18 | n | exprs.kt:148:1:150:1 | C | VarAccess | -| exprs.kt:148:9:148:18 | n | exprs.kt:148:1:150:1 | C | VarAccess | +| exprs.kt:148:9:148:18 | n | exprs.kt:148:8:148:19 | C | VarAccess | +| exprs.kt:148:9:148:18 | n | exprs.kt:148:8:148:19 | C | VarAccess | | exprs.kt:148:9:148:18 | this | exprs.kt:148:9:148:18 | getN | ThisAccess | | exprs.kt:148:9:148:18 | this.n | exprs.kt:148:9:148:18 | getN | VarAccess | | exprs.kt:149:5:149:33 | C | file://:0:0:0:0 | | TypeAccess | @@ -1474,11 +1462,17 @@ | exprs.kt:170:9:170:17 | r2.height | exprs.kt:165:1:172:1 | foo | VarAccess | | exprs.kt:170:9:170:21 | ...=... | exprs.kt:165:1:172:1 | foo | AssignExpr | | exprs.kt:170:21:170:21 | 3 | exprs.kt:165:1:172:1 | foo | IntegerLiteral | -| exprs.kt:174:1:176:1 | 0 | exprs.kt:174:6:176:1 | Direction | IntegerLiteral | -| exprs.kt:174:1:176:1 | Direction | exprs.kt:174:6:176:1 | Direction | TypeAccess | -| exprs.kt:174:1:176:1 | Enum | exprs.kt:174:6:176:1 | Direction | TypeAccess | -| exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:6:176:1 | Direction | ClassInstanceExpr | -| exprs.kt:174:1:176:1 | null | exprs.kt:174:6:176:1 | Direction | NullLiteral | +| exprs.kt:174:1:176:1 | 0 | exprs.kt:174:1:176:1 | Direction | IntegerLiteral | +| exprs.kt:174:1:176:1 | Direction | exprs.kt:174:1:176:1 | Direction | TypeAccess | +| exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | Direction | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | Direction[] | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | Enum | exprs.kt:174:1:176:1 | Direction | TypeAccess | +| exprs.kt:174:1:176:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | String | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:1:176:1 | Direction | ClassInstanceExpr | +| exprs.kt:174:1:176:1 | null | exprs.kt:174:1:176:1 | Direction | NullLiteral | | exprs.kt:175:5:175:10 | ...=... | exprs.kt:0:0:0:0 | | KtInitializerAssignExpr | | exprs.kt:175:5:175:10 | Direction | exprs.kt:0:0:0:0 | | TypeAccess | | exprs.kt:175:5:175:10 | Direction | exprs.kt:0:0:0:0 | | TypeAccess | @@ -1505,7 +1499,13 @@ | exprs.kt:175:25:175:28 | new Direction(...) | exprs.kt:0:0:0:0 | | ClassInstanceExpr | | exprs.kt:178:1:182:1 | 0 | exprs.kt:178:6:182:1 | Color | IntegerLiteral | | exprs.kt:178:1:182:1 | Color | exprs.kt:178:6:182:1 | Color | TypeAccess | +| exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | Color | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | Color[] | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | Enum | exprs.kt:178:6:182:1 | Color | TypeAccess | +| exprs.kt:178:1:182:1 | EnumEntries | file://:0:0:0:0 | | TypeAccess | +| exprs.kt:178:1:182:1 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:178:1:182:1 | new Enum(...) | exprs.kt:178:6:182:1 | Color | ClassInstanceExpr | | exprs.kt:178:1:182:1 | null | exprs.kt:178:6:182:1 | Color | NullLiteral | | exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:6:182:1 | Color | KtInitializerAssignExpr | @@ -1626,83 +1626,83 @@ | exprs.kt:229:42:229:64 | Integer | file://:0:0:0:0 | | TypeAccess | | exprs.kt:229:67:229:88 | String | file://:0:0:0:0 | | TypeAccess | | exprs.kt:229:91:229:114 | String | file://:0:0:0:0 | | TypeAccess | -| exprs.kt:230:7:230:8 | b1 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:230:3:230:47 | b1 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:230:12:230:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:230:12:230:47 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:230:32:230:47 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:231:7:231:8 | b2 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:231:3:231:48 | b2 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:231:12:231:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:231:12:231:48 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:231:32:231:48 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:232:7:232:8 | b3 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:232:3:232:49 | b3 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:232:12:232:28 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:232:12:232:49 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:232:33:232:49 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:233:7:233:8 | b4 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:233:3:233:43 | b4 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:233:12:233:25 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:233:12:233:43 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:233:30:233:43 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:234:7:234:8 | b5 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:234:3:234:44 | b5 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:234:12:234:25 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:234:12:234:44 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:234:30:234:44 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:235:7:235:8 | b6 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:235:3:235:45 | b6 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:235:12:235:26 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:235:12:235:45 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:235:31:235:45 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:236:7:236:8 | b7 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:236:3:236:47 | b7 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:236:12:236:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:236:12:236:47 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:236:32:236:47 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:237:7:237:8 | b8 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:237:3:237:48 | b8 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:237:12:237:27 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:237:12:237:48 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:237:32:237:48 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:238:7:238:8 | b9 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:238:3:238:49 | b9 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:238:12:238:28 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:238:12:238:49 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:238:33:238:49 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:239:7:239:9 | b10 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:239:3:239:44 | b10 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:239:13:239:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:239:13:239:44 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:239:31:239:44 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:240:7:240:9 | b11 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:240:3:240:45 | b11 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:240:13:240:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:240:13:240:45 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:240:31:240:45 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:241:7:241:9 | b12 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:241:3:241:46 | b12 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:241:13:241:27 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:241:13:241:46 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:241:32:241:46 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | -| exprs.kt:242:7:242:9 | b13 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:242:3:242:36 | b13 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:242:13:242:28 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:242:13:242:36 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:242:33:242:36 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:243:7:243:9 | b14 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:243:3:243:37 | b14 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:243:13:243:29 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:243:13:243:37 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:243:34:243:37 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:244:7:244:9 | b15 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:244:3:244:34 | b15 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:244:13:244:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:244:13:244:34 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:244:31:244:34 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:245:7:245:9 | b16 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:245:3:245:35 | b16 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:245:13:245:27 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:245:13:245:35 | ... (value equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueEQExpr | | exprs.kt:245:32:245:35 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:246:7:246:9 | b17 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:246:3:246:36 | b17 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:246:13:246:28 | notNullPrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:246:13:246:36 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:246:33:246:36 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:247:7:247:9 | b18 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:247:3:247:37 | b18 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:247:13:247:29 | nullablePrimitive | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:247:13:247:37 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:247:34:247:37 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:248:7:248:9 | b19 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:248:3:248:34 | b19 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:248:13:248:26 | notNullReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:248:13:248:34 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:248:31:248:34 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | -| exprs.kt:249:7:249:9 | b20 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | +| exprs.kt:249:3:249:35 | b20 | exprs.kt:229:1:250:1 | equalityTests | LocalVariableDeclExpr | | exprs.kt:249:13:249:27 | nullableReftype | exprs.kt:229:1:250:1 | equalityTests | VarAccess | | exprs.kt:249:13:249:35 | ... (value not-equals) ... | exprs.kt:229:1:250:1 | equalityTests | ValueNEExpr | | exprs.kt:249:32:249:35 | null | exprs.kt:229:1:250:1 | equalityTests | NullLiteral | @@ -3170,9 +3170,9 @@ | funcExprs.kt:51:8:51:16 | FuncRef | funcExprs.kt:51:8:51:16 | invoke | TypeAccess | | funcExprs.kt:51:8:51:16 | Function0 | funcExprs.kt:21:1:52:1 | call | TypeAccess | | funcExprs.kt:51:8:51:16 | new FuncRef(...) | funcExprs.kt:51:8:51:16 | invoke | ClassInstanceExpr | -| funcExprs.kt:55:23:55:49 | int | file://:0:0:0:0 | | TypeAccess | +| funcExprs.kt:55:5:55:49 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:55:34:55:39 | int | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:55:49:55:49 | 5 | funcExprs.kt:55:23:55:49 | invoke | IntegerLiteral | +| funcExprs.kt:55:49:55:49 | 5 | funcExprs.kt:55:5:55:49 | invoke | IntegerLiteral | | funcExprs.kt:58:1:58:25 | Unit | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:58:12:58:21 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | funcExprs.kt:58:12:58:21 | Function0 | file://:0:0:0:0 | | TypeAccess | @@ -3249,44 +3249,44 @@ | funcExprs.kt:75:14:75:14 | Generic> | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:75:14:75:14 | Generic | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:75:14:75:14 | Integer | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:75:20:75:20 | "a" | funcExprs.kt:75:12:75:22 | invoke | StringLiteral | -| funcExprs.kt:77:13:77:60 | Unit | file://:0:0:0:0 | | TypeAccess | +| funcExprs.kt:75:19:75:21 | "a" | funcExprs.kt:75:12:75:22 | invoke | StringLiteral | +| funcExprs.kt:77:5:77:60 | Unit | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | ? ... | file://:0:0:0:0 | | WildcardTypeAccess | | funcExprs.kt:77:20:77:55 | Function1>,String> | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | Generic> | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | Generic | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | Integer | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:77:20:77:55 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:82:9:96:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:83:9:83:10 | l1 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | -| funcExprs.kt:83:31:83:51 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | -| funcExprs.kt:83:31:83:51 | Function1 | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:83:31:83:51 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:82:1:96:1 | Unit | file://:0:0:0:0 | | TypeAccess | +| funcExprs.kt:83:5:83:51 | l1 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:83:31:83:51 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | +| funcExprs.kt:83:31:83:51 | Function1 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:83:31:83:51 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:83:31:83:51 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:83:31:83:51 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:83:31:83:51 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:83:33:83:33 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:83:38:83:38 | i | funcExprs.kt:83:31:83:51 | invoke | VarAccess | | funcExprs.kt:83:38:83:49 | toString(...) | funcExprs.kt:83:31:83:51 | invoke | MethodCall | -| funcExprs.kt:84:5:84:6 | l1 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:84:5:84:16 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:84:8:84:16 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:84:8:84:16 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:84:15:84:15 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:86:9:86:10 | l2 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | -| funcExprs.kt:86:39:86:59 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | -| funcExprs.kt:86:39:86:59 | Function1 | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:86:39:86:59 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:84:5:84:6 | l1 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:84:5:84:16 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:84:8:84:16 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:84:8:84:16 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:84:15:84:15 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:86:5:86:59 | l2 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:86:39:86:59 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | +| funcExprs.kt:86:39:86:59 | Function1 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:86:39:86:59 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:86:39:86:59 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:86:39:86:59 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:86:39:86:59 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:86:41:86:41 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:86:46:86:46 | i | funcExprs.kt:86:39:86:59 | invoke | VarAccess | | funcExprs.kt:86:46:86:57 | toString(...) | funcExprs.kt:86:39:86:59 | invoke | MethodCall | -| funcExprs.kt:87:5:87:6 | l2 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:87:5:87:16 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:87:8:87:16 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:87:8:87:16 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:87:15:87:15 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:89:9:89:10 | l3 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:87:5:87:6 | l2 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:87:5:87:16 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:87:8:87:16 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:87:8:87:16 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:87:15:87:15 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:89:5:90:69 | l3 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | | funcExprs.kt:90:15:90:69 | 0 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | | funcExprs.kt:90:15:90:69 | 1 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | | funcExprs.kt:90:15:90:69 | 2 | funcExprs.kt:90:15:90:69 | invoke | IntegerLiteral | @@ -3333,7 +3333,7 @@ | funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr | | funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr | | funcExprs.kt:90:15:90:69 | (...)... | funcExprs.kt:90:15:90:69 | invoke | CastExpr | -| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | +| funcExprs.kt:90:15:90:69 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | @@ -3357,9 +3357,9 @@ | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | | funcExprs.kt:90:15:90:69 | ...[...] | funcExprs.kt:90:15:90:69 | invoke | ArrayAccess | -| funcExprs.kt:90:15:90:69 | FunctionN | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:90:15:90:69 | FunctionN | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:90:15:90:69 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:90:15:90:69 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:90:15:90:69 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess | | funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess | | funcExprs.kt:90:15:90:69 | a0 | funcExprs.kt:90:15:90:69 | invoke | VarAccess | @@ -3432,64 +3432,64 @@ | funcExprs.kt:90:59:90:59 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:90:61:90:61 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:90:67:90:68 | "" | funcExprs.kt:90:15:90:69 | invoke | StringLiteral | -| funcExprs.kt:91:5:91:6 | l3 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:91:5:91:60 | 23 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:5:91:60 | Object | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:91:5:91:60 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:91:5:91:60 | new Object[] | funcExprs.kt:82:9:96:1 | fn | ArrayCreationExpr | -| funcExprs.kt:91:5:91:60 | {...} | funcExprs.kt:82:9:96:1 | fn | ArrayInit | -| funcExprs.kt:91:8:91:60 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:91:8:91:60 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:91:15:91:15 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:17:91:17 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:19:91:19 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:21:91:21 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:23:91:23 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:25:91:25 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:27:91:27 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:29:91:29 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:31:91:31 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:33:91:33 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:35:91:35 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:37:91:37 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:39:91:39 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:41:91:41 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:43:91:43 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:45:91:45 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:47:91:47 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:49:91:49 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:51:91:51 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:53:91:53 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:55:91:55 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:57:91:57 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:91:59:91:59 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:93:9:93:10 | l4 | funcExprs.kt:82:9:96:1 | fn | LocalVariableDeclExpr | -| funcExprs.kt:94:15:94:67 | ...->... | funcExprs.kt:82:9:96:1 | fn | LambdaExpr | -| funcExprs.kt:94:15:94:67 | Function22 | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:91:5:91:6 | l3 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:91:5:91:60 | 23 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:5:91:60 | Object | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:91:5:91:60 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:91:5:91:60 | new Object[] | funcExprs.kt:82:1:96:1 | fn | ArrayCreationExpr | +| funcExprs.kt:91:5:91:60 | {...} | funcExprs.kt:82:1:96:1 | fn | ArrayInit | +| funcExprs.kt:91:8:91:60 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:91:8:91:60 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:91:15:91:15 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:17:91:17 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:19:91:19 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:21:91:21 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:23:91:23 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:25:91:25 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:27:91:27 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:29:91:29 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:31:91:31 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:33:91:33 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:35:91:35 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:37:91:37 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:39:91:39 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:41:91:41 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:43:91:43 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:45:91:45 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:47:91:47 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:49:91:49 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:51:91:51 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:53:91:53 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:55:91:55 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:57:91:57 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:91:59:91:59 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:93:5:94:67 | l4 | funcExprs.kt:82:1:96:1 | fn | LocalVariableDeclExpr | +| funcExprs.kt:94:15:94:67 | ...->... | funcExprs.kt:82:1:96:1 | fn | LambdaExpr | +| funcExprs.kt:94:15:94:67 | Function22 | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | Integer | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:94:15:94:67 | String | file://:0:0:0:0 | | TypeAccess | -| funcExprs.kt:94:15:94:67 | String | funcExprs.kt:82:9:96:1 | fn | TypeAccess | +| funcExprs.kt:94:15:94:67 | String | funcExprs.kt:82:1:96:1 | fn | TypeAccess | | funcExprs.kt:94:17:94:17 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:19:94:19 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:21:94:21 | int | file://:0:0:0:0 | | TypeAccess | @@ -3513,38 +3513,38 @@ | funcExprs.kt:94:57:94:57 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:59:94:59 | int | file://:0:0:0:0 | | TypeAccess | | funcExprs.kt:94:65:94:66 | "" | funcExprs.kt:94:15:94:67 | invoke | StringLiteral | -| funcExprs.kt:95:5:95:6 | l4 | funcExprs.kt:82:9:96:1 | fn | VarAccess | -| funcExprs.kt:95:5:95:58 | invoke(...) | funcExprs.kt:82:9:96:1 | fn | MethodCall | -| funcExprs.kt:95:8:95:58 | | funcExprs.kt:82:9:96:1 | fn | ImplicitCoercionToUnitExpr | -| funcExprs.kt:95:8:95:58 | Unit | funcExprs.kt:82:9:96:1 | fn | TypeAccess | -| funcExprs.kt:95:15:95:15 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:17:95:17 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:19:95:19 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:21:95:21 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:23:95:23 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:25:95:25 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:27:95:27 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:29:95:29 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:31:95:31 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:33:95:33 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:35:95:35 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:37:95:37 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:39:95:39 | 3 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:41:95:41 | 4 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:43:95:43 | 5 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:45:95:45 | 6 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:47:95:47 | 7 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:49:95:49 | 8 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:51:95:51 | 9 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:53:95:53 | 0 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:55:95:55 | 1 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | -| funcExprs.kt:95:57:95:57 | 2 | funcExprs.kt:82:9:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:5:95:6 | l4 | funcExprs.kt:82:1:96:1 | fn | VarAccess | +| funcExprs.kt:95:5:95:58 | invoke(...) | funcExprs.kt:82:1:96:1 | fn | MethodCall | +| funcExprs.kt:95:8:95:58 | | funcExprs.kt:82:1:96:1 | fn | ImplicitCoercionToUnitExpr | +| funcExprs.kt:95:8:95:58 | Unit | funcExprs.kt:82:1:96:1 | fn | TypeAccess | +| funcExprs.kt:95:15:95:15 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:17:95:17 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:19:95:19 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:21:95:21 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:23:95:23 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:25:95:25 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:27:95:27 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:29:95:29 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:31:95:31 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:33:95:33 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:35:95:35 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:37:95:37 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:39:95:39 | 3 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:41:95:41 | 4 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:43:95:43 | 5 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:45:95:45 | 6 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:47:95:47 | 7 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:49:95:49 | 8 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:51:95:51 | 9 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:53:95:53 | 0 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:55:95:55 | 1 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | +| funcExprs.kt:95:57:95:57 | 2 | funcExprs.kt:82:1:96:1 | fn | IntegerLiteral | | kFunctionInvoke.kt:4:5:4:24 | Unit | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:4:11:4:19 | String | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:7:1:10:1 | Unit | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:7:12:7:15 | A | file://:0:0:0:0 | | TypeAccess | | kFunctionInvoke.kt:7:18:7:26 | String | file://:0:0:0:0 | | TypeAccess | -| kFunctionInvoke.kt:8:9:8:14 | toCall | kFunctionInvoke.kt:7:1:10:1 | useRef | LocalVariableDeclExpr | +| kFunctionInvoke.kt:8:5:8:47 | toCall | kFunctionInvoke.kt:7:1:10:1 | useRef | LocalVariableDeclExpr | | kFunctionInvoke.kt:8:44:8:44 | a | kFunctionInvoke.kt:7:1:10:1 | useRef | VarAccess | | kFunctionInvoke.kt:8:44:8:47 | 1 | kFunctionInvoke.kt:8:44:8:47 | | IntegerLiteral | | kFunctionInvoke.kt:8:44:8:47 | ...::... | kFunctionInvoke.kt:7:1:10:1 | useRef | MemberRefExpr | @@ -3564,15 +3564,15 @@ | kFunctionInvoke.kt:9:5:9:13 | invoke(...) | kFunctionInvoke.kt:7:1:10:1 | useRef | MethodCall | | kFunctionInvoke.kt:9:12:9:12 | s | kFunctionInvoke.kt:7:1:10:1 | useRef | VarAccess | | localFunctionCalls.kt:3:1:12:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| localFunctionCalls.kt:4:9:4:9 | x | localFunctionCalls.kt:3:1:12:1 | x | LocalVariableDeclExpr | +| localFunctionCalls.kt:4:5:4:13 | x | localFunctionCalls.kt:3:1:12:1 | x | LocalVariableDeclExpr | | localFunctionCalls.kt:4:13:4:13 | 5 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | localFunctionCalls.kt:5:5:5:29 | int | file://:0:0:0:0 | | TypeAccess | | localFunctionCalls.kt:5:15:5:20 | int | file://:0:0:0:0 | | TypeAccess | | localFunctionCalls.kt:5:25:5:25 | i | localFunctionCalls.kt:5:5:5:29 | a | VarAccess | | localFunctionCalls.kt:5:25:5:29 | ... + ... | localFunctionCalls.kt:5:5:5:29 | a | AddExpr | | localFunctionCalls.kt:5:29:5:29 | x | localFunctionCalls.kt:5:5:5:29 | a | VarAccess | -| localFunctionCalls.kt:6:5:6:5 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:6:5:6:9 | ...=... | localFunctionCalls.kt:3:1:12:1 | x | AssignExpr | +| localFunctionCalls.kt:6:5:6:9 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:6:9:6:9 | 6 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | localFunctionCalls.kt:7:5:7:17 | | localFunctionCalls.kt:3:1:12:1 | x | ImplicitCoercionToUnitExpr | | localFunctionCalls.kt:7:5:7:17 | Object | localFunctionCalls.kt:3:1:12:1 | x | TypeAccess | @@ -3581,8 +3581,8 @@ | localFunctionCalls.kt:7:5:7:17 | a(...) | localFunctionCalls.kt:3:1:12:1 | x | MethodCall | | localFunctionCalls.kt:7:5:7:17 | new (...) | localFunctionCalls.kt:3:1:12:1 | x | ClassInstanceExpr | | localFunctionCalls.kt:7:15:7:16 | 42 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | -| localFunctionCalls.kt:8:5:8:5 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:8:5:8:9 | ...=... | localFunctionCalls.kt:3:1:12:1 | x | AssignExpr | +| localFunctionCalls.kt:8:5:8:9 | x | localFunctionCalls.kt:3:1:12:1 | x | VarAccess | | localFunctionCalls.kt:8:9:8:9 | 7 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | localFunctionCalls.kt:9:5:9:34 | int | file://:0:0:0:0 | | TypeAccess | | localFunctionCalls.kt:9:14:9:19 | C1 | file://:0:0:0:0 | | TypeAccess | @@ -3611,7 +3611,7 @@ | localFunctionCalls.kt:11:18:11:19 | 42 | localFunctionCalls.kt:3:1:12:1 | x | IntegerLiteral | | samConversion.kt:1:1:14:1 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:1:10:1:19 | boolean | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:2:9:2:14 | isEven | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:2:5:2:45 | isEven | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:2:18:2:45 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:2:18:2:45 | ...=... | samConversion.kt:2:18:2:45 | | AssignExpr | | samConversion.kt:2:18:2:45 | | samConversion.kt:2:18:2:45 | | VarAccess | @@ -3639,7 +3639,7 @@ | samConversion.kt:2:33:2:43 | ... (value equals) ... | samConversion.kt:2:31:2:45 | invoke | ValueEQExpr | | samConversion.kt:2:38:2:38 | 2 | samConversion.kt:2:31:2:45 | invoke | IntegerLiteral | | samConversion.kt:2:43:2:43 | 0 | samConversion.kt:2:31:2:45 | invoke | IntegerLiteral | -| samConversion.kt:4:9:4:10 | i0 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:4:5:4:42 | i0 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:4:14:4:42 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:4:14:4:42 | ...=... | samConversion.kt:4:14:4:42 | | AssignExpr | | samConversion.kt:4:14:4:42 | | samConversion.kt:4:14:4:42 | | VarAccess | @@ -3668,7 +3668,7 @@ | samConversion.kt:4:29:4:29 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:4:32:4:32 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:4:37:4:40 | INSTANCE | samConversion.kt:4:27:4:42 | invoke | VarAccess | -| samConversion.kt:5:9:5:10 | i1 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:5:5:5:32 | i1 | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:5:14:5:32 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:5:14:5:32 | ...=... | samConversion.kt:5:14:5:32 | | AssignExpr | | samConversion.kt:5:14:5:32 | | samConversion.kt:5:14:5:32 | | VarAccess | @@ -3698,7 +3698,7 @@ | samConversion.kt:5:27:5:31 | a0 | samConversion.kt:5:27:5:31 | invoke | VarAccess | | samConversion.kt:5:27:5:31 | a1 | samConversion.kt:5:27:5:31 | invoke | VarAccess | | samConversion.kt:5:27:5:31 | fn2(...) | samConversion.kt:5:27:5:31 | invoke | MethodCall | -| samConversion.kt:7:9:7:9 | i | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:7:5:7:46 | i | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:7:13:7:46 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:7:13:7:46 | ...=... | samConversion.kt:7:13:7:46 | | AssignExpr | | samConversion.kt:7:13:7:46 | | samConversion.kt:7:13:7:46 | | VarAccess | @@ -3729,7 +3729,7 @@ | samConversion.kt:7:36:7:39 | this | samConversion.kt:7:29:7:46 | invoke | ExtensionReceiverAccess | | samConversion.kt:7:36:7:45 | ... (value equals) ... | samConversion.kt:7:29:7:46 | invoke | ValueEQExpr | | samConversion.kt:7:44:7:45 | "" | samConversion.kt:7:29:7:46 | invoke | StringLiteral | -| samConversion.kt:9:9:9:9 | x | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | +| samConversion.kt:9:5:13:6 | x | samConversion.kt:1:1:14:1 | main | LocalVariableDeclExpr | | samConversion.kt:9:13:13:6 | (...)... | samConversion.kt:1:1:14:1 | main | CastExpr | | samConversion.kt:9:13:13:6 | ...=... | samConversion.kt:9:13:13:6 | | AssignExpr | | samConversion.kt:9:13:13:6 | | samConversion.kt:9:13:13:6 | | VarAccess | @@ -3746,7 +3746,6 @@ | samConversion.kt:9:13:13:6 | new (...) | samConversion.kt:1:1:14:1 | main | ClassInstanceExpr | | samConversion.kt:9:13:13:6 | this | samConversion.kt:9:13:13:6 | | ThisAccess | | samConversion.kt:9:13:13:6 | this. | samConversion.kt:9:13:13:6 | | VarAccess | -| samConversion.kt:9:26:13:5 | true | samConversion.kt:1:1:14:1 | main | BooleanLiteral | | samConversion.kt:9:26:13:5 | when ... | samConversion.kt:1:1:14:1 | main | WhenExpr | | samConversion.kt:9:30:9:30 | b | samConversion.kt:1:1:14:1 | main | VarAccess | | samConversion.kt:9:33:11:5 | ...->... | samConversion.kt:1:1:14:1 | main | LambdaExpr | @@ -3765,6 +3764,7 @@ | samConversion.kt:11:12:13:5 | Function1 | samConversion.kt:1:1:14:1 | main | TypeAccess | | samConversion.kt:11:12:13:5 | Integer | samConversion.kt:1:1:14:1 | main | TypeAccess | | samConversion.kt:11:12:13:5 | boolean | file://:0:0:0:0 | | TypeAccess | +| samConversion.kt:11:12:13:5 | true | samConversion.kt:1:1:14:1 | main | BooleanLiteral | | samConversion.kt:12:13:12:13 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:12:18:12:18 | j | samConversion.kt:11:12:13:5 | invoke | VarAccess | | samConversion.kt:12:18:12:22 | ... % ... | samConversion.kt:11:12:13:5 | invoke | RemExpr | @@ -3833,7 +3833,7 @@ | samConversion.kt:38:49:38:52 | true | samConversion.kt:36:1:38:52 | ff | BooleanLiteral | | samConversion.kt:40:1:47:1 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:40:8:40:19 | boolean | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:41:9:41:9 | a | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:41:5:41:16 | a | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:41:13:41:16 | 0 | samConversion.kt:41:13:41:16 | invoke | IntegerLiteral | | samConversion.kt:41:13:41:16 | 1 | samConversion.kt:41:13:41:16 | invoke | IntegerLiteral | | samConversion.kt:41:13:41:16 | 2 | samConversion.kt:41:13:41:16 | invoke | IntegerLiteral | @@ -3955,7 +3955,7 @@ | samConversion.kt:41:13:41:16 | int | samConversion.kt:41:13:41:16 | invoke | TypeAccess | | samConversion.kt:41:13:41:16 | int | samConversion.kt:41:13:41:16 | invoke | TypeAccess | | samConversion.kt:41:13:41:16 | int | samConversion.kt:41:13:41:16 | invoke | TypeAccess | -| samConversion.kt:42:9:42:9 | b | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:42:5:42:32 | b | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:42:13:42:32 | 23 | samConversion.kt:42:13:42:32 | accept | IntegerLiteral | | samConversion.kt:42:13:42:32 | (...)... | samConversion.kt:40:1:47:1 | fn | CastExpr | | samConversion.kt:42:13:42:32 | ...=... | samConversion.kt:42:13:42:32 | | AssignExpr | @@ -4020,7 +4020,7 @@ | samConversion.kt:42:13:42:32 | this. | samConversion.kt:42:13:42:32 | | VarAccess | | samConversion.kt:42:13:42:32 | {...} | samConversion.kt:42:13:42:32 | accept | ArrayInit | | samConversion.kt:42:31:42:31 | a | samConversion.kt:40:1:47:1 | fn | VarAccess | -| samConversion.kt:43:9:43:9 | c | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:43:5:45:68 | c | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:43:13:45:68 | 23 | samConversion.kt:43:13:45:68 | accept | IntegerLiteral | | samConversion.kt:43:13:45:68 | (...)... | samConversion.kt:40:1:47:1 | fn | CastExpr | | samConversion.kt:43:13:45:68 | ...=... | samConversion.kt:43:13:45:68 | | AssignExpr | @@ -4229,7 +4229,7 @@ | samConversion.kt:45:42:45:49 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:45:52:45:59 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:45:64:45:67 | true | samConversion.kt:43:31:45:68 | invoke | BooleanLiteral | -| samConversion.kt:46:9:46:9 | d | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | +| samConversion.kt:46:5:46:44 | d | samConversion.kt:40:1:47:1 | fn | LocalVariableDeclExpr | | samConversion.kt:46:13:46:44 | (...)... | samConversion.kt:40:1:47:1 | fn | CastExpr | | samConversion.kt:46:13:46:44 | ...=... | samConversion.kt:46:13:46:44 | | AssignExpr | | samConversion.kt:46:13:46:44 | | samConversion.kt:46:13:46:44 | | VarAccess | @@ -4257,20 +4257,20 @@ | samConversion.kt:46:39:46:42 | true | samConversion.kt:46:32:46:44 | invoke | BooleanLiteral | | samConversion.kt:50:5:50:25 | boolean | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:50:12:50:15 | T | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:54:13:54:35 | Unit | file://:0:0:0:0 | | TypeAccess | +| samConversion.kt:54:5:54:35 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:54:21:54:26 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:54:29:54:34 | int | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:57:9:60:1 | Unit | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:58:9:58:10 | i0 | samConversion.kt:57:9:60:1 | test | LocalVariableDeclExpr | -| samConversion.kt:58:14:58:45 | (...)... | samConversion.kt:57:9:60:1 | test | CastExpr | +| samConversion.kt:57:1:60:1 | Unit | file://:0:0:0:0 | | TypeAccess | +| samConversion.kt:58:5:58:45 | i0 | samConversion.kt:57:1:60:1 | test | LocalVariableDeclExpr | +| samConversion.kt:58:14:58:45 | (...)... | samConversion.kt:57:1:60:1 | test | CastExpr | | samConversion.kt:58:14:58:45 | ...=... | samConversion.kt:58:14:58:45 | | AssignExpr | | samConversion.kt:58:14:58:45 | | samConversion.kt:58:14:58:45 | | VarAccess | | samConversion.kt:58:14:58:45 | | samConversion.kt:58:14:58:45 | fn1 | VarAccess | | samConversion.kt:58:14:58:45 | Function2 | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | Integer | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | Integer | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:9:60:1 | test | TypeAccess | -| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:9:60:1 | test | TypeAccess | +| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:1:60:1 | test | TypeAccess | +| samConversion.kt:58:14:58:45 | InterfaceFn1Sus | samConversion.kt:57:1:60:1 | test | TypeAccess | | samConversion.kt:58:14:58:45 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | i | samConversion.kt:58:14:58:45 | fn1 | VarAccess | @@ -4278,22 +4278,22 @@ | samConversion.kt:58:14:58:45 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:14:58:45 | invoke(...) | samConversion.kt:58:14:58:45 | fn1 | MethodCall | | samConversion.kt:58:14:58:45 | j | samConversion.kt:58:14:58:45 | fn1 | VarAccess | -| samConversion.kt:58:14:58:45 | new (...) | samConversion.kt:57:9:60:1 | test | ClassInstanceExpr | +| samConversion.kt:58:14:58:45 | new (...) | samConversion.kt:57:1:60:1 | test | ClassInstanceExpr | | samConversion.kt:58:14:58:45 | this | samConversion.kt:58:14:58:45 | | ThisAccess | | samConversion.kt:58:14:58:45 | this. | samConversion.kt:58:14:58:45 | | VarAccess | -| samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:57:9:60:1 | test | LambdaExpr | -| samConversion.kt:58:30:58:45 | Function2 | samConversion.kt:57:9:60:1 | test | TypeAccess | -| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:9:60:1 | test | TypeAccess | -| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:9:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:57:1:60:1 | test | LambdaExpr | +| samConversion.kt:58:30:58:45 | Function2 | samConversion.kt:57:1:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:1:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | Integer | samConversion.kt:57:1:60:1 | test | TypeAccess | | samConversion.kt:58:30:58:45 | Unit | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:58:30:58:45 | Unit | samConversion.kt:57:9:60:1 | test | TypeAccess | +| samConversion.kt:58:30:58:45 | Unit | samConversion.kt:57:1:60:1 | test | TypeAccess | | samConversion.kt:58:32:58:32 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:35:58:35 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:58:40:58:43 | INSTANCE | samConversion.kt:58:30:58:45 | invoke | VarAccess | -| samConversion.kt:59:5:59:6 | i0 | samConversion.kt:57:9:60:1 | test | VarAccess | -| samConversion.kt:59:5:59:15 | fn1(...) | samConversion.kt:57:9:60:1 | test | MethodCall | -| samConversion.kt:59:12:59:12 | 1 | samConversion.kt:57:9:60:1 | test | IntegerLiteral | -| samConversion.kt:59:14:59:14 | 2 | samConversion.kt:57:9:60:1 | test | IntegerLiteral | +| samConversion.kt:59:5:59:6 | i0 | samConversion.kt:57:1:60:1 | test | VarAccess | +| samConversion.kt:59:5:59:15 | fn1(...) | samConversion.kt:57:1:60:1 | test | MethodCall | +| samConversion.kt:59:12:59:12 | 1 | samConversion.kt:57:1:60:1 | test | IntegerLiteral | +| samConversion.kt:59:14:59:14 | 2 | samConversion.kt:57:1:60:1 | test | IntegerLiteral | | samConversion.kt:63:5:63:13 | ...=... | samConversion.kt:62:1:64:1 | PropertyRefsTest | KtInitializerAssignExpr | | samConversion.kt:63:5:63:13 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:63:5:63:13 | int | file://:0:0:0:0 | | TypeAccess | @@ -4306,7 +4306,7 @@ | samConversion.kt:71:5:71:16 | int | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:74:1:77:1 | Unit | file://:0:0:0:0 | | TypeAccess | | samConversion.kt:74:22:74:42 | PropertyRefsTest | file://:0:0:0:0 | | TypeAccess | -| samConversion.kt:75:9:75:13 | test1 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | +| samConversion.kt:75:5:75:33 | test1 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | | samConversion.kt:75:17:75:33 | (...)... | samConversion.kt:74:1:77:1 | propertyRefsTest | CastExpr | | samConversion.kt:75:17:75:33 | ...=... | samConversion.kt:75:17:75:33 | | AssignExpr | | samConversion.kt:75:17:75:33 | | samConversion.kt:75:17:75:33 | | VarAccess | @@ -4334,7 +4334,7 @@ | samConversion.kt:75:27:75:32 | this | samConversion.kt:75:27:75:32 | invoke | ThisAccess | | samConversion.kt:75:27:75:32 | this. | samConversion.kt:75:27:75:32 | | VarAccess | | samConversion.kt:75:27:75:32 | this. | samConversion.kt:75:27:75:32 | get | VarAccess | -| samConversion.kt:76:9:76:13 | test2 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | +| samConversion.kt:76:5:76:55 | test2 | samConversion.kt:74:1:77:1 | propertyRefsTest | LocalVariableDeclExpr | | samConversion.kt:76:17:76:55 | (...)... | samConversion.kt:74:1:77:1 | propertyRefsTest | CastExpr | | samConversion.kt:76:17:76:55 | ...=... | samConversion.kt:76:17:76:55 | | AssignExpr | | samConversion.kt:76:17:76:55 | | samConversion.kt:76:17:76:55 | | VarAccess | @@ -4383,6 +4383,6 @@ | whenExpr.kt:6:5:6:5 | tmp0_subject | whenExpr.kt:1:1:9:1 | testWhen | VarAccess | | whenExpr.kt:6:16:6:44 | Exception | whenExpr.kt:1:1:9:1 | testWhen | TypeAccess | | whenExpr.kt:6:16:6:44 | new Exception(...) | whenExpr.kt:1:1:9:1 | testWhen | ClassInstanceExpr | -| whenExpr.kt:6:27:6:42 | "No threes please" | whenExpr.kt:1:1:9:1 | testWhen | StringLiteral | +| whenExpr.kt:6:26:6:43 | "No threes please" | whenExpr.kt:1:1:9:1 | testWhen | StringLiteral | | whenExpr.kt:7:13:7:15 | 999 | whenExpr.kt:1:1:9:1 | testWhen | IntegerLiteral | | whenExpr.kt:7:13:7:15 | true | whenExpr.kt:1:1:9:1 | testWhen | BooleanLiteral | diff --git a/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected b/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected index b79725a80e3..1328047196c 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/funcExprs.expected @@ -75,118 +75,118 @@ lambda_modifiers | samConversion.kt:46:32:46:44 | ...->... | samConversion.kt:46:32:46:44 | invoke | final, override, public | | samConversion.kt:58:30:58:45 | ...->... | samConversion.kt:58:30:58:45 | invoke | final, override, public, suspend | anon_class_member_modifiers -| delegatedProperties.kt:6:24:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:24:9:9 | get | override, public | -| delegatedProperties.kt:6:24:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:24:9:9 | invoke | override, public | +| delegatedProperties.kt:6:27:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:27:9:9 | get | override, public | +| delegatedProperties.kt:6:27:9:9 | new KProperty0(...) { ... } | delegatedProperties.kt:6:27:9:9 | invoke | override, public | | delegatedProperties.kt:6:32:9:9 | new Function0(...) { ... } | delegatedProperties.kt:6:32:9:9 | invoke | final, override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | get | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | get | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | invoke | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | invoke | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | set | override, public | -| delegatedProperties.kt:19:31:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:31:19:51 | set | override, public | -| delegatedProperties.kt:23:26:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:26:23:31 | get | override, public | -| delegatedProperties.kt:23:26:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:26:23:31 | invoke | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | get | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | get | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | invoke | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | invoke | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | set | override, public | +| delegatedProperties.kt:19:34:19:51 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:19:34:19:51 | set | override, public | +| delegatedProperties.kt:23:29:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:29:23:31 | get | override, public | +| delegatedProperties.kt:23:29:23:31 | new KProperty0(...) { ... } | delegatedProperties.kt:23:29:23:31 | invoke | override, public | | delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:26:13:26:28 | getCurValue | final, public | | delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:26:13:26:28 | setCurValue | final, public | -| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:27:22:27:88 | getValue | override, public | -| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:28:22:30:13 | setValue | override, public | -| delegatedProperties.kt:33:27:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:27:33:47 | get | override, public | -| delegatedProperties.kt:33:27:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:27:33:47 | invoke | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | get | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | get | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | invoke | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | invoke | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | set | override, public | -| delegatedProperties.kt:34:28:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:28:34:48 | set | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | get | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | get | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | invoke | override, public | -| delegatedProperties.kt:39:31:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:31:39:51 | invoke | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | get | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | get | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | invoke | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | invoke | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | set | override, public | -| delegatedProperties.kt:42:27:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:27:42:47 | set | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | get | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | get | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | invoke | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | invoke | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | set | override, public | -| delegatedProperties.kt:66:33:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:33:66:50 | set | override, public | +| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:27:13:27:88 | getValue | override, public | +| delegatedProperties.kt:25:64:31:9 | new ReadWriteProperty(...) { ... } | delegatedProperties.kt:28:13:30:13 | setValue | override, public | +| delegatedProperties.kt:33:30:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:30:33:47 | get | override, public | +| delegatedProperties.kt:33:30:33:47 | new KProperty0(...) { ... } | delegatedProperties.kt:33:30:33:47 | invoke | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | get | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | get | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | invoke | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | invoke | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | set | override, public | +| delegatedProperties.kt:34:31:34:48 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:34:31:34:48 | set | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | get | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | get | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | invoke | override, public | +| delegatedProperties.kt:39:34:39:51 | new KProperty0(...) { ... } | delegatedProperties.kt:39:34:39:51 | invoke | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | get | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | get | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | invoke | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | invoke | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | set | override, public | +| delegatedProperties.kt:42:30:42:47 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:42:30:42:47 | set | override, public | | delegatedProperties.kt:66:36:66:50 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:66:36:66:50 | get | override, public | | delegatedProperties.kt:66:36:66:50 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:66:36:66:50 | invoke | override, public | | delegatedProperties.kt:66:36:66:50 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:66:36:66:50 | set | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | get | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | get | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | invoke | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | invoke | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | set | override, public | -| delegatedProperties.kt:67:33:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:33:67:53 | set | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | get | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | get | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | invoke | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | invoke | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | set | override, public | +| delegatedProperties.kt:66:36:66:50 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:66:36:66:50 | set | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | get | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | get | override, public | | delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | get | override, public | | delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | invoke | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | invoke | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | invoke | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | set | override, public | +| delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | set | override, public | | delegatedProperties.kt:67:36:67:53 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:67:36:67:53 | set | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | get | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | get | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | invoke | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | invoke | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | set | override, public | -| delegatedProperties.kt:69:36:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:36:69:56 | set | override, public | | delegatedProperties.kt:69:39:69:56 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:69:39:69:56 | get | override, public | | delegatedProperties.kt:69:39:69:56 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:69:39:69:56 | invoke | override, public | | delegatedProperties.kt:69:39:69:56 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:69:39:69:56 | set | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | get | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | get | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | invoke | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | invoke | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | set | override, public | -| delegatedProperties.kt:70:36:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:36:70:59 | set | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | get | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | get | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | invoke | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | invoke | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | set | override, public | +| delegatedProperties.kt:69:39:69:56 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:69:39:69:56 | set | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | get | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | get | override, public | | delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | get | override, public | | delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | invoke | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | invoke | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | invoke | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | set | override, public | +| delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | set | override, public | | delegatedProperties.kt:70:39:70:59 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:70:39:70:59 | set | override, public | -| delegatedProperties.kt:72:36:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:36:72:56 | get | override, public | -| delegatedProperties.kt:72:36:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:36:72:56 | invoke | override, public | | delegatedProperties.kt:72:39:72:56 | new KProperty0(...) { ... } | delegatedProperties.kt:72:39:72:56 | get | override, public | | delegatedProperties.kt:72:39:72:56 | new KProperty0(...) { ... } | delegatedProperties.kt:72:39:72:56 | invoke | override, public | -| delegatedProperties.kt:73:36:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:36:73:56 | get | override, public | -| delegatedProperties.kt:73:36:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:36:73:56 | invoke | override, public | +| delegatedProperties.kt:72:39:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:39:72:56 | get | override, public | +| delegatedProperties.kt:72:39:72:56 | new KProperty1(...) { ... } | delegatedProperties.kt:72:39:72:56 | invoke | override, public | | delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | get | override, public | | delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | invoke | override, public | -| delegatedProperties.kt:75:39:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:39:75:78 | get | override, public | -| delegatedProperties.kt:75:39:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:39:75:78 | invoke | override, public | +| delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | get | override, public | +| delegatedProperties.kt:73:39:73:56 | new KProperty1(...) { ... } | delegatedProperties.kt:73:39:73:56 | invoke | override, public | | delegatedProperties.kt:75:42:75:78 | new KProperty0(...) { ... } | delegatedProperties.kt:75:42:75:78 | get | override, public | | delegatedProperties.kt:75:42:75:78 | new KProperty0(...) { ... } | delegatedProperties.kt:75:42:75:78 | invoke | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | get | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | get | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | invoke | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | invoke | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | set | override, public | -| delegatedProperties.kt:77:34:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:34:77:49 | set | override, public | +| delegatedProperties.kt:75:42:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:42:75:78 | get | override, public | +| delegatedProperties.kt:75:42:75:78 | new KProperty1(...) { ... } | delegatedProperties.kt:75:42:75:78 | invoke | override, public | | delegatedProperties.kt:77:37:77:49 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:77:37:77:49 | get | override, public | | delegatedProperties.kt:77:37:77:49 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:77:37:77:49 | invoke | override, public | | delegatedProperties.kt:77:37:77:49 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:77:37:77:49 | set | override, public | -| delegatedProperties.kt:79:18:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:18:79:38 | get | override, public | -| delegatedProperties.kt:79:18:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:18:79:38 | invoke | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | get | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | get | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | invoke | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | invoke | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | set | override, public | +| delegatedProperties.kt:77:37:77:49 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:77:37:77:49 | set | override, public | | delegatedProperties.kt:79:21:79:38 | new KProperty0(...) { ... } | delegatedProperties.kt:79:21:79:38 | get | override, public | | delegatedProperties.kt:79:21:79:38 | new KProperty0(...) { ... } | delegatedProperties.kt:79:21:79:38 | invoke | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | get | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | get | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | invoke | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | invoke | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | set | override, public | -| delegatedProperties.kt:82:37:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:37:82:54 | set | override, public | +| delegatedProperties.kt:79:21:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:21:79:38 | get | override, public | +| delegatedProperties.kt:79:21:79:38 | new KProperty1(...) { ... } | delegatedProperties.kt:79:21:79:38 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | get | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | get | override, public | | delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | get | override, public | | delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | invoke | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | set | override, public | +| delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | set | override, public | | delegatedProperties.kt:82:40:82:54 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:82:40:82:54 | set | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | get | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | get | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | invoke | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | invoke | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | set | override, public | -| delegatedProperties.kt:87:31:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:31:87:46 | set | override, public | | delegatedProperties.kt:87:34:87:46 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:87:34:87:46 | get | override, public | | delegatedProperties.kt:87:34:87:46 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:87:34:87:46 | invoke | override, public | | delegatedProperties.kt:87:34:87:46 | new KMutableProperty0(...) { ... } | delegatedProperties.kt:87:34:87:46 | set | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | get | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | get | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | invoke | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | invoke | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | set | override, public | +| delegatedProperties.kt:87:34:87:46 | new KMutableProperty1(...) { ... } | delegatedProperties.kt:87:34:87:46 | set | override, public | | exprs.kt:195:16:197:9 | new Interface1(...) { ... } | exprs.kt:196:13:196:49 | getA3 | final, public | | funcExprs.kt:22:26:22:33 | new Function0(...) { ... } | funcExprs.kt:22:26:22:33 | invoke | final, override, public | | funcExprs.kt:23:26:23:33 | new Function0(...) { ... } | funcExprs.kt:23:26:23:33 | invoke | final, override, public | diff --git a/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected b/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected index 03b5d64a7f4..487226320cc 100644 --- a/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected +++ b/java/ql/test-kotlin2/library-tests/exprs/unaryOp.expected @@ -2,9 +2,9 @@ | exprs.kt:32:15:32:26 | !... | exprs.kt:32:15:32:26 | contains(...) | | exprs.kt:79:15:79:22 | ~... | exprs.kt:79:15:79:16 | lx | | exprs.kt:121:14:121:16 | !... | exprs.kt:121:15:121:16 | b1 | -| exprs.kt:202:19:202:20 | ...!! | exprs.kt:202:18:202:18 | x | -| exprs.kt:211:20:211:21 | ...!! | exprs.kt:211:19:211:19 | s | -| exprs.kt:212:20:212:21 | ...!! | exprs.kt:212:19:212:19 | s | +| exprs.kt:202:18:202:20 | ...!! | exprs.kt:202:18:202:18 | x | +| exprs.kt:211:19:211:21 | ...!! | exprs.kt:211:19:211:19 | s | +| exprs.kt:212:19:212:21 | ...!! | exprs.kt:212:19:212:19 | s | | exprs.kt:286:5:286:6 | -... | exprs.kt:286:6:286:6 | i | | exprs.kt:287:5:287:6 | +... | exprs.kt:287:6:287:6 | i | | exprs.kt:288:5:288:6 | -... | exprs.kt:288:6:288:6 | d | diff --git a/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected b/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected index a5576a6c083..8fef9ecf8ff 100644 --- a/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected +++ b/java/ql/test-kotlin2/library-tests/interface-delegate/test.expected @@ -1,8 +1,8 @@ fields | intfDelegate.kt:7:18:9:1 | $$delegate_0 | intfDelegate.kt:7:26:9:1 | | #select -| intfDelegate.kt:0:0:0:0 | f | intfDelegate.kt:7:1:10:1 | Concrete | | intfDelegate.kt:3:3:3:15 | f | intfDelegate.kt:1:1:5:1 | Intf | | intfDelegate.kt:7:1:10:1 | Concrete | intfDelegate.kt:7:1:10:1 | Concrete | +| intfDelegate.kt:7:1:10:1 | f | intfDelegate.kt:7:1:10:1 | Concrete | | intfDelegate.kt:7:26:9:1 | | intfDelegate.kt:7:26:9:1 | new Intf(...) { ... } | | intfDelegate.kt:8:3:8:28 | f | intfDelegate.kt:7:26:9:1 | new Intf(...) { ... } | diff --git a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected index 4ccb82a3d0d..0fe94ff8a25 100644 --- a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -54,7 +54,7 @@ methodWithDuplicate | AbstractList | set | int | | AbstractList | subList | int | | AbstractList | subListRangeCheck | int | -| AbstractMap | containsEntry$kotlin_stdlib | Entry | +| AbstractMap | containsEntry$main | Entry | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -79,7 +79,7 @@ methodWithDuplicate | AbstractMap | put | V | | AbstractMap | putAll | Map | | AbstractMap | remove | Object | -| AbstractMap | containsEntry$kotlin_stdlib | Entry | +| AbstractMap | containsEntry$main | Entry | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -121,7 +121,6 @@ methodWithDuplicate | Collection> | addAll | Collection> | | Collection> | contains | Object | | Collection> | containsAll | Collection | -| Collection> | equals | Object | | Collection> | remove | Object | | Collection> | removeAll | Collection | | Collection> | removeIf | Predicate> | @@ -132,7 +131,6 @@ methodWithDuplicate | Collection | addAll | Collection | | Collection | contains | Object | | Collection | containsAll | Collection | -| Collection | equals | Object | | Collection | remove | Object | | Collection | removeAll | Collection | | Collection | removeIf | Predicate | @@ -154,7 +152,6 @@ methodWithDuplicate | Collection | addAll | Collection | | Collection | contains | Object | | Collection | containsAll | Collection | -| Collection | equals | Object | | Collection | remove | Object | | Collection | removeAll | Collection | | Collection | removeIf | Predicate | @@ -194,7 +191,6 @@ methodWithDuplicate | List | contains | Object | | List | containsAll | Collection | | List | copyOf | Collection | -| List | equals | Object | | List | get | int | | List | indexOf | Object | | List | lastIndexOf | Object | @@ -279,7 +275,6 @@ methodWithDuplicate | Map> | copyOf | Map | | Map> | entry | K | | Map> | entry | V | -| Map> | equals | Object | | Map> | forEach | BiConsumer> | | Map> | get | Object | | Map> | getOrDefault | Entry | @@ -310,7 +305,6 @@ methodWithDuplicate | Map | copyOf | Map | | Map | entry | K | | Map | entry | V | -| Map | equals | Object | | Map | forEach | BiConsumer | | Map | get | Object | | Map | getOrDefault | Object | @@ -341,7 +335,6 @@ methodWithDuplicate | Map | copyOf | Map | | Map | entry | K | | Map | entry | V | -| Map | equals | Object | | Map | forEach | BiConsumer | | Map | get | Object | | Map | getOrDefault | Object | diff --git a/java/ql/test-kotlin2/library-tests/methods/exprs.expected b/java/ql/test-kotlin2/library-tests/methods/exprs.expected index 7c494f6e392..4d7a0a6e85a 100644 --- a/java/ql/test-kotlin2/library-tests/methods/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/methods/exprs.expected @@ -48,6 +48,7 @@ | dataClass.kt:0:0:0:0 | String | TypeAccess | | dataClass.kt:0:0:0:0 | String | TypeAccess | | dataClass.kt:0:0:0:0 | String | TypeAccess | +| dataClass.kt:0:0:0:0 | String | TypeAccess | | dataClass.kt:0:0:0:0 | boolean | TypeAccess | | dataClass.kt:0:0:0:0 | copy(...) | MethodCall | | dataClass.kt:0:0:0:0 | false | BooleanLiteral | @@ -59,6 +60,7 @@ | dataClass.kt:0:0:0:0 | int | TypeAccess | | dataClass.kt:0:0:0:0 | int | TypeAccess | | dataClass.kt:0:0:0:0 | int | TypeAccess | +| dataClass.kt:0:0:0:0 | int | TypeAccess | | dataClass.kt:0:0:0:0 | new DataClass(...) | ClassInstanceExpr | | dataClass.kt:0:0:0:0 | other | VarAccess | | dataClass.kt:0:0:0:0 | other | VarAccess | @@ -112,7 +114,6 @@ | dataClass.kt:1:22:1:31 | int | TypeAccess | | dataClass.kt:1:22:1:31 | int | TypeAccess | | dataClass.kt:1:22:1:31 | int | TypeAccess | -| dataClass.kt:1:22:1:31 | int | TypeAccess | | dataClass.kt:1:22:1:31 | this | ThisAccess | | dataClass.kt:1:22:1:31 | this.x | VarAccess | | dataClass.kt:1:22:1:31 | x | VarAccess | @@ -124,7 +125,6 @@ | dataClass.kt:1:34:1:46 | String | TypeAccess | | dataClass.kt:1:34:1:46 | String | TypeAccess | | dataClass.kt:1:34:1:46 | String | TypeAccess | -| dataClass.kt:1:34:1:46 | String | TypeAccess | | dataClass.kt:1:34:1:46 | Unit | TypeAccess | | dataClass.kt:1:34:1:46 | this | ThisAccess | | dataClass.kt:1:34:1:46 | this | ThisAccess | @@ -132,79 +132,79 @@ | dataClass.kt:1:34:1:46 | this.y | VarAccess | | dataClass.kt:1:34:1:46 | y | VarAccess | | dataClass.kt:1:34:1:46 | y | VarAccess | -| delegates.kt:1:9:1:12 | this | ThisAccess | -| delegates.kt:1:9:1:12 | this | ThisAccess | -| delegates.kt:1:9:1:12 | this | ThisAccess | -| delegates.kt:4:18:6:5 | ...::... | PropertyRefExpr | -| delegates.kt:4:18:6:5 | ...=... | KtInitializerAssignExpr | -| delegates.kt:4:18:6:5 | Integer | TypeAccess | -| delegates.kt:4:18:6:5 | Integer | TypeAccess | -| delegates.kt:4:18:6:5 | Integer | TypeAccess | -| delegates.kt:4:18:6:5 | KProperty1 | TypeAccess | -| delegates.kt:4:18:6:5 | Lazy | TypeAccess | -| delegates.kt:4:18:6:5 | LazyKt | TypeAccess | -| delegates.kt:4:18:6:5 | MyClass | TypeAccess | -| delegates.kt:4:18:6:5 | a0 | VarAccess | -| delegates.kt:4:18:6:5 | a0 | VarAccess | -| delegates.kt:4:18:6:5 | get(...) | MethodCall | -| delegates.kt:4:18:6:5 | getLazyProp(...) | MethodCall | -| delegates.kt:4:18:6:5 | getValue(...) | MethodCall | -| delegates.kt:4:18:6:5 | int | TypeAccess | -| delegates.kt:4:18:6:5 | lazyProp$delegate | VarAccess | -| delegates.kt:4:18:6:5 | this | ThisAccess | -| delegates.kt:4:18:6:5 | this | ThisAccess | -| delegates.kt:4:18:6:5 | this.lazyProp$delegate | VarAccess | +| delegates.kt:4:21:6:5 | ...::... | PropertyRefExpr | +| delegates.kt:4:21:6:5 | ...=... | KtInitializerAssignExpr | | delegates.kt:4:21:6:5 | Integer | TypeAccess | +| delegates.kt:4:21:6:5 | Integer | TypeAccess | +| delegates.kt:4:21:6:5 | Integer | TypeAccess | +| delegates.kt:4:21:6:5 | Integer | TypeAccess | +| delegates.kt:4:21:6:5 | KProperty1 | TypeAccess | +| delegates.kt:4:21:6:5 | Lazy | TypeAccess | | delegates.kt:4:21:6:5 | LazyKt | TypeAccess | +| delegates.kt:4:21:6:5 | LazyKt | TypeAccess | +| delegates.kt:4:21:6:5 | MyClass | TypeAccess | +| delegates.kt:4:21:6:5 | a0 | VarAccess | +| delegates.kt:4:21:6:5 | a0 | VarAccess | +| delegates.kt:4:21:6:5 | get(...) | MethodCall | +| delegates.kt:4:21:6:5 | getLazyProp(...) | MethodCall | +| delegates.kt:4:21:6:5 | getValue(...) | MethodCall | +| delegates.kt:4:21:6:5 | int | TypeAccess | | delegates.kt:4:21:6:5 | lazy(...) | MethodCall | +| delegates.kt:4:21:6:5 | lazyProp$delegate | VarAccess | +| delegates.kt:4:21:6:5 | this | ThisAccess | +| delegates.kt:4:21:6:5 | this | ThisAccess | +| delegates.kt:4:21:6:5 | this | ThisAccess | +| delegates.kt:4:21:6:5 | this.lazyProp$delegate | VarAccess | | delegates.kt:4:26:6:5 | ...->... | LambdaExpr | | delegates.kt:4:26:6:5 | Function0 | TypeAccess | | delegates.kt:4:26:6:5 | Integer | TypeAccess | | delegates.kt:4:26:6:5 | int | TypeAccess | | delegates.kt:5:9:5:9 | 5 | IntegerLiteral | -| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr | -| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr | -| delegates.kt:8:32:11:5 | ...=... | KtInitializerAssignExpr | -| delegates.kt:8:32:11:5 | KMutableProperty1 | TypeAccess | -| delegates.kt:8:32:11:5 | KMutableProperty1 | TypeAccess | -| delegates.kt:8:32:11:5 | MyClass | TypeAccess | -| delegates.kt:8:32:11:5 | MyClass | TypeAccess | -| delegates.kt:8:32:11:5 | Object | TypeAccess | -| delegates.kt:8:32:11:5 | ReadWriteProperty | TypeAccess | -| delegates.kt:8:32:11:5 | String | TypeAccess | -| delegates.kt:8:32:11:5 | String | TypeAccess | -| delegates.kt:8:32:11:5 | String | TypeAccess | -| delegates.kt:8:32:11:5 | String | TypeAccess | -| delegates.kt:8:32:11:5 | String | TypeAccess | -| delegates.kt:8:32:11:5 | Unit | TypeAccess | -| delegates.kt:8:32:11:5 | a0 | VarAccess | -| delegates.kt:8:32:11:5 | a0 | VarAccess | -| delegates.kt:8:32:11:5 | a0 | VarAccess | -| delegates.kt:8:32:11:5 | a0 | VarAccess | -| delegates.kt:8:32:11:5 | a0 | VarAccess | -| delegates.kt:8:32:11:5 | a0 | VarAccess | -| delegates.kt:8:32:11:5 | a1 | VarAccess | -| delegates.kt:8:32:11:5 | a1 | VarAccess | -| delegates.kt:8:32:11:5 | get(...) | MethodCall | -| delegates.kt:8:32:11:5 | get(...) | MethodCall | -| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodCall | -| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodCall | -| delegates.kt:8:32:11:5 | getValue(...) | MethodCall | -| delegates.kt:8:32:11:5 | observableProp$delegate | VarAccess | -| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodCall | -| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodCall | -| delegates.kt:8:32:11:5 | setValue(...) | MethodCall | -| delegates.kt:8:32:11:5 | this | ThisAccess | -| delegates.kt:8:32:11:5 | this | ThisAccess | -| delegates.kt:8:32:11:5 | this | ThisAccess | -| delegates.kt:8:32:11:5 | this | ThisAccess | -| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess | -| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess | +| delegates.kt:8:5:11:5 | Unit | TypeAccess | | delegates.kt:8:35:8:43 | INSTANCE | VarAccess | +| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr | +| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr | +| delegates.kt:8:35:11:5 | ...=... | KtInitializerAssignExpr | | delegates.kt:8:35:11:5 | | VarAccess | +| delegates.kt:8:35:11:5 | KMutableProperty1 | TypeAccess | +| delegates.kt:8:35:11:5 | KMutableProperty1 | TypeAccess | +| delegates.kt:8:35:11:5 | MyClass | TypeAccess | +| delegates.kt:8:35:11:5 | MyClass | TypeAccess | +| delegates.kt:8:35:11:5 | Object | TypeAccess | +| delegates.kt:8:35:11:5 | ReadWriteProperty | TypeAccess | | delegates.kt:8:35:11:5 | String | TypeAccess | +| delegates.kt:8:35:11:5 | String | TypeAccess | +| delegates.kt:8:35:11:5 | String | TypeAccess | +| delegates.kt:8:35:11:5 | String | TypeAccess | +| delegates.kt:8:35:11:5 | String | TypeAccess | +| delegates.kt:8:35:11:5 | String | TypeAccess | +| delegates.kt:8:35:11:5 | a0 | VarAccess | +| delegates.kt:8:35:11:5 | a0 | VarAccess | +| delegates.kt:8:35:11:5 | a0 | VarAccess | +| delegates.kt:8:35:11:5 | a0 | VarAccess | +| delegates.kt:8:35:11:5 | a0 | VarAccess | +| delegates.kt:8:35:11:5 | a0 | VarAccess | +| delegates.kt:8:35:11:5 | a1 | VarAccess | +| delegates.kt:8:35:11:5 | a1 | VarAccess | +| delegates.kt:8:35:11:5 | get(...) | MethodCall | +| delegates.kt:8:35:11:5 | get(...) | MethodCall | +| delegates.kt:8:35:11:5 | getObservableProp(...) | MethodCall | +| delegates.kt:8:35:11:5 | getObservableProp(...) | MethodCall | +| delegates.kt:8:35:11:5 | getValue(...) | MethodCall | | delegates.kt:8:35:11:5 | observable(...) | MethodCall | -| delegates.kt:8:57:8:62 | "" | StringLiteral | +| delegates.kt:8:35:11:5 | observableProp$delegate | VarAccess | +| delegates.kt:8:35:11:5 | setObservableProp(...) | MethodCall | +| delegates.kt:8:35:11:5 | setObservableProp(...) | MethodCall | +| delegates.kt:8:35:11:5 | setValue(...) | MethodCall | +| delegates.kt:8:35:11:5 | this | ThisAccess | +| delegates.kt:8:35:11:5 | this | ThisAccess | +| delegates.kt:8:35:11:5 | this | ThisAccess | +| delegates.kt:8:35:11:5 | this | ThisAccess | +| delegates.kt:8:35:11:5 | this | ThisAccess | +| delegates.kt:8:35:11:5 | this | ThisAccess | +| delegates.kt:8:35:11:5 | this.observableProp$delegate | VarAccess | +| delegates.kt:8:35:11:5 | this.observableProp$delegate | VarAccess | +| delegates.kt:8:56:8:63 | "" | StringLiteral | | delegates.kt:8:66:11:5 | ...->... | LambdaExpr | | delegates.kt:8:66:11:5 | Function3,String,String,Unit> | TypeAccess | | delegates.kt:8:66:11:5 | KProperty | TypeAccess | @@ -223,23 +223,17 @@ | delegates.kt:10:23:10:25 | old | VarAccess | | delegates.kt:10:26:10:31 | ", now " | StringLiteral | | delegates.kt:10:33:10:35 | new | VarAccess | -| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumClass[] | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumEntries | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumEntries | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess | -| enumClass.kt:0:0:0:0 | EnumWithFunctions[] | TypeAccess | -| enumClass.kt:0:0:0:0 | String | TypeAccess | -| enumClass.kt:0:0:0:0 | String | TypeAccess | -| enumClass.kt:1:1:4:1 | 0 | IntegerLiteral | -| enumClass.kt:1:1:4:1 | Enum | TypeAccess | | enumClass.kt:1:1:4:1 | EnumClass | TypeAccess | -| enumClass.kt:1:1:4:1 | new Enum(...) | ClassInstanceExpr | -| enumClass.kt:1:1:4:1 | null | NullLiteral | +| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess | +| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess | +| enumClass.kt:1:1:4:1 | EnumClass[] | TypeAccess | +| enumClass.kt:1:1:4:1 | EnumEntries | TypeAccess | +| enumClass.kt:1:1:4:1 | String | TypeAccess | +| enumClass.kt:1:21:1:32 | 0 | IntegerLiteral | +| enumClass.kt:1:21:1:32 | Enum | TypeAccess | +| enumClass.kt:1:21:1:32 | EnumClass | TypeAccess | +| enumClass.kt:1:21:1:32 | new Enum(...) | ClassInstanceExpr | +| enumClass.kt:1:21:1:32 | null | NullLiteral | | enumClass.kt:1:22:1:31 | ...=... | KtInitializerAssignExpr | | enumClass.kt:1:22:1:31 | int | TypeAccess | | enumClass.kt:1:22:1:31 | int | TypeAccess | @@ -251,45 +245,49 @@ | enumClass.kt:2:5:2:13 | ...=... | KtInitializerAssignExpr | | enumClass.kt:2:5:2:13 | EnumClass | TypeAccess | | enumClass.kt:2:5:2:13 | EnumClass | TypeAccess | -| enumClass.kt:2:5:2:13 | EnumClass | TypeAccess | | enumClass.kt:2:5:2:13 | EnumClass.enum1 | VarAccess | -| enumClass.kt:2:5:2:13 | new EnumClass(...) | ClassInstanceExpr | +| enumClass.kt:2:10:2:12 | EnumClass | TypeAccess | +| enumClass.kt:2:10:2:12 | new EnumClass(...) | ClassInstanceExpr | | enumClass.kt:2:11:2:11 | 1 | IntegerLiteral | | enumClass.kt:3:5:3:12 | ...=... | KtInitializerAssignExpr | | enumClass.kt:3:5:3:12 | EnumClass | TypeAccess | | enumClass.kt:3:5:3:12 | EnumClass | TypeAccess | -| enumClass.kt:3:5:3:12 | EnumClass | TypeAccess | | enumClass.kt:3:5:3:12 | EnumClass.enum2 | VarAccess | -| enumClass.kt:3:5:3:12 | new EnumClass(...) | ClassInstanceExpr | +| enumClass.kt:3:10:3:12 | EnumClass | TypeAccess | +| enumClass.kt:3:10:3:12 | new EnumClass(...) | ClassInstanceExpr | | enumClass.kt:3:11:3:11 | 1 | IntegerLiteral | | enumClass.kt:6:1:16:1 | 0 | IntegerLiteral | | enumClass.kt:6:1:16:1 | Enum | TypeAccess | +| enumClass.kt:6:1:16:1 | EnumEntries | TypeAccess | | enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess | -| enumClass.kt:6:1:16:1 | new Enum(...) | ClassInstanceExpr | +| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess | +| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess | +| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess | +| enumClass.kt:6:1:16:1 | EnumWithFunctions[] | TypeAccess | +| enumClass.kt:6:1:16:1 | String | TypeAccess | +| enumClass.kt:6:1:16:1 | new Enum(...) | ClassInstanceExpr | | enumClass.kt:6:1:16:1 | null | NullLiteral | | enumClass.kt:8:3:11:4 | ...=... | KtInitializerAssignExpr | -| enumClass.kt:8:3:11:4 | | ImplicitCoercionToUnitExpr | | enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess | | enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess | | enumClass.kt:8:3:11:4 | EnumWithFunctions | TypeAccess | | enumClass.kt:8:3:11:4 | EnumWithFunctions.VAL | VarAccess | -| enumClass.kt:8:3:11:4 | Unit | TypeAccess | | enumClass.kt:8:3:11:4 | VAL | TypeAccess | | enumClass.kt:8:3:11:4 | new EnumWithFunctions(...) | ClassInstanceExpr | | enumClass.kt:8:3:11:4 | new VAL(...) | ClassInstanceExpr | -| enumClass.kt:9:14:9:30 | int | TypeAccess | +| enumClass.kt:9:5:9:30 | int | TypeAccess | | enumClass.kt:9:20:9:25 | int | TypeAccess | | enumClass.kt:9:30:9:30 | i | VarAccess | -| enumClass.kt:10:14:10:42 | int | TypeAccess | +| enumClass.kt:10:5:10:42 | int | TypeAccess | | enumClass.kt:10:20:10:25 | int | TypeAccess | | enumClass.kt:10:30:10:33 | this | ThisAccess | | enumClass.kt:10:30:10:38 | f(...) | MethodCall | | enumClass.kt:10:30:10:42 | ... + ... | AddExpr | | enumClass.kt:10:37:10:37 | i | VarAccess | | enumClass.kt:10:42:10:42 | i | VarAccess | -| enumClass.kt:13:12:13:29 | int | TypeAccess | +| enumClass.kt:13:3:13:29 | int | TypeAccess | | enumClass.kt:13:18:13:23 | int | TypeAccess | -| enumClass.kt:14:12:14:29 | int | TypeAccess | +| enumClass.kt:14:3:14:29 | int | TypeAccess | | enumClass.kt:14:18:14:23 | int | TypeAccess | | methods2.kt:4:1:5:1 | Unit | TypeAccess | | methods2.kt:4:26:4:31 | int | TypeAccess | @@ -341,15 +339,15 @@ | methods4.kt:7:5:7:34 | Unit | TypeAccess | | methods4.kt:7:11:7:29 | InsideNestedTest | TypeAccess | | methods5.kt:3:1:11:1 | Unit | TypeAccess | -| methods5.kt:4:7:4:7 | x | LocalVariableDeclExpr | +| methods5.kt:4:3:4:11 | x | LocalVariableDeclExpr | | methods5.kt:4:11:4:11 | 5 | IntegerLiteral | | methods5.kt:5:3:5:27 | int | TypeAccess | | methods5.kt:5:13:5:18 | int | TypeAccess | | methods5.kt:5:23:5:23 | i | VarAccess | | methods5.kt:5:23:5:27 | ... + ... | AddExpr | | methods5.kt:5:27:5:27 | x | VarAccess | -| methods5.kt:6:3:6:3 | x | VarAccess | | methods5.kt:6:3:6:7 | ...=... | AssignExpr | +| methods5.kt:6:3:6:7 | x | VarAccess | | methods5.kt:6:7:6:7 | 6 | IntegerLiteral | | methods5.kt:7:3:7:15 | | ImplicitCoercionToUnitExpr | | methods5.kt:7:3:7:15 | Object | TypeAccess | @@ -358,8 +356,8 @@ | methods5.kt:7:3:7:15 | a(...) | MethodCall | | methods5.kt:7:3:7:15 | new (...) | ClassInstanceExpr | | methods5.kt:7:13:7:14 | 42 | IntegerLiteral | -| methods5.kt:8:3:8:3 | x | VarAccess | | methods5.kt:8:3:8:7 | ...=... | AssignExpr | +| methods5.kt:8:3:8:7 | x | VarAccess | | methods5.kt:8:7:8:7 | 7 | IntegerLiteral | | methods5.kt:9:3:9:32 | int | TypeAccess | | methods5.kt:9:12:9:17 | C1 | TypeAccess | @@ -376,7 +374,7 @@ | methods5.kt:10:13:10:18 | | ImplicitCoercionToUnitExpr | | methods5.kt:10:13:10:18 | Unit | TypeAccess | | methods5.kt:10:16:10:17 | 42 | IntegerLiteral | -| methods6.kt:3:9:4:1 | Unit | TypeAccess | +| methods6.kt:3:1:4:1 | Unit | TypeAccess | | methods.kt:2:1:3:1 | Unit | TypeAccess | | methods.kt:2:20:2:25 | int | TypeAccess | | methods.kt:2:28:2:33 | int | TypeAccess | @@ -394,9 +392,9 @@ | methods.kt:11:9:11:28 | topLevelMethod(...) | MethodCall | | methods.kt:11:24:11:24 | b | VarAccess | | methods.kt:11:27:11:27 | 4 | IntegerLiteral | -| methods.kt:14:12:14:29 | Unit | TypeAccess | -| methods.kt:15:15:15:35 | Unit | TypeAccess | -| methods.kt:16:13:16:31 | Unit | TypeAccess | -| methods.kt:17:14:17:33 | Unit | TypeAccess | +| methods.kt:14:5:14:29 | Unit | TypeAccess | +| methods.kt:15:5:15:35 | Unit | TypeAccess | +| methods.kt:16:5:16:31 | Unit | TypeAccess | +| methods.kt:17:5:17:33 | Unit | TypeAccess | | methods.kt:18:5:18:36 | Unit | TypeAccess | -| methods.kt:19:12:19:29 | Unit | TypeAccess | +| methods.kt:19:5:19:29 | Unit | TypeAccess | diff --git a/java/ql/test-kotlin2/library-tests/methods/methods.expected b/java/ql/test-kotlin2/library-tests/methods/methods.expected index b1550468e0a..330c5b2f919 100644 --- a/java/ql/test-kotlin2/library-tests/methods/methods.expected +++ b/java/ql/test-kotlin2/library-tests/methods/methods.expected @@ -2,19 +2,19 @@ methods | clinit.kt:0:0:0:0 | ClinitKt | clinit.kt:0:0:0:0 | | () | static | Compiler generated | | clinit.kt:0:0:0:0 | ClinitKt | clinit.kt:3:1:3:24 | getTopLevelInt | getTopLevelInt() | final, public, static | Compiler generated | | clinit.kt:0:0:0:0 | ClinitKt | clinit.kt:3:1:3:24 | setTopLevelInt | setTopLevelInt(int) | final, public, static | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | component1 | component1() | final, public | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | component2 | component2() | final, public | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | copy | copy(int,java.lang.String) | final, public | Compiler generated | +| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | copy$default | copy$default(DataClass,int,java.lang.String,int,java.lang.Object) | public, static | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | equals | equals(java.lang.Object) | override, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | hashCode | hashCode() | override, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:0:0:0:0 | toString | toString() | override, public | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:1:1:47 | copy | copy(int,java.lang.String) | final, public | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:1:1:47 | copy$default | copy$default(DataClass,int,java.lang.String,int,java.lang.Object) | public, static | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:22:1:31 | component1 | component1() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:22:1:31 | getX | getX() | final, public | Compiler generated | -| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | component2 | component2() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | getY | getY() | final, public | Compiler generated | | dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | setY | setY(java.lang.String) | final, public | Compiler generated | -| delegates.kt:3:1:12:1 | MyClass | delegates.kt:4:5:6:5 | getLazyProp | getLazyProp() | final, public | Compiler generated | -| delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:5:11:5 | getObservableProp | getObservableProp() | final, public | Compiler generated | +| delegates.kt:3:1:12:1 | MyClass | delegates.kt:4:21:6:5 | getLazyProp | getLazyProp() | final, public | Compiler generated | | delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:5:11:5 | setObservableProp | setObservableProp(java.lang.String) | final, public | Compiler generated | +| delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:35:11:5 | getObservableProp | getObservableProp() | final, public | Compiler generated | | delegates.kt:4:21:6:5 | new KProperty1(...) { ... } | delegates.kt:4:21:6:5 | get | get(MyClass) | override, public | | | delegates.kt:4:21:6:5 | new KProperty1(...) { ... } | delegates.kt:4:21:6:5 | invoke | invoke(MyClass) | override, public | | | delegates.kt:4:26:6:5 | new Function0(...) { ... } | delegates.kt:4:26:6:5 | invoke | invoke() | final, override, public | | diff --git a/java/ql/test-kotlin2/library-tests/methods/parameters.expected b/java/ql/test-kotlin2/library-tests/methods/parameters.expected index f4c60ab6ac4..76538cae775 100644 --- a/java/ql/test-kotlin2/library-tests/methods/parameters.expected +++ b/java/ql/test-kotlin2/library-tests/methods/parameters.expected @@ -1,12 +1,12 @@ | clinit.kt:3:1:3:24 | setTopLevelInt | clinit.kt:3:1:3:24 | | 0 | +| dataClass.kt:0:0:0:0 | copy | dataClass.kt:0:0:0:0 | x | 0 | +| dataClass.kt:0:0:0:0 | copy | dataClass.kt:0:0:0:0 | y | 1 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p0 | 0 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p1 | 1 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p2 | 2 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p3 | 3 | +| dataClass.kt:0:0:0:0 | copy$default | dataClass.kt:0:0:0:0 | p4 | 4 | | dataClass.kt:0:0:0:0 | equals | dataClass.kt:0:0:0:0 | other | 0 | -| dataClass.kt:1:1:1:47 | copy | dataClass.kt:1:22:1:31 | x | 0 | -| dataClass.kt:1:1:1:47 | copy | dataClass.kt:1:34:1:46 | y | 1 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p0 | 0 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p1 | 1 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p2 | 2 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p3 | 3 | -| dataClass.kt:1:1:1:47 | copy$default | dataClass.kt:1:1:1:47 | p4 | 4 | | dataClass.kt:1:34:1:46 | setY | dataClass.kt:1:34:1:46 | | 0 | | delegates.kt:4:21:6:5 | get | delegates.kt:4:21:6:5 | a0 | 0 | | delegates.kt:4:21:6:5 | invoke | delegates.kt:4:21:6:5 | a0 | 0 | diff --git a/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected b/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected index 5648ac7cf00..2e7d2920d78 100644 --- a/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected +++ b/java/ql/test-kotlin2/library-tests/parameter-defaults/defaults.expected @@ -1,17 +1,17 @@ | test.kt:5:3:7:3 | f | test.kt:5:3:7:3 | f$default | | test.kt:19:3:22:3 | f | test.kt:19:3:22:3 | f$default | -| test.kt:34:14:36:3 | f | test.kt:34:14:36:3 | f$default | +| test.kt:34:3:36:3 | f | test.kt:34:3:36:3 | f$default | | test.kt:56:3:58:3 | test | test.kt:56:3:58:3 | test$default | -| test.kt:68:1:80:1 | TestConstructor | test.kt:68:1:80:1 | TestConstructor | +| test.kt:68:22:68:75 | TestConstructor | test.kt:68:22:68:75 | TestConstructor | | test.kt:86:5:88:5 | f | test.kt:86:5:88:5 | f$default | | test.kt:106:7:108:7 | f | test.kt:106:7:108:7 | f$default | | test.kt:124:3:126:3 | f | test.kt:124:3:126:3 | f$default | | test.kt:135:3:135:43 | testReturn | test.kt:135:3:135:43 | testReturn$default | | test.kt:145:3:147:3 | f | test.kt:145:3:147:3 | f$default | | test.kt:158:3:158:35 | f | test.kt:158:3:158:35 | f$default | -| test.kt:159:12:159:44 | g$main | test.kt:159:12:159:44 | g$main$default | -| test.kt:160:13:160:45 | h | test.kt:160:13:160:45 | h$default | -| test.kt:161:11:161:43 | i | test.kt:161:11:161:43 | i$default | +| test.kt:159:3:159:44 | g$main | test.kt:159:3:159:44 | g$main$default | +| test.kt:160:3:160:45 | h | test.kt:160:3:160:45 | h$default | +| test.kt:161:3:161:43 | i | test.kt:161:3:161:43 | i$default | | test.kt:171:3:171:97 | f | test.kt:171:3:171:97 | f$default | | test.kt:179:3:179:46 | f | test.kt:179:3:179:46 | f$default | | test.kt:180:3:180:34 | f | test.kt:180:3:180:34 | f$default | diff --git a/java/ql/test-kotlin2/library-tests/stmts/PrintAst.expected b/java/ql/test-kotlin2/library-tests/stmts/PrintAst.expected index b8b27a5af0b..c97765b3a73 100644 --- a/java/ql/test-kotlin2/library-tests/stmts/PrintAst.expected +++ b/java/ql/test-kotlin2/library-tests/stmts/PrintAst.expected @@ -153,7 +153,7 @@ stmts.kt: # 37| 1: [BreakStmt] break # 41| 4: [EnhancedForStmt] for (... : ...) #-----| 0: (Single Local Variable Declaration) -# 41| 1: [LocalVariableDeclExpr] tmp3_loop_parameter +# 41| 1: [LocalVariableDeclExpr] # 41| 1: [MethodCall] withIndex(...) # 41| -2: [TypeAccess] Integer # 41| -1: [TypeAccess] CollectionsKt @@ -163,12 +163,12 @@ stmts.kt: # 41| 2: [BlockStmt] { ... } # 41| 0: [LocalVariableDeclStmt] var ...; # 41| 1: [LocalVariableDeclExpr] v -# 0| 0: [MethodCall] component1(...) -# 41| -1: [VarAccess] tmp3_loop_parameter +# 41| 0: [MethodCall] component1(...) +# 41| -1: [VarAccess] # 41| 1: [LocalVariableDeclStmt] var ...; # 41| 1: [LocalVariableDeclExpr] i -# 0| 0: [MethodCall] component2(...) -# 0| -1: [VarAccess] tmp3_loop_parameter +# 41| 0: [MethodCall] component2(...) +# 41| -1: [VarAccess] # 41| 2: [BlockStmt] { ... } # 42| 0: [ExprStmt] ; # 42| 0: [WhenExpr] when ... diff --git a/java/ql/test-kotlin2/library-tests/stmts/exprs.expected b/java/ql/test-kotlin2/library-tests/stmts/exprs.expected index 699eef4363e..0681524e542 100644 --- a/java/ql/test-kotlin2/library-tests/stmts/exprs.expected +++ b/java/ql/test-kotlin2/library-tests/stmts/exprs.expected @@ -1,4 +1,3 @@ -| stmts.kt:0:0:0:0 | tmp3_loop_parameter | VarAccess | | stmts.kt:2:1:20:1 | int | TypeAccess | | stmts.kt:2:20:2:25 | int | TypeAccess | | stmts.kt:2:28:2:33 | int | TypeAccess | @@ -27,22 +26,22 @@ | stmts.kt:17:5:17:58 | q2 | LocalVariableDeclExpr | | stmts.kt:17:26:17:58 | when ... | WhenExpr | | stmts.kt:17:29:17:32 | true | BooleanLiteral | -| stmts.kt:17:37:17:37 | z | VarAccess | | stmts.kt:17:37:17:41 | ...=... | AssignExpr | +| stmts.kt:17:37:17:41 | z | VarAccess | | stmts.kt:17:41:17:41 | 4 | IntegerLiteral | | stmts.kt:17:50:17:58 | true | BooleanLiteral | -| stmts.kt:17:52:17:52 | z | VarAccess | | stmts.kt:17:52:17:56 | ...=... | AssignExpr | +| stmts.kt:17:52:17:56 | z | VarAccess | | stmts.kt:17:56:17:56 | 5 | IntegerLiteral | | stmts.kt:18:5:18:56 | q3 | LocalVariableDeclExpr | | stmts.kt:18:26:18:56 | when ... | WhenExpr | | stmts.kt:18:29:18:32 | true | BooleanLiteral | -| stmts.kt:18:37:18:37 | z | VarAccess | | stmts.kt:18:37:18:41 | ...=... | AssignExpr | +| stmts.kt:18:37:18:41 | z | VarAccess | | stmts.kt:18:41:18:41 | 4 | IntegerLiteral | -| stmts.kt:18:52:18:52 | z | VarAccess | | stmts.kt:18:52:18:56 | ...=... | AssignExpr | | stmts.kt:18:52:18:56 | true | BooleanLiteral | +| stmts.kt:18:52:18:56 | z | VarAccess | | stmts.kt:18:56:18:56 | 5 | IntegerLiteral | | stmts.kt:19:12:19:12 | x | VarAccess | | stmts.kt:19:12:19:16 | ... + ... | AddExpr | @@ -82,12 +81,13 @@ | stmts.kt:38:18:38:18 | y | VarAccess | | stmts.kt:38:18:38:24 | ... > ... | GTExpr | | stmts.kt:38:22:38:24 | 100 | IntegerLiteral | +| stmts.kt:41:10:41:14 | | LocalVariableDeclExpr | +| stmts.kt:41:11:41:11 | | VarAccess | | stmts.kt:41:11:41:11 | component1(...) | MethodCall | | stmts.kt:41:11:41:11 | v | LocalVariableDeclExpr | +| stmts.kt:41:13:41:13 | | VarAccess | | stmts.kt:41:13:41:13 | component2(...) | MethodCall | | stmts.kt:41:13:41:13 | i | LocalVariableDeclExpr | -| stmts.kt:41:19:41:36 | tmp3_loop_parameter | LocalVariableDeclExpr | -| stmts.kt:41:19:41:36 | tmp3_loop_parameter | VarAccess | | stmts.kt:41:20:41:20 | x | VarAccess | | stmts.kt:41:20:41:23 | rangeTo(...) | MethodCall | | stmts.kt:41:20:41:36 | CollectionsKt | TypeAccess | diff --git a/java/ql/test-kotlin2/library-tests/stmts/stmts.expected b/java/ql/test-kotlin2/library-tests/stmts/stmts.expected index 532cda08133..62238cbfaef 100644 --- a/java/ql/test-kotlin2/library-tests/stmts/stmts.expected +++ b/java/ql/test-kotlin2/library-tests/stmts/stmts.expected @@ -18,16 +18,16 @@ | stmts.kt:13:9:13:16 | return ... | ReturnStmt | | stmts.kt:15:5:15:13 | var ...; | LocalVariableDeclStmt | | stmts.kt:17:5:17:58 | var ...; | LocalVariableDeclStmt | -| stmts.kt:17:26:17:58 | ... -> ... | WhenBranch | -| stmts.kt:17:26:17:58 | ... -> ... | WhenBranch | +| stmts.kt:17:29:17:43 | ... -> ... | WhenBranch | | stmts.kt:17:35:17:43 | { ... } | BlockStmt | | stmts.kt:17:37:17:41 | ; | ExprStmt | +| stmts.kt:17:50:17:58 | ... -> ... | WhenBranch | | stmts.kt:17:50:17:58 | { ... } | BlockStmt | | stmts.kt:17:52:17:56 | ; | ExprStmt | | stmts.kt:18:5:18:56 | var ...; | LocalVariableDeclStmt | -| stmts.kt:18:26:18:56 | ... -> ... | WhenBranch | -| stmts.kt:18:26:18:56 | ... -> ... | WhenBranch | +| stmts.kt:18:29:18:41 | ... -> ... | WhenBranch | | stmts.kt:18:37:18:41 | ; | ExprStmt | +| stmts.kt:18:52:18:56 | ... -> ... | WhenBranch | | stmts.kt:18:52:18:56 | ; | ExprStmt | | stmts.kt:19:5:19:16 | return ... | ReturnStmt | | stmts.kt:22:27:44:1 | { ... } | BlockStmt | @@ -37,15 +37,15 @@ | stmts.kt:24:9:26:25 | do ... while (...) | DoStmt | | stmts.kt:24:9:26:25 | { ... } | BlockStmt | | stmts.kt:24:13:26:9 | { ... } | BlockStmt | -| stmts.kt:25:13:25:33 | ... -> ... | WhenBranch | | stmts.kt:25:13:25:33 | ; | ExprStmt | +| stmts.kt:25:17:25:33 | ... -> ... | WhenBranch | | stmts.kt:25:24:25:33 | break | BreakStmt | | stmts.kt:28:5:29:16 | while (...) | WhileStmt | | stmts.kt:29:9:29:16 | continue | ContinueStmt | | stmts.kt:31:5:33:5 | for (... : ...) | EnhancedForStmt | | stmts.kt:31:21:33:5 | { ... } | BlockStmt | -| stmts.kt:32:9:32:24 | ... -> ... | WhenBranch | | stmts.kt:32:9:32:24 | ; | ExprStmt | +| stmts.kt:32:13:32:24 | ... -> ... | WhenBranch | | stmts.kt:32:20:32:24 | break | BreakStmt | | stmts.kt:35:13:39:5 |